我有一个复选框数组name =“box []”。通过PHP,我确保在提交后通过回显“checked ='checked'”对它们进行检查,如果在提交事件中检查了它们。
现在,如果我检查第三个框,则值会在提交后跳转到第一个复选框,因为数组在第三个复选框之前是空的。同样,如果我检查第二个和第三个复选框,他们会在提交后跳到第一个和第二个。这是我正在使用的代码:
<form method="post">
<input type="checkbox" name="box[]" value="true" <?php if ($box[0] == true) echo "checked='checked'"; ?>><br>
<input type="checkbox" name="box[]" value="true" <?php if ($box[1] == true) echo "checked='checked'"; ?>><br>
<input type="checkbox" name="box[]" value="true" <?php if ($box[2] == true) echo "checked='checked'"; ?>><br>
<p>
<input type="submit" value="Submit">
</form>
尝试: http://experiencerapanui.com/selecttest.php
如果未选中此复选框,是否可以使复选框使用值“false”或其他任何内容填充数组?我应该走哪条路?
** * *** 编辑 的 ** * ** *
感谢phant0m,我设法找到了解决方案:
<form method="post">
<input type="checkbox" name="box[]" value="1" <?php if (in_array("1", $box)) echo "checked='checked'"; ?>><br>
<input type="checkbox" name="box[]" value="2" <?php if (in_array("2", $box)) echo "checked='checked'"; ?>><br>
<input type="checkbox" name="box[]" value="3" <?php if (in_array("3", $box)) echo "checked='checked'"; ?>><br>
<p>
<input type="submit" value="Submit">
</form>
为复选框添加唯一值,如果我在数组$ box []中找到值,则该框被标记为选中。
答案 0 :(得分:1)
这不起作用,因为只有那些已选中的复选框才会被放入$box
数组中。
使用不同的名称或不同的值来区分它们。
考虑一下:你检查第二个和第三个复选框。在PHP中,您将收到:
$_POST['box'] = array(0 => "true", 1 => "true");
您无法知道哪些复选框已被选中,除非所有复选框都是。
答案 1 :(得分:0)
POST值应以isset开头,然后!empty($ array)确定POST值是否为数组,并在未选择任何选项时阻止空数组错误。
&安培;&安培;除了!empty($ _ POST [&#39; box&#39;])之外,还可以使用is_array($ _ POST [&#39; box&#39;])来检查数组的有效性。
变量在以下示例中用于值字段,因为它使得在使用foreach循环时更容易定义和填充输入,并且如果需要可以作为预防措施进行清理。
同样清理$ _POST数组可能是一个好主意,并将其封装在一个带有验证的函数中,这样就可以从复选框输入中调用它,并保持输入区域整洁。
<input type="checkbox" name="box[]" value="<?php echo $unique_id; ?>" <?php if(isset($_POST['box']) && !empty($_POST['box']) && in_array($unique_id, $_POST['box'])) echo "checked='checked'"; ?>>
OR
<input type="checkbox" name="box[]" value="<?php echo $unique_id; ?>" <?php my_function(); ?>>
优秀的问题和解决方案!似乎有相对较少的使用数组方法来保留Post选择的例子,这里提供的例子是相关的,甚至在几年后也非常有用。