0

PHP のエラーが原因でユーザーに戻ると、テキスト ボックスにvalue = "<?php if(isset($_POST['abc'])){echo $_POST['abc'];}. <select>コンボボックスで同等のことを行うにはどうすればよいですか?

4

2 に答える 2

2

それはあなたが何を意味するかに少し依存しますrefreshed

投稿せずにページを文字通り更新/再読み込みする場合は、javascriptを使用して、変更されたときに値を保存し、ページが更新/読み込まれたときにその値を読み込むことができます。保存オプションは、訪問者のコンピューター上のCookieやローカルストレージから、ajaxを使用したサーバー側のストレージまでさまざまです。

後で同じページをロードするときに以前に保存/投稿された値を使用することについて話している場合、それは別の話ですが、ajaxアプローチはそこでも機能します(ただし、必要ない場合があります)。

編集:編集に基づいてselected="selected"、前に選択したオプションに追加する必要があります。

したがって、選択オプションを構築するループ(ループを想定)では、次のようなことを行います。

foreach($options as $key => $value)    // the loop, if any...
{
  echo "<li value='{$key}'";
  if ($key == $_POST['def'])
  {
    echo ' selected="selected"';
  }
  echo ">{$value}</li>"
}
于 2012-06-30T00:48:59.930 に答える
1

これはサンプルです:

<?php
    $cbo_sel = 'SELECTED="SELECTED"'; //to make an item selected, append this attribute to that <option> element

    $post_success = false; //becomes true only when the data submitted is processed successfully

    $name   = '';
    $email  = '';
    $grade  = '';

    $user_msg = ''; //holds the messages to the user

    if($_SERVER['REQUEST_METHOD']=='POST')
    {
        //assigning the values
        $name   = isset($_POST['name']) ? trim($_POST['name']) : '';
        $email  = isset($_POST['email']) ? trim($_POST['email']) : '';
        $grade  = isset($_POST['grade']) ? trim($_POST['grade']) : '';

        //do validation here
        if($name == '') // && any_regex_if_needed
            $user_msg = "Where is your name ?";
        else if($email == '')
            $user_msg = "How am I gonna contact you ?";
        else if($grade == '')
            $user_msg = "Oh! Don't hide your grade from me !";
        else
        {
            //everything is okay.. now do your things here... like inserting this to database or calculating or mailing, etc...
            //...
            //...

            $user_msg = 'Success !';
            $post_success = true; //success
        }
    }
?>
<!DOCTYPE html>
<html>
<head><title>Testing..</title></head>
<body>

    <div><?php echo $user_msg; ?></div>

    <form method="POST">
        Name: 
            <input type="text" name="name" value="<?php echo (!$post_success)?$name:''; ?>" /> <br />
        Email: 
            <input type="text" name="email" value="<?php echo (!$post_success)?$email:''; ?>" /> <br />
        Grade: 
            <select name="grade">
                <option value="A" <?php echo ($grade=='A' && !$post_success)?$cbo_sel:''; ?>>A</option> <!-- if grade='A' and if the data submitted was not processed(because of failed validation), then display the value -->
                <option value="B" <?php echo ($grade=='B' && !$post_success)?$cbo_sel:''; ?>>B</option>
                <option value="C" <?php echo ($grade=='C' && !$post_success)?$cbo_sel:''; ?>>C</option>
                <option value="D" <?php echo ($grade=='D' && !$post_success)?$cbo_sel:''; ?>>D</option>
            </select>

            <input type="submit" name="submit" value="Submit" />
    </form>
</body>
</html>

ここでは、オプションをハードコーディングしています。そのため、複数のアイテムを含む長いドロップダウンの場合は、ループを使用してオプションをチェックし、if ステートメントを使用します。

たぶん、これは改善される可能性があります。すべての提案を歓迎します。:)

于 2012-06-30T03:38:33.783 に答える