如何让表单记住使用PHP在表单中选择的内容?
我有一个表单,它验证表单中提交的信息,方法是POST并提交到另一个文件Check.php,我使用会话来记住POST数据是什么,当表单出现问题时,我将其重定向回表单输入页面 如何获取post数据以记住在选择输入中选择了哪个选项 代码:如何让表单记住使用PHP在表单中选择的内容?,php,forms,post,Php,Forms,Post,我有一个表单,它验证表单中提交的信息,方法是POST并提交到另一个文件Check.php,我使用会话来记住POST数据是什么,当表单出现问题时,我将其重定向回表单输入页面 如何获取post数据以记住在选择输入中选择了哪个选项 代码: <select name="referred"> <option value="facebook">facebook</option> <option value="youtube">youtube&l
<select name="referred">
<option value="facebook">facebook</option>
<option value="youtube">youtube</option>
<option value="reddit">reddit</option>
<option value="google">google</option>
</select>
我尝试过这样做,但没有成功:
<select name="referred">
<option value="facebook"
<?php
if (isset($_POST['referred']) && $_POST['referred'] == "Facebook") {
print "selected=\'selected\'";
}
?>?> >facebook</option>
我尝试过这样做,但仍然不起作用:
<select name="referred">
<option value="facebook"
<?php
if (isset($_POST['referred'])) {
if ($_POST['referred'] == "youtube") {
echo "selected=\'selected\'";
} else {
echo "";
}
}
?> >facebook
请帮忙
编辑:
很抱歉,我不是在这里使用$\u POST来检查它是否已设置,我应该使用$\u会话,请参见以下内容:
<select name="referred">
<option name="google"<?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "google"){ echo "selected='selected'";}else{ echo "";}}?>>google</option>
<option name="youtube"<?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "youtube"){ echo "selected='selected'";}else{ echo "";}}?>>youtube</option>
<option name="reddit" <?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "reddit"){ echo "selected='selected'";}else{ echo "";}}?>>reddit</option>
<option name="facebook" <?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "facebook"){ echo "selected='selected'";}else{ echo "";}}?>>facebook</option>
</select>
首先,var_dump$_POST;查看提交表单后得到的信息
您不需要会话来存储POST数据。你所需要的一切都在$u POST中。如果发生错误,您可以重定向到表单,而无需在会话中另外存储信息。您不需要在双引号中包装的字符串中转义单引号 这样,你的html标记就会变成坏的html 这应该行得通 编辑 如果您有一组已知的选项,则创建一个数组并在其中循环:
<?php
$options = array(
'option1' => 'Option 1',
'option2' => 'Option 2',
'option3' => 'Option 3' // ...
);
$referredIsset = isset($_SESSION['referred']);
?>
<select name="referred">
<?php foreach ($options as $value => $name): ?>
<?php
$sel = ($referredIsset && $_SESSION['referred'] == $value)
? 'selected="selected"'
: null;
?>
<option value="<?= $value; ?>" <?= $sel; ?>>
<?= $name; ?>
</option>
<?php endforeach; ?>
</select>
将业务逻辑与表示逻辑分开 定义变量。 避免重复 代码
$form['referred'] = array('facebook','youtube','reddit','google');
if ($_SERVER['REQUEST_METHOD']=='POST') {
//form validations
//if failed, fill variables with actual values
$form['ref'] = $_POST['referred'];
} else {
//filling variables with empty values
$form['ref'] = '';
}
模板
<select name="referred">
<? foreach($form['referred'] as $val): ?>
<option<? if($form['ref'] == $val):?> selected="selected"<? endif ?>><?=$val?></option>
<? endforeach ?>
</select>
首先,感谢您的回复。当我选择一个选项并回显$\u POST['reffered']时,它会给我命名为youtube。设置如下:注册表提交->Check.php->进行所有验证,如果出现任何错误,它将重定向回注册表,因此使用会话,因为$\u POST不只是将数据发送到下一个位置,它不会像会话一样存储数据,对吗?所以$\u POST['refered']=$\u SESSION['refered']我知道您重定向到了另一个文件。但是,如果表单的代码在另一个表单中,或者为什么它不在模板中,那么为什么要这样做;这两个都可以在不需要训练的情况下加入。对不起,我是这个网站的新手。我只想这样做:选项1,这样,如果会话已设置且选项等于“选项1”,则回显html代码使其处于选中状态,希望有意义。确定检查我的编辑。。这就是你要找的吗?如果你希望对所有选项都这样做,那么最好将它们存储在一个数组中,并在该数组中循环?有什么评论吗?我看不出有什么理由否决这个。是的,成功了,你是个传奇人物,我要吃点治头痛的药,在淋浴时唱你的名字。这几天我一直在认真地尝试,先生,你是一个传奇人物,如果你到过澳大利亚墨尔本,我请客!非常感谢你的帮助!哈哈,不客气,谢谢你的提议。现在我只想弄清楚是谁否决了我的答案,为什么:干杯!这段代码太夸张了。为什么要使用else语句?选项中无用的name属性我想确保不会出现任何内容,但我明白你的意思,并且绝对不需要else语句。Mate你对name属性很在行,我的错,我不太确定post数据会选择哪个属性,所以我两者都做了,你说得很对,因为它是无用的。谢谢,我会清理的。可以用三元运算符完成。除此之外,这应该是公认的答案。
$form['referred'] = array('facebook','youtube','reddit','google');
if ($_SERVER['REQUEST_METHOD']=='POST') {
//form validations
//if failed, fill variables with actual values
$form['ref'] = $_POST['referred'];
} else {
//filling variables with empty values
$form['ref'] = '';
}
<select name="referred">
<? foreach($form['referred'] as $val): ?>
<option<? if($form['ref'] == $val):?> selected="selected"<? endif ?>><?=$val?></option>
<? endforeach ?>
</select>