go on program

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 ・・・テキストエリア内の改行を正しく表示することができます。

おさらい

いかがでしょうか。
複数選択やプルダウン選択などフォーム項目を増やして作成してみてください。

関連記事
RELATED