人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでフォームを作成していますが以下のような条件でフォームを作成したい場合どのようにしたらよいか教えてください。

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ポイント差し上げます
よろしくお願いします

●質問者: jayz
●カテゴリ:ウェブ制作
✍キーワード:PHP イメージ エラー タイトル テキスト
○ 状態 :終了
└ 回答数 : 3/4件

▽最新の回答へ

1 ● tezcello
●30ポイント

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>'; このようにして確認用のメッセージも入れておきます。

これを出力してスクリプトは終了です。

◎質問者からの返答

ご回答ありがとうございます

できれば全体のソースが見たかったです


2 ● Mook
●300ポイント

簡単なサンプルですが、参考になるでしょうか。

<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>
◎質問者からの返答

ご回答ありがとうございます

一連の流れがよくわかりました

ありがとうございます


3 ● penchick
●30ポイント

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 &amp;&amp; $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の直書きに慣れていないので、無駄なコードも含まれてますがお許しを。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ