0

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

注意:我已经注释掉了我试图从文本输入中存储值的算法,只是试图回显表单的值数量并且没有这个值阻止我进入我想要的 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>
4

1 回答 1

1

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

是的,这会发生。PHP 脚本的每个请求都以新的变量开始。除非您将数据永久存储在某个地方,例如数据库、文件、cookie、会话存储等,否则不会记住数据。

要保留 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']).

于 2013-10-12T16:48:11.070 回答