从表单中获取数组

时间:2017-09-26 17:18:43

标签: php arrays

我有一个使用复选框的表单,它从mysql数据库中获取所有数据。所以可以从1到无限制的复选框。

我需要获取提交表单时检查的每一个。

如果检查了所有这些,它会起作用,但如果只检查了一些,它将显示无或只显示其中一个。

以下是我用来显示数据复选框的代码:

while ($myrow = mysqli_fetch_array($result)){
echo<<<END
<input type="checkbox" id="units" name="unit[$i]" value="$myrow[unit_id]" /> $myrow[unit_id]<br />
END;
$i++;
}//end while

以下是我提交表单时使用的代码:

$i=0;
while($_POST["unit"][$i] != ""){
$unit = $_POST["unit"][$i];
$unit = $res2->real_escape_string($unit);
echo $unit."<br />";
$i++;
} // end while

我认为问题在于我有while($_POST["unit"[$1] != "")并且如果检查了一个盒子然后检查了另一个2或3,那么它会看到第二个为空并停止。

如果是这种情况,我需要帮助弄清楚如何让它贯穿所有并打印出已检查的那些。请记住,可能会有从1到无限制的任何位置,因此它不能是while($i <= 50)

这样的固定数字

谢谢!

2 个答案:

答案 0 :(得分:5)

复选框仅在选中后发送。使用while时,只要未设置由$_POST['unit'][$i]表示的复选框,循环就会停止,因此其余的永远不会被评估。您应该考虑对数组使用foreach

foreach($_POST["unit"] as $unit) {
    echo $unit . "<br />";
}

如果密钥很重要:

foreach($_POST["unit"] as $key => $unit) {
    echo $key . " is " . $unit . "<br />";
}

答案 1 :(得分:0)

如果$ i不重要,您应该使用:

名=&#34;单元[]&#34;

并在foreach循环中检索值

foreach($ _REQUEST [&#39; unit&#39;]为$ unit)....