PHPでメールフォームの作り方
2020/07/20
PHPでメールフォームを作ってみましょう。
メールフォーム
HTMLのフォームとPHPを使ってメールフォームを作成することも可能です。
フォーム側は普通のHTMLです。
actionで設定されている”thank.php”でPHPの設定が必要になります。
<form name="input_date" action="confirmation.php" method="post"> <p>■ 氏名</p> <input tyoe ="text" name="name"> <p>■ メールアドレス</p> <input tyoe ="text" name="email"> <br> <p>■ ご質問内容</p> <textarea name="question" row="10" cols="40"></textarea> <br> <input type="submit" value="送信"> </form>
それぞれの”name”の値が渡されます。
methodで、”post”と”get”のどちらか設定しますが、メールフォームの場合は、”post”で設定します。”get”で設定した場合、送信先URLの後に値が追加されて表示されてしまいます。
- post・・・入力した値が表示されない
- get・・・送信先URLの後に入力した値がパタメータとして表示される。
confirmation.phpについて(確認画面)
送信前にユーザーが入力した内容を確認できる方が親切です。
確認後、問題なければ送信できるように作り直してみましょう。
PHPは次のページつまり一つ前の画面までしか値を残すことができません。
hiddenで値を隠して送信させる必要があります。
確認画面のファイル名は、confirmation.phpです。
未入力のチェック
emptyを使うことで未入力のチェックを行うことがでいます。
未入力の場合は、「未入力です。」と表示され、入力されている場合は、名前が表示されます。
<?php if(empty($_REQUEST["name"])){ $name_date = "未入力です。"; }else{ $name_date = $_REQUEST["name"]; } ?> <p>■氏名</p> <p><?php print(htmlspecialchars($name_date,ENT_QUOTES)) ?></p>
<p>【確認画面】</p> <blockquote> <p>■ 氏名</p> <?php print(htmlspecialchars($_REQUEST["name"],ENT_QUOTES));?>様 <p>■ メールアドレス</p> <?php print(htmlspecialchars($_REQUEST["email"],ENT_QUOTES));?> <p>■ ご質問内容</p> <?php print(htmlspecialchars(n12br($_REQUEST["question"]),ENT_QUOTES));?> </blockquote> <form name="confirmation" action="thank.php" method="post"> <input type="hidden" name="con_name" value="<?php print(htmlspecialchars($_REQUEST["name"],ENT_QUOTES));?>" > <input type="hidden" name="con_email" value="<?php print(htmlspecialchars($_REQUEST["email"],ENT_QUOTES));?>" > <input type="hidden" name="con_question" value="<?php print(htmlspecialchars($_REQUEST["question"],ENT_QUOTES));?>" > <input type="submit" value="送信"> </form>
確認画面(confirmation.php)のnameを変更しています。
thank.phpの$_REQUESTを変更する必要があります。
thank.phpについて(完了画面)
PHPの入力は下記の通りになります。
<p>【お問い合わせ内容】</p> <?php mb_language("Ja"); mb_internal_encoding("utf-8"); $subject = "お問い合わせを受け付けました"; $from = "From" . mb_encode_mimeheader("メール送信")."<メールアドレス>"; $to = "メールアドレス"; $body = <<< EOF 以下のお問い合わせを受けました ■氏名 {$_REQUEST["name"]} ■お問い合わせ内容 {$_REQUEST["inquiry"]} EOF; mb_send_mail($to , $subject , $body , $from); ?> <p>■ 氏名</p> <?php print(htmlspecialchars($_REQUEST["name"],ENT_QUOTES));?>様 <p>■ メールアドレス</p> <?php print(htmlspecialchars($_REQUEST["email"],ENT_QUOTES));?> <p>■ ご質問内容</p> <?php print(htmlspecialchars(n12br($_REQUEST["question"]),ENT_QUOTES));?>
$_REQUESTはリクエスト変数です。htmlspecialchars()と組み合わせて使用します。フォームからの値を取得します。
- $_REQUEST ・・・フォームからの値を取得
- htmlspecialchars() ・・・HTMLのフォーム内に記号やタグを書き込むことができなくなります。
- n12br ・・・テキストエリア内の改行を正しく表示することができます。
おさらい
いかがでしょうか。
複数選択やプルダウン選択などフォーム項目を増やして作成してみてください。