1,記入漏れ、もしくはエラーがある場合には再度入力フォームを全体を表示し、入力内容にエラーがない項目はテキストフィールドに値をセットしたい。
2,エラーがある項目は項目のタイトルを赤文字で表示させたい
3,また、すべての項目が記入されている場合は確認画面として入力内容を出力したい
イメージとしてはヤフーID取得時の入力フォームのような動作にしたいです
https://edit.yahoo.co.jp/config/eval_register?.intl=jp&new=1&.done=http%3A//www.yahoo.co.jp&.src=www&.v=0&.u=77vjhk536fka2&partner=&.p=&promo=&.last=
一番具体的な回答をいただけた方に300ポイント差し上げます
よろしくお願いします
PHPスクリプトで、最初のフォームから作るものとします。
状態チェック用のフィールド(name="chk" type="hidden")で制御します。
不正な入力値の場合は、CSS を使って表示状態を変化させます。
class="err" で赤文字になる様にしておく
前処理として、$f_confirm=''; としておきます。
$_POST['chk'] で条件分けします。
$_POST['chk'] がセット空(またはセットされていない)なら、フィールドの値を入れておく変数を空にセットします。
その際、chkフィールド用は 1 にしておきます。
$postdata['フィールド名']='';
$postdata['chk']='1'
空以外ならポストされた値をフィールドの値を入れておく変数に入れておきます
$postdata['フィールド名'}=$_GET['フィールド名'];
$_POST['chk'] が 1 の場合、
ポストされた各フィールドの値のチェックをし、不正な場合はフラグをセットしておきます。
(例えば、$f_err['フィールド名'] = ' class="err"';)
問題なければ空をセットしておきます。
空欄を許さないフィールドをチェックし、空欄ならフラグをセットします。
入力があり、フラグがセットされていなければ空をセットしておきます。
全てをチェック後、フラグに空でないものがあるかを調べ、無ければchkフィールド用変数を 2 にします。
$_POST['chk'] が 2 の場合、
確認画面であることを示す文字列を $f_confirm に入れ、chkフィールド用変数を 3 にします。
$f_confirm='この入力値でよろしいですか?';
$_POST['chk'] が 3 の場合、
実際に処理をします。
必要があれば、フィールドの値を入れておく変数を再設定(又は空に)しておきます。(この後再表示)
必要が無ければ、別のページに飛ぶなり表示するなりしてPHPを終わらせます。
条件分け後、フィールドの値を入れておく変数を使ってフォームのページを作ります。
その際にフラグが立っていれば、エラー表示用のスタイルシートがが使われるようにします。
$html = '...'; $html.= '<form ....'; $html.= '<input type="hidden" name="chk" value="'.$postdata['chk'].'">'."\n"; $html.= '<p'.$f_err['フィールド名'].'">項目名'; $html.= '<input type="text" name="fld1" value="'.$postdata['フィールド名'].'" size="12"></p>'."\n"; ... $html.= '<p>'.$f_confirm.'</p>'; このようにして確認用のメッセージも入れておきます。
これを出力してスクリプトは終了です。
簡単なサンプルですが、参考になるでしょうか。
<head> <head> <?php extract($_POST); $name_color='"black"'; $password_color='"black"'; if ( isset( $confirmed ) ) { // 登録完了 $registMode = "THANKS"; } else if ( !isset( $user_name ) || !isset( $user_password ) ) { // 最初の表示 $user_name = ""; $user_password = ""; $registMode = "REGIST"; } else { // 登録ボタンを押されたとき $registMode ="CONFIRM"; // 名前が空 if ( empty( $user_name ) ) { $name_color='"red"'; $registMode = "REGIST"; } // パスワードが空 if ( empty( $user_password ) ) { $password_color='"red"';; $registMode = "REGIST"; } } ?> </head> <body> <center> <?php if ( $registMode == "REGIST" ) { // 登録フォームの表示 echo <<<_REGIST_FORM <hr width="80%"> <font size="4"><b>ユーザ登録</b></font> <hr width="80%"> <br> <form name="registForm" method="POST"> <font color=$name_color><b>名 前</b></font> <input type="text" name="user_name" value="$user_name"> <br> <font color=$password_color><b>パスワード</b></font> <input type="text" name="user_password" value="$user_password"> <br> <input type="submit" name="regist" value="登録"> </form> _REGIST_FORM; } else if ( $registMode == "CONFIRM" ) { // 確認画面 echo <<< _CONFIRM <form name="confirmForm" method="POST"> <hr width="80%"> <font size="4"><b>登録確認</b></font> <hr width="80%"> <br> 次の内容で登録します。 <br> <br> <b>名 前</b> : $user_name <br> <b>パスワード</b> : $user_password <br> <br> よろしいですか。 <input type="submit" name="confirmed" value="確認"> <input type="submit" name="cancel" value="取消"> </form> _CONFIRM; } else if ( $registMode == "THANKS" ) { // 終了画面 print "<br><br><br><br>\n"; print "<b>登録ありがとうございました。</b><br>\n"; } ?> </center> </body> </html>
ご回答ありがとうございます
一連の流れがよくわかりました
ありがとうございます
confirm.phpを作成して、そこに以下のコードをコピーしてください。その後、適当なフォームからconfirm.phpに向けてPOSTで送信してください。フォームに指定している項目は、nameとemailです。
<?php $name = $_POST['name']; $email = $_POST['email']; ?> <html> <head> <style type="text/css"> .caution { color: #FF0000; } </style> </head> <body> <form action="confirm.php" method="post"> <dl> <?php if (!$name){ print<<<EOF <dt><span class="caution">名前:</span></dt> <dd><input type="text" name="name" size="10" value="$name" ></dd> EOF; }else { print<<<EOF <dt><span>名前:</span></dt> <input type="hidden" name="name" value="$name" > <dd>$name</dd> EOF; } if (!$email){ print<<<EOF <dt><span class="caution">メールアドレス:</span></dt> <dd><input type="text" name="email" size="10" value="$email" ></dd> EOF; }else { print<<<EOF <dt><span>メールアドレス:</span></dt> <input type="hidden" name="email" value="$email" > <dd>$email</dd> EOF; } if (!$name || !$email){ print<<<EOF <dd><input type="submit" value="Submit"></dd> EOF; } ?> </dl> </form> <?php if ($name && $email){ print<<<EOF <form action="send.php" method="post"> <input type="hidden" name="name" value="$name" > <input type="hidden" name="email" value="$email" > <input type="submit" name="submit" size="10" value="Submit" > </form> EOF; } ?>
phpの直書きに慣れていないので、無駄なコードも含まれてますがお許しを。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | GEN111 | 472回 | 444回 | 58回 | 2007-06-08 22:17:57 |
ご回答ありがとうございます
できれば全体のソースが見たかったです