PHPstep

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

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

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

「PHPでメール送信フォームを作ろう」の第6回です。 今回は、前回作成した未入力チェック機能を変更して洗練させてみます。
※最終完成形はこちら→メール送信フォームサンプル

未入力チェック機能を洗練させる

if文を使えるようになると、使い方次第でかなり高度な機能も実現できるようになります。 if文の使い方を工夫して、未入力チェック機能を洗練させてみましょう。 テキストエディタでconfirm.phpを開いて下記の内容に書き換えてください。

サンプルソース:confirm.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>入力内容の確認|メール送信フォーム</title> </head> <body> <?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); /******************************* 未入力チェック *******************************/ $errmsg = ''; //エラーメッセージを空にしておく if ($namae == '') { $errmsg = $errmsg.'<p>お名前が入力されていません。</p>'; } if ($mailaddress == '') { $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>'; } if ($naiyou == '') { $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>'; } /******************************* 入力内容の確認 *******************************/ if ($errmsg != '') { //エラーメッセージが空ではない場合には、エラーメッセージを表示する echo $errmsg; } else { //エラーメッセージが空の場合には、入力された内容を画面表示する echo '<h3>入力内容を確認します</h3>'; echo '<dl>'; echo '<dt>【お名前】</dt><dd>'.$namae.'</dd>'; echo '<dt>【メールアドレス】</dt><dd>'.$mailaddress.'</dd>'; echo '<dt>【お問合せ内容】</dt><dd>'.nl2br($naiyou).'</dd>'; echo '</dl>'; } ?> </body> </html>

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

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

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

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

下記のように、画面に「お名前が入力されていません。」「メールアドレスが入力されていません。」「お問い合わせ内容が入力されていません。」と表示されていれば成功です。



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

変数$errmsgにエラーメッセージを格納する

下記のソースでは、未入力の項目があった場合に変数$errmsgにエラーメッセージを格納するように指定します。 初めに$errmsgを空にしておいてから、未入力の場合にエラーメッセージを格納していきます。

サンプルソース:confirm.phpの抜粋
$errmsg = ''; //エラーメッセージを空にしておく if ($namae == '') { $errmsg = $errmsg.'<p>お名前が入力されていません。</p>'; } if ($mailaddress == '') { $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>'; } if ($naiyou == '') { $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>'; }

$errmsg = $errmsg.' ~ 'の部分は、 変数$errmsgにすでにデータが格納されている場合にも追加でデータを格納する場合の記述方法です。 追加と言うのは前のデータと置き換えるのではなく、前のデータの末尾にデータをつなげるという意味です。 文字列を末尾につなげる場合にはドット( . )でつなぎます。

例えば、変数$errmsgにすでに「<p>お名前が入力されていません。</p>」というテキストが格納されている場合に、 $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>';と指定をすると、 変数$errmsgには、 「<p>お名前が入力されていません。</p><p>メールアドレスが入力されていません。</p>」 という内容が格納されることになります。

そこへさらに $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>'; という指定をすると、 変数$errmsgには、 「<p>お名前が入力されていません。</p><p>メールアドレスが入力されていません。</p><p>お問合せ内容が入力されていません。</p>」 という内容が格納されることになります。

否定のif文 もし( ~ )ではない場合には

下記のソースは、 if ( 条件に合致しない場合には ) { 処理A } else { 処理B } という構造になっています。

「if文の条件に合致しない場合には処理Aを、それ以外の場合には処理Bを実行しなさい」という指定です。 具体的には、「もし、変数$errmsgの中身が空ではない場合には$errmsgの内容を出力しなさい。 それ以外の場合には入力された内容を画面表示しなさい。」というプログラムです。

サンプルソース:confirm.phpの抜粋
if ($errmsg != '') { //エラーメッセージが空ではない場合には、エラーメッセージを表示する echo $errmsg; } else { //エラーメッセージが空の場合には、入力された内容を画面表示する echo '<h3>入力内容を確認します</h3>'; echo '<dl>'; echo '<dt>【お名前】</dt><dd>'.$namae.'</dd>'; echo '<dt>【メールアドレス】</dt><dd>'.$mailaddress.'</dd>'; echo '<dt>【お問合せ内容】</dt><dd>'.nl2br($naiyou).'</dd>'; echo '</dl>'; }

注目して欲しいのは、elseが使われている点です。 elseを使うと「それ以外の場合には」という条件で処理を実行させることが可能となります。

もう一点注目して欲しいのは、if文の条件式が$errmsg != ''となっている点です。 != は「等しくない」という意味を表します。 他の箇所では下記のif文を使用しました。下記では == という記号を使用していますが、 == は「等しい」という意味を表します。

サンプルソース:confirm.phpの抜粋
if ($namae == '') { $errmsg = $errmsg.'<p>お名前が入力されていません。</p>'; }

これらの == や != などの記号は、比較演算子と呼ばれます。 比較演算子には下記の種類があります。 自分の設定したい条件式になるように適切に使い分けます。

演算子意味
==等しい
!=等しくない
>右辺より大きい
>=右辺以上
<右辺より小さい
<=右辺以下
コラム「コメントの書き方でソースを見やすく」

今回、下記のようにプログラムソース中のコメントの一部を目立たせるようにしました。 プログラムの処理ブロックの区切りを分かりやすくする狙いがあります。

サンプルソース:confirm.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>入力内容の確認|メール送信フォーム</title> </head> <body> <?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); /******************************* 未入力チェック *******************************/ $errmsg = ''; //エラーメッセージを空にしておく if ($namae == '') { $errmsg = $errmsg.'<p>お名前が入力されていません。</p>'; } if ($mailaddress == '') { $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>'; } if ($naiyou == '') { $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>'; } /******************************* 入力内容の確認 *******************************/ if ($errmsg != '') { //エラーメッセージが空ではない場合には、エラーメッセージを表示する echo $errmsg; } else { //エラーメッセージが空の場合には、入力された内容を画面表示する echo '<h3>入力内容を確認します</h3>'; echo '<dl>'; echo '<dt>【お名前】</dt><dd>'.$namae.'</dd>'; echo '<dt>【メールアドレス】</dt><dd>'.$mailaddress.'</dd>'; echo '<dt>【お問合せ内容】</dt><dd>'.nl2br($naiyou).'</dd>'; echo '</dl>'; } ?> </body> </html>

PHPのコメントの書き方は、コメント部分を /* ~ */ で囲むか、コメント文の先頭に // を付けます。 このコメントの入れ方は /* ~ */ で囲むというルールを守りつつ飾り枠のような表現にしています。

自分のオリジナルの飾り枠付きコメントを考えてみるのも楽しいでしょう。


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