Php 在同一页面上提交第二个表单时,为什么不断丢失变量值
所以基本上我要做的是生成一个简单的表单来接受一个数字。基于这个数字,我正在生成一个与这些输入表单相关联的新提交按钮的文本输入相同的正常值。问题是我需要保持原始的表单数量,将其作为索引值传递给我想要存储新文本输入集中的值的数组。但当我提交新表单时,值不断下降。下面是我的代码 注意:我已经注释掉了算法,我试图存储来自文本输入的值,只是尝试回显表单的值编号,没有这个值会阻止我进入我想要存储值的for循环Php 在同一页面上提交第二个表单时,为什么不断丢失变量值,php,Php,所以基本上我要做的是生成一个简单的表单来接受一个数字。基于这个数字,我正在生成一个与这些输入表单相关联的新提交按钮的文本输入相同的正常值。问题是我需要保持原始的表单数量,将其作为索引值传递给我想要存储新文本输入集中的值的数组。但当我提交新表单时,值不断下降。下面是我的代码 注意:我已经注释掉了算法,我试图存储来自文本输入的值,只是尝试回显表单的值编号,没有这个值会阻止我进入我想要存储值的for循环 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 T
<!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>
儿童顺序选择器
输入玩游戏的孩子数量:
当我提交新表单时,该值不断下降
是的,那会发生的。PHP脚本的每个请求都以新变量开始。除非将数据存储在持久的位置,例如数据库、文件、cookie等中,否则不会记住数据
要保留num_kids值,可以将其作为第二种形式的隐藏输入写入:
if(isset($_POST["num_kids"])) {
$num_kids = $_POST["num_kids"];
echo '<input type=hidden name=num_kids value=' . $num_kids . '>';
if(isset($\u POST[“num\u kids”])){
$num_kids=$\u POST[“num_kids”];
回声';
然后,当提交第二个表单时,您可以再次从$\u POST读取该值
执行表单的另一种方法是使用数组变量作为输入名称。因此:
echo "Enter the following kids names:<br />";
echo str_repeat('<input name="kids[]"><br />', $num_kids);
echo“输入以下孩子的名字:
”;
echo str_repeat(“
”,$num_kids);
然后,当提交第二个表单时,您可以直接从$\u POST读取数组,而无需使用循环构建它
if (isset($_POST['kids'])) {
echo 'Success.<br />';
print_r($_POST['kids']);
}
if(isset($\u POST['kids'])){
呼应“成功”
;
打印($_POST['kids']);
}
然后,如果需要num_kids值,则它是
count($\u POST['kids'])
与您提到的第一个解决方案相比,我更喜欢解决方案2。虽然我在实现str_repeat时遇到了一些错误,但我查看了PHP.net文档,发现您列出的参数是反向的。它实际上应该设置为以下内容:string str_repeat(string$input,int$multiplier)