Php 复选框“;勾选“-当数组为空时,值跳升到较早的数组值

Php 复选框“;勾选“-当数组为空时,值跳升到较早的数组值,php,arrays,checkbox,Php,Arrays,Checkbox,我有一个复选框数组name=“box[]”。通过PHP,我通过回显“checked='checked'”(如果它们是在提交事件中检查的),确保它们在提交后被检查 现在,如果我选中第三个复选框,值会在提交后跳到第一个复选框,因为在第三个复选框之前,数组是空的。同样,如果我选中第二个和第三个复选框,它们会在提交后跳转到第一个和第二个。这是我正在使用的代码: <form method="post"> <input type="checkbox" name="box[]" va

我有一个复选框数组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>


这不起作用,因为只有那些选中的复选框被放入
$box
数组中

使用不同的名称或不同的值来区分它们

考虑一下:选中第二个和第三个复选框。在PHP中,您将收到:

$_POST['box'] = array(0 => "true", 1 => "true");

您无法知道选中了哪些复选框,除非所有复选框都已选中。

POST值应以isset开头,然后!empty($array)确定POST值是否为数组,并在未选择任何选项时防止出现空数组错误

&&除此之外,还可以使用is_数组($_POST['box'])!空($\u POST['box'])并检查数组的有效性

以下示例中使用了一个变量作为值字段,因为在使用foreach循环时,它可以更容易地定义和填充输入,并且如果需要,可以作为预防措施对其进行消毒

对$u 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'"; ?>>

谢谢你的回答,芬顿。我在我的问题中添加了工作代码。您也可以使用name=“checkbox1”、name=“checkbox2”等。不过,我需要它们位于一个数组中,以便我可以使用for循环检查它们。谢谢你的帮助。提醒一下:如果你自己找到了解决方案,把它们作为你自己问题的答案贴出来并接受通常是个好主意。
<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'"; ?>>
<input type="checkbox" name="box[]" value="<?php echo $unique_id; ?>" <?php my_function(); ?>>