为什么在同一页面上提交第二个表单时会一直丢失变量值

时间:2013-10-12 14:56:22

标签: php

所以基本上我正在做的是生成一个简单的表单来接受一个数字。根据这个数字,我正在生成一个相同的正常文本输入,并为这些输入表单关联一个新的提交按钮。问题是我需要跟上原始数量的表单作为索引值传递给我想要存储新文本输入集的值的数组。但是当我提交新表单时,价值不断下降。这是我的代码如下。

注意:我已经注释掉了算法,我试图存储文本输入中的值,只是尝试回显表单的值数,而没有这个值阻止我进入我的for循环我喜欢存储这些值。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
    <title>Kid Order Selector</title>
</head>
<body>
    <form action="kid_selector.php" method="post">
        Enter number of kids playing:<input type="text" name="num_kids" /><input type="submit" name="submit" value="Submit" />
    </form>
    <br /><br />
    <form action="kid_selector.php" method="post">
        <?php

            if(isset($_POST["num_kids"])) {
                $num_kids = $_POST["num_kids"];
                echo "Enter the following kids names:<br />";
                for($i = 1; $i <= $num_kids; $i++) {
                    echo "<input type=\"text\" name=\"kid{$i}\"  /><br />";
                    $index = $i;
                }

                if( $num_kids == $index ) {
                    echo "<input type=\"submit\" name=\"submit\" value=\"Submit\" />";
                }

                $numkids = $num_kids;
            } else {
                $num_kids = "";
            }
        ?>

        <?php

            //$kids = array();
            echo $numkids;

            if(isset($_POST["kid1"])) {
                echo "Success";
                for($i=0; $i < $numkids; $i++) {
                   // $index = $i + 1;
                    //$pos = "kid{$index}";
                    //echo $pos;
                    //$kids[$i] = $_POST[$pos];
                    echo "Success";
                }

                //print_r($kids);
            }
        ?>    


    </form>


</body>
</html>

1 个答案:

答案 0 :(得分:1)

  

当我提交新表单时,值不断下降

是的,那会发生。 PHP脚本的每个请求都以新变量开头。除非您将数据存储在持久性数据库中,例如数据库,文件,cookie,session storage等等,否则不会记住数据。

要保留num_kids值,可以将其写为第二种形式的隐藏输入:

if(isset($_POST["num_kids"])) {
    $num_kids = $_POST["num_kids"];
    echo '<input type=hidden name=num_kids value=' . $num_kids . '>';

然后,当提交第二个表单时,您可以再次从$ _POST读取该值。

执行表单的另一种方法是使用数组变量作为输入名称。所以:

echo "Enter the following kids names:<br />";
echo str_repeat('<input name="kids[]"><br />', $num_kids);

然后,当提交第二个表单时,您可以直接从$ _POST读取数组,而无需使用循环构建它。

if (isset($_POST['kids'])) {
    echo 'Success.<br />';
    print_r($_POST['kids']);
}

然后,如果您需要num_kids值,则为count($_POST['kids'])