PHPstep

トップページ > PHPでメール送信フォームを作ろう >

第二章 PHPでウェブアプリケーションを作ろう

PHPでメール送信フォームを作ろう8

「PHPでメール送信フォームを作ろう」の第8回です。 今回で入力内容確認ページconfirm.phpを完成させます。
※最終完成形はこちら→メール送信フォームサンプル

前のページへ戻った場合の処理を作成する

前回は、未入力項目があった場合に表示される[前のページへ戻る]ボタンを作成しました。 今回は、[前のページへ戻る]ボタンでconfir.phpからindex.phpへ戻ってきた場合のindex.php側の処理を作成します。

テキストエディタでindex.phpを開いて下記の内容を追加してください。

サンプルソース:index.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>お問合せ内容の入力|メール送信フォーム</title> </head> <body> <?php /******************************* 確認ページから戻ってきた場合のデータの受け取り *******************************/ if (isset($_POST["backbtn"])) { //確認ページ(confirmphp)から戻ってきた場合にはデータを受け取る $namae = $_POST["namae"]; //お名前 $mailaddress = $_POST["mailaddress"]; //メールアドレス $naiyou = $_POST["naiyou"]; //お問合せ内容 //危険な文字列を入力された場合にそのまま利用しない対策 $namae = htmlspecialchars($namae, ENT_QUOTES); $mailaddress = htmlspecialchars($mailaddress, ENT_QUOTES); $naiyou = htmlspecialchars($naiyou, ENT_QUOTES); } else { //確認ページから戻ってきた場合でなければ、変数の値は必ず空となる $namae = ''; //お名前 $mailaddress = ''; //メールアドレス $naiyou = ''; //お問合せ内容 } ?> <form method="post" action="confirm.php"> <p><label>お名前:<br> <input type="text" maxlength="255" name="namae" value="<?=$namae?>"> </label></p> <p><label>メールアドレス:<br> <input type="email" size="30" maxlength="255" name="mailaddress" value="<?=$mailaddress?>"> </label></p> <p><label>お問合せ内容:<br> <textarea name="naiyou" cols="40" rows="5"><?=$naiyou?></textarea> </label></p> <p><input type="submit" value="入力内容を確認する"></p> </form> </body> </html>

入力が完了したら、index.phpを上書き保存してください。

ブラウザで表示確認してみよう

いま上書き保存したindex.phpをブラウザで表示確認してみましょう。

XAMPPによる動作確認手順
  1. ブラウザのアドレス欄に http://localhost/sample/mailform/ と入力して、フォーム入力ページを表示させます。
  2. フォームの入力欄を一部未入力のまま、[入力内容を確認する]ボタンを押します。
  3. 一部未入力の場合には[前のページへ戻る]ボタンが表示されるはずなので、それを押します。

フォーム入力欄の一部が未入力だった場合に、 エラーメッセージの下に[前のページへ戻る]ボタンが表示されます。

そして、[前のページへ戻る]ボタンを押して前の入力画面へ戻った場合、 入力していた項目のデータが入力欄に記入された状態になっていれば成功です。

記述したソース内容を確認しよう

確認ページから戻ってきた場合のデータを受け取る

確認ページ(confirm.php)で未入力エラーが出て、 もう一度フォーム入力ページ(index.php)へ戻ってきた場合の処理について、ソースを見ながら確認していきましょう。

まず、確認ページ(confirm.php)の下記ソース部分に注目してください。

サンプルソース:confirm.phpの抜粋
//[前のページへ戻る]ボタンを表示する echo '<form method="post" action="index.php">'; echo '<input type="hidden" name="namae" value="'.$namae.'">'; echo '<input type="hidden" name="mailaddress" value="'.$mailaddress.'">'; echo '<input type="hidden" name="naiyou" value="'.$naiyou.'">'; echo '<input type="submit" name="backbtn" value="前のページへ戻る">'; echo '</form>';

[前のページへ戻る]ボタンは上記ソースでいうと <input type="submit" name="backbtn" value="前のページへ戻る"> の部分です。 このボタンには、name属性に「backbtn」というデータ名を、value属性に「前のページへ戻る」というデータ内容を指定しています。 これは、変数$backbtnに「前のページへ戻る」という値を格納しているということです。

次に、フォーム入力ページ(index.php)の下記ソース部分に注目してください。

サンプルソース:index.phpの抜粋
/******************************* 確認ページから戻ってきた場合のデータの受け取り *******************************/ if (isset($_POST["backbtn"])) { //確認ページ(confirmphp)から戻ってきた場合にはデータを受け取る $namae = $_POST["namae"]; //お名前 $mailaddress = $_POST["mailaddress"]; //メールアドレス $naiyou = $_POST["naiyou"]; //お問合せ内容 //危険な文字列を入力された場合にそのまま利用しない対策 $namae = htmlspecialchars($namae, ENT_QUOTES); $mailaddress = htmlspecialchars($mailaddress, ENT_QUOTES); $naiyou = htmlspecialchars($naiyou, ENT_QUOTES); } else { //確認ページから戻ってきた場合でなければ、変数の値は必ず空となる $namae = ''; //お名前 $mailaddress = ''; //メールアドレス $naiyou = ''; //お問合せ内容 }

上記ソースは、[前のページへ戻る]ボタンを押したかどうかを判定して処理を振り分けています。

[前のページへ戻る]ボタンを押したかどうかは、 isset($_POST["backbtn"])の部分、 つまり、$_POST["backbtn"]に何か値がセットされているかどうかで判定しています。 [前のページへ戻る]ボタンを押せば、変数$backbtnには「前のページへ戻る」という値が格納されているはずなので、 それを根拠に[前のページへ戻る]ボタンが押されたと判定します。

この部分の処理をまとめると、 [前のページへ戻る]ボタンが押された場合には送られてきたデータを$namae・$mailaddress・$naiyouに代入して、 それ以外の場合には$namae・$mailaddress・$naiyouの値を空にするという流れになっています。

受け取ったデータをあらかじめ入力状態にする

フォーム入力ページ(index.php)の入力欄部分のソースを見てみましょう。

サンプルソース:index.phpの抜粋
<form method="post" action="confirm.php"> <p><label>お名前:<br> <input type="text" maxlength="255" name="namae" value="<?=$namae?>"> </label></p> <p><label>メールアドレス:<br> <input type="email" size="30" maxlength="255" name="mailaddress" value="<?=$mailaddress?>"> </label></p> <p><label>お問合せ内容:<br> <textarea name="naiyou" cols="40" rows="5"><?=$naiyou?></textarea> </label></p> <p><input type="submit" value="入力内容を確認する"></p> </form>

フォーム入力ページ(index.php)の入力欄には、 上記のようにinput要素のvalue属性の値や、textarea要素の要素内容として <?=$namae?> などのPHPソースを指定しています。 HTMLソース中に<? ~ ?>で部分的にPHPプログラムを埋め込んでいるのですが、 PHPプログラムが処理されると吐き出された結果がHTMLソースの一部になります。

PHPソースの内側の =$namae の部分は、「変数$namaeの内容を出力しなさい」という意味です。 [前のページへ戻る]ボタンで戻ってきた場合には、変数で受け取った内容が出力されてフォーム入力欄が入力済みの状態となります。 それ以外の場合には空文字が出力されるのでフォーム入力欄は空欄となり、ユーザーの新規入力を待つ状態になります。

コラム「エラーメッセージ」

プログラムを作成する際、エラーは必ず出るものです。 PHPでプログラムを作成していると、開発途中でブラウザ画面にエラーメッセージが表示されることはよくあります。 一度もエラーを出さずに開発を終えることはまずありません。

もし、エラーメッセージが表示されたら、そのメッセージの内容などからエラーの原因を想定して該当箇所のソースを確認します。 例えば、下記の画面のエラーメッセージなら、エラーの原因となっている行番号が示されているのでその部分のPHPソースを確認します。

すると、下記のように12行目の末尾でセミコロン( ; )を記述し忘れていることが分かります。

セミコロンを記述し忘れたのは12行目なのに、「13行目に不具合がある」というエラーメッセージが出ることを不思議に思う方がいるかもしれません。 PHPではプログラムの一番最後のセミコロンは省略できるので、12行目の末尾にセミコロンが無いこと自体はエラーではありません。 12行目末尾のセミコロンが無いまま、13行目のプログラムを記述したことでエラーとなりました。 だから、12行目ではなく13行目に不具合があるというエラーメッセージが表示されたのです。

エラーにも様々な種類がありますが、セミコロンひとつ記述し忘れただけでもエラーは出ます。 他にも、打ち間違い・全角半角・大文字小文字・全角スペース・セミコロンが無いなどの記述ミスをすると、 ブラウザの画面上にエラーメッセージが表示されてプログラム全体が止まります。

エラーメッセージが表示されると初めは焦ってしまうものですが、必要以上にエラーを恐れることはありません。 誤ってデータベースを削除してしまうような致命的なミスでなければ、 原因を特定して修正すれば必ず正常に動作するようになります。


  1. フォーム入力ページを作成する
  2. 送信されたデータを受け取る
  3. 変数に代入する
  4. 受け取ったデータを安全な文字列に変換する
  5. 未入力チェック機能をつくる
  6. 未入力チェック機能を洗練させる
  7. [前のページへ戻る]ボタンをつくる
  8. 入力内容確認ページを完成させる
  9. メール送信処理ページを作成する
  10. メール送信フォームを完成させる