トップページ  > ウェブ制作チュートリアル  > 入力チェック機能を完成させる
【番外編】 第30章 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"])) { //確認ページ(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行目に不具合があるというエラーメッセージが表示されたのです。

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

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

<前へ 目次へ 次へ>
広告
Sponsors
広告
MuuMuu Domain!
ドメイン取るならお名前.com
現役エンジニアのオンライン家庭教師【CodeCamp】
サイトに広告を掲載してお小遣いが稼げる!【A8.net】
Node.jsコース
はじめてのプログラミングコース
▲ページ先頭へ
HTMLクイックリファレンスについて
© HTMQ