使用隐藏输入来保存表单内容


Using hidden input to preserve form contents

我目前正在为一个更大的项目集成一个小的注册表,我正试图找出如何集成一个隐藏的表单字段(s)到它,以保存跨提交的数据。基本上,每当有人在表单上注册时,他们的名字应该出现在条目旁边,并且当下一个人提交表单时,该条目不应该更改(即,它不应该再次可用)。这是我目前正在处理的:

    Name: <input type="text" name="name"><br>
    Select from one of the following:<br>
    <fieldgroup>
        <?php
            $form_contents = "";
            if (isset($_POST['food']) && $_POST['food'] == 'pasta') {
                $form_contents .= "<input type='hidden'>Pasta - " . $_POST['name'] . "<br>";
            } else {
                $form_contents .= '<input type="radio" name="food" value="pasta">Pasta</input><br>';
            }
            if (isset($_POST['food']) && $_POST['food'] == 'salad') {
                $form_contents .= "Salad - " . $_POST['name'] . "<br>";
            } else {
                $form_contents .= '<input type="radio" name="food" value="salad">Salad</input><br>';
            }
            if (isset($_POST['food']) && $_POST['food'] == 'burgers') {
                $form_contents .= "Burgers - " . $_POST['name'] . "<br>";
            } else {
                $form_contents .= '<input type="radio" name="food" value="burgers">Burgers</input><br>';
            }
            echo $form_contents;
        ?>
    </fieldgroup>

当前,该表单存储了一个初始条目,但下次提交时,该名称将被擦除,选择项将再次可用。是否有任何方法可以保留该条目,以便每次提交表单时都保留该条目?任何帮助都是感激的!

我认为你对<input type="hidden" />的想法很有效。

也许你可以看看<input>是如何工作的,就在这里。你不需要像<input></input>那样做,只需要给输入一个名称和一个值。

每次提交,您都可以检查当前变量是否已经给定。当它是时,您可以使用该变量设置<input type="hidden" />,当它不是时,您可以让用户在<input type="text" />中输入名称。


回应你的评论,你也许可以试试这个。我觉得它符合你的要求。也许,这不是最有吸引力的解决方案,但我认为它会奏效的。

Name: <input type="text" name="name"><br>
Select from one of the following:<br>
<fieldgroup>
    <?php
        # Set empty form
        $_Form  = NULL;
        # Check submit
        if(isset($_POST['food'])) {
            # Check pasta
            if($_POST['food'] == 'pasta') {
                $_Form  .= '<input type="hidden" name="foodSelectedPasta" value="Pasta - ' . $_POST['name'] . '">Pasta - ' . $_POST['name'] . '</input><br>';
            } else {
                # Check already chosen
                if(isset($_POST['foodSelectedPasta'])) {
                    $_Form  .= '<input type="hidden" name="foodSelectedPasta" value="' . $_POST['foodSelectedPasta'] . '">' . $_POST['foodSelectedPasta'] . '</input><br>';
                } else {
                    $_Form  .= '<input type="radio" name="food" value="pasta">Pasta</input><br>';
                }
            }
            # Check salad
            if($_POST['food'] == 'salad') {
                $_Form  .= '<input type="hidden" name="foodSelectedSalad" value="Salad - ' . $_POST['name'] . '">Salad - ' . $_POST['name'] . '</input><br>';
            } else {
                # Check already chosen
                if(isset($_POST['foodSelectedSalad'])) {
                    $_Form  .= '<input type="hidden" name="foodSelectedSalad" value="' . $_POST['foodSelectedSalad'] . '">' . $_POST['foodSelectedSalad'] . '</input><br>';
                } else {
                    $_Form  .= '<input type="radio" name="food" value="salad">Salad</input><br>';
                }
            }
            # Check burgers
            if($_POST['food'] == 'burgers') {
                $_Form  .= '<input type="hidden" name="foodSelectedBurgers" value="Burgers - ' . $_POST['name'] . '">Burgers - ' . $_POST['name'] . '</input><br>';
            } else {
                # Check already chosen
                if(isset($_POST['foodSelectedBurgers'])) {
                    $_Form  .= '<input type="hidden" name="foodSelectedBurgers" value="' . $_POST['foodSelectedBurgers'] . '">' . $_POST['foodSelectedBurgers'] . '</input><br>';
                } else {
                    $_Form  .= '<input type="radio" name="food" value="burgers">Burgers</input><br>';
                }
            }
        } else {
            $_Form  .= '<input type="radio" name="food" value="pasta">Pasta</input><br>';
            $_Form  .= '<input type="radio" name="food" value="salad">Salad</input><br>';
            $_Form  .= '<input type="radio" name="food" value="burgers">Burgers</input><br>';
        }
        # Output form
        echo $_Form;
    ?>
</fieldgroup>

如果您想在一个页面上拥有所有这些,您可以将隐藏元素的name属性更改为数组。然后,在决定是再次回显隐藏元素还是回显单选按钮之前,检查数组中是否设置了特定字段。

Name: <input type="text" name="name"><br>
Select from one of the following:<br>
<fieldgroup>
<?php
    $form_contents = "";
    // you only showed the options for food but you can extend this by adding the other fields to this array
    $alreadySelected = array(
        'food'=>array()
    );
    if(isset($_POST['selected']))
        $alreadySelected = array_merge_recursive($alreadySelected,$_POST['selected']);
    if(!empty($_POST['food']) && !empty($_POST['name'])) {
        $alreadySelected['food'][$_POST['food']] = $_POST['name'];
    }
    // do some error checking
    else if(!empty($_POST['name']) && empty($_POST['food'])) {
        echo "<span style='color:red'>You need to pick a food when you enter your name.</span><br/>";
    }
    else if(empty($_POST['name']) && !empty($_POST['food'])) {
        echo "<span style='color:red'>Please enter your name when you pick a food</span>.<br/>";
    }
    // use the label as the key and the value of the input as the value
    $foods = array(
         'Pasta'=>'pasta'
        ,'Salad'=>'salad'
        ,'Burgers'=>'burgers'
    );
    foreach($foods as $label=>$value) {
        if(isset($alreadySelected['food'][$value])) {
            // use the name of the person who selected the option as the value so that we can remember it for further submissions
            $form_contents .= "<input type='hidden' name='selected[food][" . $value . "]' value='" . $alreadySelected['food'][$value] . "'>" . $label . " - " . $alreadySelected['food'][$value] . "<br>";
        }
        else {
            $form_contents .= "<label><input type='radio' name='food' value='" . $value . "'>" . $label . "</label><br>";
        }
    }
    echo $form_contents;
?>
</fieldgroup>