« Smartyスクリプト使用上の注意点 | ホーム | メディア技術基礎(ネットワーク・画像処理) 第1回課題 »

2011年6月12日

PHPを用いた入力データのエラーチェック処理

お問い合わせページなどで、再三行ってきた入力されたデータに対するエラー処理についてメモします。
先日AJAXを勉強したこともあって、現在は、非同期通信でのお問い合わせフォームをそそくさと作っている所です。
phpでのエラーチェックについてこれまで自分が用いてきたものとは違う方法を、書籍で見つけたのでまとめていきたいと思います。

エラー内容はまとめて配列変数に格納する

ここでは、$error_listという変数を用います。
複数の項目のエラーをまとめて返せるように、以下のように、配列変数をはじめにセットし、初期化します。
$error_list = array();
各項目でエラーがあった場合は、その判定ごとにスクリプトを生成し、この配列に入れていくこととします。

submitボタン後の処理

submitボタンが押されたことを確認したら、実行するスクリプトは以下のようになります。
if (isset($_POST["submit"])){
    $_SESSION["name"] = isset($_POST["name"]) ? $_POST["name"] : " ";
    $_SESSION["age"] = isset($_POST["age"]) ? $_POST["age"] : " ";
    $_SESSION["comment"] = isset($_POST["comment"]) ? $_POST["comment"] : " ";

    //他で定義したerror_check()関数を実行する。
    //引数は、上記の$_SESSION配列変数
    $error_list = error_check($_SESSION);
}

error_check()関数

上記で登場したerror_check()関数は、実際には別のphpファイルに書いて、require_onceで読み込みます。
function error_check($check_data){
    $error_list = array();
    
    if (isset($check_data["name"]) && trim($check_data["name"]) === ""){
        $error_list[] = "名前を入力してください。";
    }elseif (mb_strlen($check_data["name"]) > 100){
        $error_list[] = "名前は100文字以内で入力してください。";
    }
    return $error_list;
}
入力された名前のエラーの有無を調べる上のスクリプトでは、若干複雑な条件分岐を作っています。
まずisset関数を用いて、$check_data["name"]変数があるかを調べ
かつtrim関数を用いた空白文字の削除後に、名前が空っぽになっていないかを調べています。
さらに、mb_strlen関数で、きちんとマルチバイト文字の文字数をカウントして、許容量以上の文字数でないかを調べています。

はじめにisset関数を変数の存在を確認するのは、定義されていない変数を判定に掛けるとNOTICEエラーが生じてしまうからだそうです。(いまいち理解できていない・・・汗)
OpenID対応しています OpenIDについて

このブログ記事について

このページは、HAKASHUNが2011年6月12日 21:34に書いたブログ記事です。

ひとつ前のブログ記事は「Smartyスクリプト使用上の注意点」です。

次のブログ記事は「メディア技術基礎(ネットワーク・画像処理) 第1回課題」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。