質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

380閲覧

お問い合わせフォーム PHP

khtn_tgs

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/07/17 07:39

前提・実現したいこと

教本にそってPHPを勉強している者です。
名前、メールアドレス、お問い合わせ内容を入力できるようにし、メールアドレスの欄にバリデーションをかけています。
本の通りにコードを書いてみましたが、なぜか以下のエラーが出ます。
また、メールアドレスを入力していないのに$errに格納したメッセージが表示されてしまいます。
何が間違っているのかもわかりませんでした。
原因を教えていただけると幸いです。よろしくお願いいたします。

発生している問題・エラーメッセージ

Notice: Undefined variable: email in C:\xampp\htdocs\contact.php on line 13

該当のソースコード

PHP

1<?php 2 3if($_SERVER['REQUEST_METHOD'] === 'POST'){ 4 $name = $_POST['name']; 5 $email = $_POST['email']; 6 $comment = $_POST['comment']; 7} 8 9 $pattern = '/\A([a-z0-9_\-+/?]+)'; 10 $pattern .= '@([a-z0-9\-]+.)+[a-z]{2,6}\z/i'; 11 12 13 if(!preg_match($pattern ,$email)){ 14 $err = ''; 15 }else{ 16 $err = 'メールアドレスの形式が違います。'; 17 } 18 if(!isset($err)){ 19 mb_language("Japanese"); 20 mb_internal_encoding("UTF-8"); 21 $user_name ='$name'; 22 $to = '$email'; 23 $subject = 'お問い合わせありがとうございます。'; 24 25 $comment =<<<EOM 26 27 {$name}さん、 28 お問い合わせ内容: 29 {$comment} 30 31EOM; 32 33 $headers = 'From: sender@sender.com'."\r\n"; 34 35 if(mb_send_mail($email,$subject,$comment,$headers) === FALSE){ 36 $message = 'メール送信に失敗しました。'; 37 }else { 38 $message = 'お問い合わせを受け付けました。確認メールを送信しております。'; 39 } 40 } 41 42 43 44 ?> 45 46 <!DOCTYPE html> 47 <html lang="ja"> 48<head> 49<meta charset="UTF-8"> 50<title>お問い合わせフォーム</title> 51</head> 52<body> 53<h1>お問い合わせフォーム</h1> 54<?php if(isset($message)){echo '<p class="red">'.$message.'</p>';} ?> 55<form action="" method="POST"> 56<label>お名前</label> 57<p><input type="text" name="name"></p> 58<label>メールアドレス</label> 59<?php if(isset($err)){echo '<p class="red">'.$err.'</p>';} ?> 60<p><input type="text" name="email"></p> 61<label>お問い合わせ内容</label> 62<p><textarea name="comment"></textarea></p> 63<input type="submit" value="送信"> 64</form> 65</body> 66 </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/07/17 08:23

書籍で取り扱っているPHPのバージョンと、ご自身の環境のPHPのバージョンを提示してください。これのずれが大きければ大きいほど書籍のコードは使えません。
m.ts10806

2018/07/17 08:24

また、インデントはきちんとされた方が良いです。あまりきちんとされていないとカッコの閉じ位置や閉じ忘れなどに気づけませんし、不具合にも気づけません。
kei344

2018/07/17 15:05

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答1

0

ベストアンサー

教本が古いのでしょう。
このソースコードでエラーが出ずにちゃんと表示されるのは、PHPのバージョンが5.2か5.3の時代だったと思います。

現在、PHPの最新安定板は7.1ですからねぇ…

↓のようにしておけばエラーは出ないかな

html

1<?php 2ini_set('display_errors', true); 3error_reporting(E_ALL); 4 5$name = ''; 6$email = ''; 7$comment = ''; 8 9if ($_SERVER['REQUEST_METHOD'] === 'POST') { 10 $name = $_POST['name']; 11 $email = $_POST['email']; 12 $comment = $_POST['comment']; 13} 14 15$pattern = '/\A([a-z0-9_\-+/?]+)'; 16$pattern .= '@([a-z0-9\-]+.)+[a-z]{2,6}\z/i'; 17 18 19if (!preg_match($pattern, $email)) { 20 $err = ''; 21} else { 22 $err = 'メールアドレスの形式が違います。'; 23} 24if (!isset($err)) { 25 mb_language("Japanese"); 26 mb_internal_encoding("UTF-8"); 27 $user_name = $name; 28 $to = $email; 29 $subject = 'お問い合わせありがとうございます。'; 30 31 $comment = <<<EOM 32 33 {$name}さん、 34 お問い合わせ内容: 35 {$comment} 36 37EOM; 38 39 $headers = 'From: sender@sender.com' . "\r\n"; 40 41 if (mb_send_mail($email, $subject, $comment, $headers) === FALSE) { 42 $message = 'メール送信に失敗しました。'; 43 } else { 44 $message = 'お問い合わせを受け付けました。確認メールを送信しております。'; 45 } 46} 47?> 48 49<!DOCTYPE html> 50<html lang="ja"> 51 <head> 52 <meta charset="UTF-8"> 53 <title>お問い合わせフォーム</title> 54 </head> 55 <body> 56 <h1>お問い合わせフォーム</h1> 57 <?php 58 if (isset($message)) { 59 echo '<p class="red">' . $message . '</p>'; 60 } 61 ?> 62 <form action="" method="POST"> 63 <label>お名前</label> 64 <p><input type="text" name="name"></p> 65 <label>メールアドレス</label> 66 <?php 67 if (isset($err)) { 68 echo '<p class="red">' . $err . '</p>'; 69 } 70 ?> 71 <p><input type="text" name="email"></p> 72 <label>お問い合わせ内容</label> 73 <p><textarea name="comment"></textarea></p> 74 <input type="submit" value="送信"> 75 </form> 76 </body> 77</html>

投稿2018/07/17 07:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

khtn_tgs

2018/07/17 08:26

なるほどです!盲点でした。。。勉強不足で不甲斐ないです。 エラーがでなくなりました! 空文字で初期化すればいいということですね!助かりました、ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/07/17 09:49

解決したら質問は閉じましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問