将复选框状态传递给PHP

将复选框状态传递给PHP,php,html,Php,Html,这很好,但是当您单击submit并勾选复选框时,它会将隐藏值和原始复选框值传递给php中的$\u POST变量,这可以避免吗 我在那里有一个隐藏值,因此未勾选的复选框将被传递到$\u POST变量以及勾选的变量。否,它将传递所有表单数据,不管它是什么。正确的方法不是通过隐藏字段设置复选框,而是使用其实际状态设置复选框 我是说。。。为什么要首先添加隐藏字段 您的PHP接收到两个名为check_box_1的字段,上次我检查时,无法保证参数将以与发送它们完全相同的顺序读取到请求哈希中,因此,无法判断哪

这很好,但是当您单击submit并勾选复选框时,它会将隐藏值和原始复选框值传递给php中的$\u POST变量,这可以避免吗


我在那里有一个隐藏值,因此未勾选的复选框将被传递到$\u POST变量以及勾选的变量。

否,它将传递所有表单数据,不管它是什么。正确的方法不是通过隐藏字段设置复选框,而是使用其实际状态设置复选框

我是说。。。为什么要首先添加隐藏字段

您的PHP接收到两个名为check_box_1的字段,上次我检查时,无法保证参数将以与发送它们完全相同的顺序读取到请求哈希中,因此,无法判断哪个字段将最后到达(即设置其值的字段)。所以这不是解决任何问题的正确方法

顺便说一句,欢迎来到Stack!如果你觉得答案有用或有帮助,一定要把它们标为正确答案并投票。

这很正常

它们必须同时为
type=“checkbox”
才能只传递1个值

如果您希望在任何情况下仅获得1,您可以执行以下操作:

<input type="hidden" name="check_box_1" value="0" />
<input type="checkbox" name="check_box_1" value="1" />

您不需要隐藏字段。事实上,您不应该信任最初发送的任何表单字段。这意味着,您无法编写代码来接收已发送字段并信任它们发送正确的数据(我假设您现在这样做了)


您应该做的是处理您希望得到的所有字段。这样,如果您没有获得复选框值,您仍然可以像取消复选框一样处理它。然后,您还可以获得一个附加的固有特性,即丢弃您一开始并不期望的表单数据。

确保第一个输入字段的类型为Checkbox,否则它的行为将与Checkbox不同

<input type="checkbox" style="display:none;" name="check_box_1" value="0">

更好的方法是删除隐藏字段,只需在PHP中进行检查:

<input type="checkbox" name="check_box_0" value="0" />
<input type="checkbox" name="check_box_1" value="1" />

到目前为止,您的代码一切正常

我假设您正在创建隐藏字段,以便在未选中复选框时将0传递给服务器。问题是,选中该复选框时,它们都会通过

正如Death所说,您应该使用一个复选框,然后检查值是否已发送到服务器。这就是复选框的工作原理

如果您想设置默认值,那么必须根据复选框是否有值来处理服务器端的所有设置

例如:

if ($_POST['check_box_1']=='1') { /*Do something for ticked*/ }
else { /*Do something for unticked*/ }

有什么原因不能使用单选按钮代替复选框吗?使用组合框代替,因为我需要一种方法来记录true和false状态,因为在处理表单时,未选中的复选框不会发送到$\u POST变量。基本上,我试图创建的是一个功能,如果已经勾选了复选框,并且用户“取消勾选”,则数据库中的字段设置为false,反之亦然(如果反过来),未勾选的复选框仍然发送到PHP,它们只是作为“false”到达,因此,也许你认为它们是未定义的,因为你没有找到正确的方法?当我用一系列复选框(例如name=checkbox[])发布$_帖子时,出现的唯一复选框是那些复选框被勾选的复选框。其余的不在列表中。是的,因为名称需要唯一!type=复选框您可以拥有任意数量的复选框,但名称必须是checkbox1、checkbox2等。不应该复选框[]通过如下方式显示数组使名称统一:[checkbox]=>array([0]=>True[1]=>True[2]=>True)谢谢您的问候。)是的,这会起作用,但是如果你有一个复选框数组“name=checkbox[]”,那么那些没有被勾选的将不在$u POST数组中。理想情况下,如果未勾选的复选框以我选择的定义值出现在数组中,那么当通过foreach操作数据时,很容易确定哪个复选框属于哪个复选框。正如我在下面所说的,它们都将出现在数组中,只要你给它们命名一个唯一的名称。未选中的将作为false出现在数组中。谢谢,我使用了一个组合框,使生活变得更加轻松。
$myValue = "";
if(isset($_POST['check_box_1']))
{
    $myValue=$_POST['check_box_1'];
}
else
{
    $myValue="0";
}