メールを送る(2)

もうちょっと複雑な住所登録フォームメールの例です。

実際にはメールは送られませんので,安心してお試しください。

メール(必須):

住所 (必須):

氏名 (必須):

備考(オプション):

ソース

このファイル mail2.html は単なるHTMLファイルです。上の「例」のところには次のように書き込んであります。

<form method="post" action="send.php">
<p>メール(必須):<input name="email" type="email" size="40" required></p>
<p>住所 (必須):<input name="address" size="40" required></p>
<p>氏名 (必須):<input name="name" size="40" required></p>
<p>備考(オプション):<br>
<textarea name="memo" rows="4" cols="60"></textarea></p>
<p>
<input type="submit" value="送る">
<input type="reset" value="クリア">
</p>
</form>

一方,form の action で指定している send.php は(だいたい)次のようになっています。一応 input には required を指定していますが,念のため入力をチェックしています。

<?php
  echo "<p>メール: ", htmlspecialchars($_POST['email']), "</p>\n";
  echo "<p>住所: ", htmlspecialchars($_POST['address']), "</p>\n";
  echo "<p>氏名: ", htmlspecialchars($_POST['name']), "</p>\n";
  echo "<p>備考:</p>\n<pre>\n", htmlspecialchars($_POST['memo']), "\n</pre>\n";

  $machigai = 0;
  if ($_POST['email'] == '') {
    echo "<p>メールアドレスがありません。</p>\n";
    $machigai++;
  }
  if ($_POST['address'] == '') {
    echo "<p>住所がありません。</p>\n";
    $machigai++;
  }
  if ($_POST['name'] == '') {
    echo "<p>氏名がありません。</p>\n";
    $machigai++;
  }

  if ($machigai == 0) {
    // メールを送る部分。「メールを送る(1)」を参考にしてください。
    echo "<p>受け付けました。</p>\r\n";
  } else {
    echo "<p>$machigai 個のエラーがあります。</p>\n";
    echo "<p>ブラウザの[戻る]ボタンを押して戻り,やりなおしてください。</p>\n";
  }
?>

改良点

次のように placeholder に「必須」と書く方法もあります:

<p>メール:<input name="email" type="email" size="40" required placeholder="必須"></p>

メール:

上の例では

  echo "<p>備考:</p>\n<pre>\n", htmlspecialchars($_POST['memo']), "\n</pre>\n";

としていますが,改行を入れないで長い備考を書き込まれると横スクロールが発生してしまいます。これを避けるには

  echo "<p>備考:<br>\n",
    str_replace(array("\r\n", "\n", "\r"), '<br>',
                htmlspecialchars($_POST['memo'])),
    "</p>\n";

のように改行を <br> で置き換えるだけにするほうがよさそうです。