我有一个html表单,将数组传递给php,然后执行for循环以打印出值。这是我的代码
$payloads = $_POST['topay'];
$loadNum = $_POST['loadnum'];
$unit = $_POST['unit'];
$driver = $_POST['driver'];
for($i=0;$i<count($payloads);$i++)
{
echo $payloads[$i];
echo "<br>";
echo '<td width="50" valign="top">'.$loadNum[$i].'</td>';
echo '<td width="50" valign="top">'.$unit[$i].'</td>';
echo '<td width="150" valign="top">'.$driver[$i].'</td>';
}
$ _POST ['topay']是我传入的复选框数组,其中只有经过检查的项目才能通过。例如,在我传递给php的表单中有多个复选框,它应该只传递已检查的复选框。当我在for循环中执行第一个echo时,它会正确地打印出值,但是内部的回声不会。
值:
$loadNum = [5,6]
$unit = [101,103]
driver = ["joe", "mike"]
选中这两个复选框时,输出正常。选中第一个复选框后,输出正常。但是,如果我只检查第二个(6,103,“迈克”),输出仍然是(5,101,“乔”)
修改 这是我发送到这个php页面的HTML代码:
echo '<form action="statement.php" target="_blank" METHOD="post">';
echo '<td><input type="checkbox" name="topay[]" value="'.$loadNumber.'" checked></td>';
echo '<td width="70"><input type="hidden" name="loadnum[]" value="'.$loadNumber.'" />'. $loadNumber.'</td>';
echo '<td width="70"><input type="hidden" name="unit[]" value="'.$unit.'" />' .$unit.'</td>';
echo '<td width="150"><input type="hidden" name="driver[]" value="'.$driver.'" />' .$driver.'</td>';
?>
<p><input type="submit" name="sumbit" value="Create Statement" /></p>
答案 0 :(得分:1)
假设您已正确命名输入值,例如:
<input name="topay[0]" type="checkbox">
<input name="loadnum[0]" value="5">
<input name="unit[0]" value="101">
<input name="driver[0]" value="joe">
<input name="topay[1]" type="checkbox">
<input name="loadnum[1]" value="6">
<input name="unit[1]" value="103">
<input name="driver[1]" value="mike">
请注意我使用的topay[0]
和topay[1]
符号,而不是使用topay[]
的表单输入值:
<input type="checkbox" name="topay[]" value=" ...
<input type="hidden" name="loadnum[]" ...
<input type="hidden" name="unit[]" ...
复选框字段值仅在表单提交时发送,如果已经过检查,则会发送:
[5]
[5, 6]
[6]
使用我之前建议的命名方案,会发送:
[5]
[5, 6]
[1 => 6]
更正这些字段名称后,您应该使用$payloads
迭代foreach
数组,以便您也可以获取关联键;这很重要,因为只有选中的值与表单一起发送。
foreach ($payloads as $key => $payload) {
echo $payload, '<br>';
printf('<td width="50" valign="top">%s</td>', $loadNum[$key]);
printf('<td width="50" valign="top">%s</td>', $unit[$key]);
printf('<td width="50" valign="top">%s</td>', $driver[$key]);
}