今回はフォームのエラー処理について勉強していきます。
エラー処理には様々な方法がありますが、そのうちの一つの例となっています。
実践的にエラー処理コードには どんな事が書いてあるのか、どんな事がしたいのか をみていきましょう。

エラー処理コード

  //エラー処理
$error = '';			
if($_POST['info_date'] == '') $error .= '日付が選択されていません。<br>';
if(!preg_match("/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}/",$info_date)) $error .= '日付が正しくありません。<br>';
if($_POST['type'] == '') $error .= '投稿種類が選択されていません。<br>';
if($_POST['title'] == '') $error .= 'タイトルが入力されていません。<br>';
if(mb_strlen($_POST['title']) > 40) $error .= 'タイトルは20文字以内にしてください<br>';
if($_POST['info_text'] == '') $error .= '内容が入力されていません。<br>';		
if(mb_strlen($_POST['info_text']) > 2000) $error .= '内容は1000文字以内にしてください<br>';
if($_POST['status'] == '') $error .= '状態が選択されていません。<br>';

パッと見て・・・

まずは 一行目で関数$errorを空の状態にしていますね。
それ以降、 二行目からは一行毎にif文を使って条件に合わせて$errorに文字列を格納していっています。
.=を使って最終的には、格納していった 文字列が一つの繋がりになるようになっています。

どんなフォーム??

このエラー処理が記述されているフォームはどのようなフォームなのでしょうか??
日付、投稿種類、タイトル、本文、そして状態ですね。

投稿種類

投稿種類は選択式になっていてそれが空(選択されていない)だとエラーを返すようになっています。

タイトル

こちらも空の場合は、エラーを返すます。
それからもう一つ、タイトルに物凄く長い文字列を入れられてしまった場合もエラーを返すようになっています。
ここで注目すべき事は、 mb_strlen($_POST['title']) > 40と書いてあるのに横では「20文字以内にしてください」と表示 させるようにプログラムが組んであります。
これは間違いではありません。
mb_strlen関数は第二引数で文字コードを指定しなければ、マルチバイト文字はローマ字の数でカウントされます。
そこで、2倍に設定しておいたのでしょう。

本文

タイトルとほぼ同じ仕組みで作られています。

ステータス

こちらは、投稿種類と同じ仕組みです。

日付

日付に関しては正規表現が使われています。
ここでは、!マーク(否定形)を用いてpreg_match関数を使用しています。
0から9までの数字を4回繰り返し(西暦)、その次に二回ずつ(月、日)数値を繰り返えされていなければエラーと返すようになっています。
nicepaper内でも解説されているのでそちらをご覧ください。
PHPで正規表現入門1

以上

最終更新:2015年10月07日 15:04