「php入門~フォームのエラー処理~」の編集履歴(バックアップ)一覧はこちら
「php入門~フォームのエラー処理~」(2015/10/07 (水) 15:04:20) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
今回はフォームのエラー処理について勉強していきます。~
エラー処理には様々な方法がありますが、そのうちの一つの例となっています。~
実践的にエラー処理コードには&color(red){どんな事が書いてあるのか、どんな事がしたいのか}をみていきましょう。
*エラー処理コード
//エラー処理
$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>';
*パッと見て・・・
まずは&color(red){一行目で関数$errorを空の状態にしていますね。}~
それ以降、&color(red){二行目からは一行毎にif文を使って条件に合わせて$errorに文字列を格納していっています。}~
.=を使って最終的には、格納していった&color(red){文字列が一つの繋がりになるようになっています。}~
*どんなフォーム??
このエラー処理が記述されているフォームはどのようなフォームなのでしょうか??~
日付、投稿種類、タイトル、本文、そして状態ですね。~
**投稿種類
投稿種類は選択式になっていてそれが空(選択されていない)だとエラーを返すようになっています。
**タイトル
こちらも空の場合は、エラーを返すます。~
それからもう一つ、タイトルに物凄く長い文字列を入れられてしまった場合もエラーを返すようになっています。~
ここで注目すべき事は、&color(red){mb_strlen($_POST['title']) > 40と書いてあるのに横では「20文字以内にしてください」と表示}させるようにプログラムが組んであります。~
これは間違いではありません。~
&color(red){mb_strlen関数は第二引数で文字コードを指定しなければ、マルチバイト文字はローマ字の数でカウントされます。}~
そこで、2倍に設定しておいたのでしょう。~
**本文
タイトルとほぼ同じ仕組みで作られています。~
**ステータス
こちらは、投稿種類と同じ仕組みです。~
**日付
日付に関しては正規表現が使われています。~
nicepaper内でも師匠が解説されているのでそちらをご覧ください。~
自分でも近日中にアップしてみます。~
[[PHPで正規表現入門1]]~
~
以上
今回はフォームのエラー処理について勉強していきます。~
エラー処理には様々な方法がありますが、そのうちの一つの例となっています。~
実践的にエラー処理コードには&color(red){どんな事が書いてあるのか、どんな事がしたいのか}をみていきましょう。
*エラー処理コード
//エラー処理
$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>';
*パッと見て・・・
まずは&color(red){一行目で関数$errorを空の状態にしていますね。}~
それ以降、&color(red){二行目からは一行毎にif文を使って条件に合わせて$errorに文字列を格納していっています。}~
.=を使って最終的には、格納していった&color(red){文字列が一つの繋がりになるようになっています。}~
*どんなフォーム??
このエラー処理が記述されているフォームはどのようなフォームなのでしょうか??~
日付、投稿種類、タイトル、本文、そして状態ですね。~
**投稿種類
投稿種類は選択式になっていてそれが空(選択されていない)だとエラーを返すようになっています。
**タイトル
こちらも空の場合は、エラーを返すます。~
それからもう一つ、タイトルに物凄く長い文字列を入れられてしまった場合もエラーを返すようになっています。~
ここで注目すべき事は、&color(red){mb_strlen($_POST['title']) > 40と書いてあるのに横では「20文字以内にしてください」と表示}させるようにプログラムが組んであります。~
これは間違いではありません。~
&color(red){mb_strlen関数は第二引数で文字コードを指定しなければ、マルチバイト文字はローマ字の数でカウントされます。}~
そこで、2倍に設定しておいたのでしょう。~
**本文
タイトルとほぼ同じ仕組みで作られています。~
**ステータス
こちらは、投稿種類と同じ仕組みです。~
**日付
日付に関しては正規表現が使われています。~
ここでは、!マーク(否定形)を用いてpreg_match関数を使用しています。~
0から9までの数字を4回繰り返し(西暦)、その次に二回ずつ(月、日)数値を繰り返えされていなければエラーと返すようになっています。~
nicepaper内でも解説されているのでそちらをご覧ください。~
[[PHPで正規表現入門1]]~
~
以上