Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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 在表单上保留select和多个select数组值_Php_Forms_Session_Post - Fatal编程技术网

Php 在表单上保留select和多个select数组值

Php 在表单上保留select和多个select数组值,php,forms,session,post,Php,Forms,Session,Post,我肯定遗漏了一些明显的东西,但当表单提交到自身时,我无法在表单POST上保留选择值和多个选择值 以下是基本形式: <?php // Setup Fields, Initially Empty $first_name = $last_name = $age = $fruit = ""; // Start session session_start(); // Register session_register('first_name

我肯定遗漏了一些明显的东西,但当表单提交到自身时,我无法在表单POST上保留选择值和多个选择值

以下是基本形式:

    <?php
    // Setup Fields, Initially Empty
    $first_name = $last_name = $age = $fruit = "";

    // Start session
    session_start();

    // Register
    session_register('first_name');
    session_register('last_name');
    session_register('age');
    session_register('fruit');

    // Populate
    $_SESSION['first_name'] = $first_name;
    $_SESSION['last_name'] = $last_name;
    $_SESSION['age'] = $age;
    $_SESSION['fruit'] = $fruit;

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        </head>
        <body>
            <div>

            <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="submit_data" method="POST" id="submit_data">

                        <p><label for="first_name">First Name</label><input type="text" id="first_name" size="20" maxlength="100" value="<?php echo $first_name;?>" name="first_name" />
                        </p>

                        <p><label for="last_name">Last Name</label><input type="text" id="last_name" size="20" maxlength="100" value="<?php echo $last_name;?>" name="last_name" />
                        </p>

                        <p><label for="age">Are you:</label>
                            <select id="age" name="age">
                                <option value=""></option>
                                <option value="0">Under 50</option>
                                <option value="1">50+</option>
                            </select>
                        </p>

                        <p><label for="fruit">Pick some fruit</label>
                            <select id="fruit" name="fruit[]" multiple="multiple">
                                <option value="Apple">Apple</option>
                                <option value="Banana">Banana</option>
                                <option value="Orange">Orange</option>
                            </select>
                        </p>

                <input type="submit" name="submit" value="Submit" />
            </form>
            </div>
        </body>
    </html>
请有人能为我指出这个基本形式要求的正确方向吗


谢谢

,因为您正在使用
register\u globals
这些变量将在代码运行之前自动为您创建

$first_name, $last_name, $age, $fruit
因此,当您在代码的第一行执行此操作时

// Setup Fields, Initially Empty
$first_name = $last_name = $age = $fruit = "";
您将这些值设置为
'
。毫不奇怪,当您尝试将它们放入$\u会话时,它们是空的。尝试将它们放回输入字段时也是如此


停止使用“全球注册”功能,使用
$\u POST['xxx']
$\u GET['xxx']
引用来自提交表单的变量,或者在绝对必要时使用
$\u REQUEST['xxx']
。它将使您的代码更容易理解,并且更易于移植。

您可以执行以下操作

// for 'age' (single select)
<option value="0"<?php if(isset($_POST['age']) && $_POST['age']==0) echo ' selected'; ?> >Under 50</option>

//for 'fruit' (multiple select)
<option value="Apple"<?php if(isset($_POST['fruit']) && in_array('Apple',$_POST['fruit'])) echo ' selected'; ?>>Apple</option>
//用于“年龄”(单选)
>苹果
您需要为每个选择执行此操作

如果您想这样做,这是一个php循环,您可以这样做

// for 'age' (single select)
<select id="age" name="age">
    <option value=""></option>
    <?php 
      $opts = array(0=>'Under 50',1=>'50+');
      foreach($opts as $k=>$v) {
              $s = (isset($_POST['age']) && $_POST['age']==0) ? ' selected': '';
              echo "<option value=\"{$k}\"{$s}>{$v}</option>";
      }
    ?>
</select>

//for 'fruit' (multiple select)
<select id="fruit" name="fruit[]" multiple="multiple">
    <?php 
      $opts = array('Apple','Banana','Orange');
      foreach($opts as $v) {
              $s = (isset($_POST['fruit']) && in_array($v,$_POST['fruit'])) ? ' selected': '';
              echo "<option value=\"{$v}\"{$s}>{$v}</option>";
      }
    ?>
</select>
//用于“年龄”(单选)
//对于“水果”(多选)

Sidenote:从PHP 5.3.0开始,此函数已被弃用,并从PHP 5.4.0开始删除。您使用的是什么版本的PHP<代码>会话\u寄存器是一个完整的编号。不要使用它。另外,您不应该使用
register\u globals
,我假设您必须使用它,因为您从未引用过$\u GET或$\u POST。它是5.3.24-我不关心环境,因此如果会话\u register是否定的,我必须找到替代方法。谢谢。实际上,您已经在使用
$\u会话['first\u name']=$first\u name
etc.@MCG只需去掉包含
session\u寄存器的其他寄存器
您已经使用了正确的替代方法,即`$\u session['first\u name']=$first\u name;etcHave为动态构建/选择选项添加了示例这正是我所需要的-很明显,现在它就在我面前!再加上Fred ii和RiggsFolly关于会话设置的评论,效果非常好。谢谢大家。
// for 'age' (single select)
<select id="age" name="age">
    <option value=""></option>
    <?php 
      $opts = array(0=>'Under 50',1=>'50+');
      foreach($opts as $k=>$v) {
              $s = (isset($_POST['age']) && $_POST['age']==0) ? ' selected': '';
              echo "<option value=\"{$k}\"{$s}>{$v}</option>";
      }
    ?>
</select>

//for 'fruit' (multiple select)
<select id="fruit" name="fruit[]" multiple="multiple">
    <?php 
      $opts = array('Apple','Banana','Orange');
      foreach($opts as $v) {
              $s = (isset($_POST['fruit']) && in_array($v,$_POST['fruit'])) ? ' selected': '';
              echo "<option value=\"{$v}\"{$s}>{$v}</option>";
      }
    ?>
</select>