前回は、未入力の項目があった場合に[前のページへ戻る]ボタンを表示して、ユーザーに再入力を促す仕組みを作成しました。
今回は、[前のページへ戻る]ボタンで確認ページ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"])) { //確認ページ(confirm.php)から戻ってきた場合にはデータを受け取る $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をブラウザで表示確認してみましょう。
フォーム入力欄の一部が未入力だった場合に、
エラーメッセージの下に[前のページへ戻る]ボタンが表示されます。
そして、[前のページへ戻る]ボタンを押して前の入力画面へ戻った場合、
入力していた項目のデータが入力欄に記入された状態になっていれば成功です。
確認ページ(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"])) { //確認ページ(confirm.php)から戻ってきた場合にはデータを受け取る $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行目に不具合があるというエラーメッセージが表示されたのです。
エラーにも様々な種類がありますが、セミコロンひとつ記述し忘れただけでもエラーは出ます。
他にも、打ち間違い・全角半角・大文字小文字・全角スペース・セミコロンが無いなどの記述ミスをすると、
ブラウザの画面上にエラーメッセージが表示されてプログラム全体が止まります。
エラーメッセージが表示されると初めは焦ってしまうものですが、必要以上にエラーを恐れることはありません。
誤ってデータベースを削除してしまうような致命的なミスでなければ、
原因を特定して修正すれば必ず正常に動作するようになります。
<前へ | 目次へ | 次へ> |