Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让表单记住使用PHP在表单中选择的内容?_Php_Forms_Post - Fatal编程技术网

如何让表单记住使用PHP在表单中选择的内容?

如何让表单记住使用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

我有一个表单,它验证表单中提交的信息,方法是POST并提交到另一个文件Check.php,我使用会话来记住POST数据是什么,当表单出现问题时,我将其重定向回表单输入页面

如何获取post数据以记住在选择输入中选择了哪个选项

代码:

<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>