- ベストアンサー
エラーを元の画面に表示させるには
http://income-seed.ck0.net/1000yen/demand.htm 上のページでは、テキストボックスに値を入力しなかった場合、別のエラー画面などに遷移せずに元のページにエラー表示がされます。 これと同じ仕組みを実現したいのですが、その方法論が思いつきませんので、皆様のお知恵をお借りしたいと思っています。よろしくお願いします。 具体的にコードで示して頂けたりすると非常に助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
返信が遅くなりすみません 簡易版ですがサンプルPGを作成しました。NULLチェックと未入力チェックあと簡易版のメアドチェックです。 使用方法等サンプルソースは下記です。 <?php //宣言 $sample = new CHK_SAMPLE(); //メソッド実行 $error = $sample->CHK_NULL($_POST['name'],$_POST['mail']); ?> <html> <head><title>サンプル</title></head> <body> <form action="sample.php" method="POST"> <font color="red"> <?php if($error!="OK") print $error; } ?> </font><br> <input type="text" name="name"> <input type="text" name="mail"> <?php if($error!="OK"){//エラーがあるとき print "<input type=\"submit\" name=\"送信\">"; print "<input type=\"reset\" name=\"リセット\">"; }else{ print "<input type=\"submit\" name=\"送信\">"; } ?> </form> </body> </html> //ここからクラス <?php class CHK_SAMPLE{ private $ERROR_MSG1 = "名前とメールアドレスが未入力です。"; private $ERROR_MSG2 = "名前が未入力です。"; private $ERROR_MSG3 = "メールアドレスが未入力です。"; private $ERROR_MSG4 = "メールアドレスが間違っています。"; private $KEKKA = "OK";//TRUEの場合の戻り値 //NULL・空白チェック・メアドチェック /*---------------------------------------- 引数1:名前 引数2:メールアドレス 戻り値:「OK」メッセージ or エラーメッセージ ----------------------------------------*/ public function CHK_NULL($CNAME,$CMAIL){ if($CNAME!=NULL){ if($CMAIL!=NULL){ //名前・メールアドレスがNULLでない if($CNAME!=""){ if($CMAIL!=""){ //名前・メールアドレスが空白でない //メアドチェックも行う if($this->CHK_MAIL($CMAIL)=="OK"){ return $this->KEKKA; }else{ return $this->CHK_MAIL($CMAIL); } }else{ return $this->ERROR_MSG3; } }else{ //メールアドレスも空白 if($CMAIL!=""){ return $this->ERROR_MSG2; }else{ return $this->ERROR_MSG1; } } }else{ return $this->ERROR_MSG3; } }else{ //メールアドレスもNULL if($CMAIL!=NULL){ return $this->ERROR_MSG2; }else{ return $this->ERROR_MSG1; } } } //メアドチェック(簡易) /*---------------------------------------- 引数1:メールアドレス 戻り値:「OK」メッセージ or エラーメッセージ 文字列「*****@******」に一致するか ※「*」は任意の文字列 ----------------------------------------*/ public function CHK_MAIL($CMAIL){ if(preg_match("/^[^.]+\@[^.]+$/i", $CMAIL)){ return $this->KEKKA; }else{ return $this->ERROR_MSG4; } } } ?>
その他の回答 (3)
- swqamy
- ベストアンサー率37% (11/29)
[sample.php] <?php if($_POST['name']!=""){//POSTで受け取った名前が未入力でない if($_POST['mail']!=""){//POSTで受け取ったメアドが未入力でない //画面遷移処理 }else{ $error="メールアドレスが未入力です。"; } }else{ if($_POST['mail']==""){ $error="名前とメールアドレスが未入力です。"; }else{ $error="名前が未入力です。"; } } ?> <html> <head><title>サンプル</title></head> <body> <from action="sample.php" method="POST"> <?= $error ?> <input type="text" name="name"> <input type="text" name="mail"> <?php if($error!=""){//エラーがあるとき print "<input type=\"submit\" name=\"送信\">"; print "<input type=\"reset\" name=\"リセット\">"; }else{ print "<input type=\"submit\" name=\"送信\"> } ?> </form> </body> </html> 回答したPGに不備がありました。 すみません。 修正したコードは↑です。
お礼
ご回答ありがとうございます。 やりたかったことを実現することができました。
補足
クラスを使って同じようなことができるということを聞いたのですが、どのようにすればいいのでしょうか。 初心者の質問で大変申し訳ないですが、よろしければなにかコメントいただければと思います。
- swqamy
- ベストアンサー率37% (11/29)
[sample.php] <?php if($_POST['name']!=""){ if($_POST['mail']!=""){ //画面遷移処理 }else{ $error="メールアドレスが未入力です。"; } }else{ if($_POST['mail']==""){ $error="名前とメールアドレスが未入力です。"; }else{ $error="名前が未入力です。"; } } ?> <html> <head><title>サンプル</title></head> <body> <from action="sample.php" method="POST"> <?= $error ?> <input type="text" name="name"> <input type="text" name="mail"> <input type="submit" name="送信"> <?php if($error!=""){ print "<input type=\"submit\" name=\"送信\">"; print "<input type=\"reset\" name=\"リセット\">"; } ?> </form> </body> </html> 簡単ですがこんな感じです。
- Rasyuki
- ベストアンサー率57% (19/33)
formで同じページに飛ばして、そこでエラー判定しているのではないでしょうか。 <?php if($_POST['submit'] != ""){ if($_POST['name'] != "") $error_name = "名前がありません。"; if($_POST['mail'] != "") $error_mail = "メルアドがありません。"; if(($error_name == "" || $error_mail)){ 送信完了処理 } } ?> <from action=""> <input name="name"> <input name="mail"> <送信ボタン> </form>
お礼
ご回答ありがとうございます。 やりたかったことが実現できました。
お礼
ご回答ありがとうございます。 親切、丁寧にご回答いただき感謝いたします。swqamy様のPG、とても参考になりました。 やはり今回の質問内容を実現するには、FormのActionで元のページに戻すことが前提になるのですね。 勉強になりました。本当にありがとうございました。