当数组为空时,复选框“已检查” - 值会跳转到较早的数组值

时间:2011-06-22 11:19:48

标签: php arrays checkbox

我有一个复选框数组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 []中找到值,则该框被标记为选中。

2 个答案:

答案 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选择的例子,这里提供的例子是相关的,甚至在几年后也非常有用。