我目前正在为一个更大的项目集成一个小的注册表,我正试图找出如何集成一个隐藏的表单字段(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>