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

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/06/09 15:58:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:tezcello No.1

回答回数460ベストアンサー獲得回数69

ポイント30pt

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

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

id:jayz

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

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

2007/06/09 15:57:12
id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント300pt

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

<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>
id:jayz

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

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

ありがとうございます

2007/06/09 15:58:01
id:penchick No.3

回答回数22ベストアンサー獲得回数0

ポイント30pt

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

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 GEN111 472 444 58 2007-06-08 22:17:57
  • id:Mook
    説明の少ない回答ですみません。
    不明な点があったら、コメントください。

    訂正です。
    先頭の <head> は <html> の誤りでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません