• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでのフォームバリデートと値保持について)

PHPでのフォームバリデートと値保持について

このQ&Aのポイント
  • PHP+Apache(+MySQL)の環境でフォームバリデーションと値保持の方法を知りたい。
  • フォームの各種要素の値を保持する方法と入力規則のチェックとエラーフラグ表示について知りたい。
  • フォームの入力内容を確認し、正しい場合は送信、間違っている場合はエラーフラグを表示しながらフォームに戻りたい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 あぁ、なるほど・・・。 「登録しました」画面以外は、一つでやっちゃうんですね。 >値保持したいけど見た目が・・・ の問題は、テキストならreadonly="readonly"でもよさそうですが、 ラジオとかは、選択されていないものも出すんですかね? 全部出したいならdisableでやらんとしゃーないですが、hiddenを用意しても、nameの問題は残ります。 普通に表示のみでやった方が無難かなぁ・・・。 見た目はテーブルレイアウトで凝ってしまえば、そんなに変じゃないと思います。 >確定と修正をPHPのみで・・・ 両方submitでOKです。 <input type="submit" name="apply" value="確定"> <input type="submit" name="back" value="戻って修正"> この場合、PHP側で、 if($_POST['apply']){ // 確定処理 } if($_POST['back']){ // 戻す処理 } で大丈夫。 submitもname=valueのペアで飛んできます。

nccno21
質問者

お礼

お返事が大変遅くなりまして、申し訳ありません。 フォーム入力時の値保持ですが、セッションを使って無事に希望通りの動作を実現することができました。 結局、ファイルは3つに分け(1つだとごちゃごちゃしてわけがわからなくなったため)、1.php入力、2.php確認(戻るか送信か)、3.php送信実行、終了表示という構成にしました。 送信後はブラウザの戻るを押しても不正アクセスを表示させて重複投稿防止までも実現できました。 丁寧なご説明ありがとうございました。 P.S 回答内容の表示(確認画面)は、CSSで地道に装飾します! 本当にありがとうございました。

その他の回答 (2)

回答No.2

こんばんは。 えーと・・・、 ファイル構成がよくわかりませんです・・・。 ファイル構成 個々のファイルの役割 画面遷移(どうしたいか) このあたり、補足して頂けますか?

nccno21
質問者

補足

お返事が遅くなり申し訳ありません。 ファイルは1つ(form.php)で、役割は、 1.アンケート入力 2.確認画面 3.送信確定(確定後はcomp.phpへ) #form.phpの中身は、文字数の都合ですべて記述できませんでしたが、概要は1回目のご回答のお礼部分に記述している通りです。 ■現時点で実現できている部分(流れと役割) #form.phpにて 1$errormessagearayの初期化 2$_POSTと$_REQUESTがあるか否か 3 2がともに存在すれば回答内容のバリデーション(radio=値があるか、check=指定した個数以上あるか、text=指定条件を満たしているか等) 4-1エラーがあれば、$errormessagearray[]に配列として格納し、submitされたときに入力画面に戻り、各項目にエラーを表示する(↓のような感じ)。 print($errormessagearray[1]; 問1.元気ですか? <input type="radio" name="q1" value="1"<?php if($q1==1){print("checked"); ?> /> <input type="radio" name="q1" value="2"<?php if($q1==2){print{"checked"); ?> /> 4-2エラーがなければ入力内容の確認画面を表示するが・・・・if(empty($errormessagearray)){ ◆◆ここで悩んでます◆◆ ここで考えること(したいこと)が、 ・表示はtableなどを使って羅列(文字の羅列)するのではなく、実際の入力画面に似たイメージにしたい→inputにdisabled属性を加えてみたが以降の弊害が・・・。 ※見た目が羅列じゃないならdisableじゃなくてもよいのだが。 ・確認画面を表示し、OKならcomp.phpで回答内容をDBに登録すると同時に終了メッセージ(正常に送信しました等)を表示。 NG(やっぱり修正したい)なら自分自身に返すが、値は保持しないといけない ・でもdisableは値を保持できないため、別途、input hiddenをアンケート項目数分用意し隠して保持させる必要がある。 ・しかし、1つのFORM内でaction先を変えることは難しい。submitを2つ用意し、飛び先を変えるにはjavascriptを使えばできるようだが、できればPHPを使いたい。 ---------------------- アンケートとしては、最終確認画面で「確定」するか「やっぱり修正」するかという部分で、 ・2つの条件分岐の方法 ・値の保持の仕方 でつまづいております。 アドバイス頂けると幸いです!

回答No.1

こんばんは。 これじゃ問4以外は、どう頑張っても消えますよ・・・。 まずは、temp/comp.phpに、保持する項目分のhiddenを作る。 この時、temp/comp.phpからtemp/anc.phpに戻る時には、submitで戻るようにさせる。 (POSTさせないと値が戻ってこないので・・・) 次に問1から問3は選択項目なので、復元させるためのロジックを書く。 例えば・・・、 $chk_q1=array($_POST['q1']=>'checked="checked"'); <h3>問1.元気ですか?</h3> <input type="radio" name="q1" value="1" <?php echo $chk_q1['1']?>>はい <input type="radio" name="q2" value="2" <?php echo $chk_q1['2']?>>いいえ のような感じで、復元させないといけません・・・。 まぁ、やり方はいろいろです。

nccno21
質問者

お礼

昨晩から修正を続け、 #初期化 $errormessagearray = array(); #初回アクセス判別   if($_POST && $_REQUEST))・・・・・・   #入力内容バリデーション    if(q1 != 1 && q2 != 2){$errormessagearray[1]="選択して下さい"; if($q2cnt < 1){$errormessagearray[2]="1つ以上選んで"; if(empty($4)){$errormessagearray[4]="入力して";   }else{ $errormassagearray[0] = "アンケートに回答して下さい"; } if(empty($errormessagearray)){ ◆◆ここで悩んでます◆◆ }else{ print($errormessagearray[0]; <FORM method="・・・・・・・・> print($errormessagearray[1]; 問1.元気ですか? <input type="radio" name="q1" value="1"<?php if($q1==1){print("checked"); ?> /> <input type="radio" name="q1" value="2"<?php if($q1==2){print{"checked"); ?> /> print($errormessagearray[2];・・・・・・・・・・・・ と、まぁこんな感じで邪道ですが、個別に処理することにしました。 そして、今はまっているのが、 ◆◆ここで悩んでます◆◆の中身です。 つまり、バリデーションも通過し【さぁ送信するよ】という確認画面の部分です。 要望は、tableなどで羅列するのではなく、視覚的にわかりやすいようにdisable(見た目が近ければ別の方法でも可)を使用したいこと。 そのためには値保持のためにinput hiddenを別に加えてやる必要があることまでわかっています。 formのactionを2つ設定することはjavascriptが必要みたいでした。PHPだけでは無理でしょうか。 またsubmitを2つ用意する方法では、actionは1つなのに意味あるのか?という疑問もあります。 以上踏まえて、何かアドバイスをいただけますか?

nccno21
質問者

補足

アドバイスありがとうございます。 一度に同一ファイルで、汎用処理で、様々な条件に対応して、・・・ やりたいことが一度に少し多すぎたように思いました(反省)。 まずは、ラジオの場合、チェックの場合、プルダウンの場合、テキストの場合で、それぞれ単体の処理を同一ファイルで実現させてみようと思います。 その上でループ処理、汎用処理を考えてみます。 難しければ項目は20問程度なので、決めウチします。

関連するQ&A