将复选框状态传递给 PHP


Passing checkbox state to PHP

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

这工作正常,但是当您单击提交并勾选复选框时,它会将隐藏值和原始复选框值传递给 php 中的 $_POST 变量,可以避免吗?

我在那里有隐藏值,因此未选中的复选框将传递给 $_POST 变量以及选中

的变量。

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

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

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

您应该做的是处理您希望获得的所有字段。这样,如果您没有获得复选框值,您仍然可以像未选中一样处理它。然后,您还可以获得附加的固有功能,即丢弃您首先不期望的表单数据。

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

我的意思是。。。为什么要首先添加隐藏字段?

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

欢迎来到堆栈,顺便说一句!如果您发现答案有用或有用,请确保将其标记为正确并投票。

很正常。

它们必须同时type="checkbox"才能仅传递 1 个值。

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

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

确保第一个输入字段的类型为 Checkbox,否则它的行为将不像复选框。

<input type="checkbox" name="check_box_0" value="0" />
<input type="checkbox" name="check_box_1" value="1" />
到目前为止,

您的代码一切正常。

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

正如Death所说,您应该这样做的方法是使用单个复选框,然后检查该值是否已发送到服务器。这就是复选框的工作方式。

如果你想有一个默认设置,那么你将不得不根据天气在服务器端处理所有这些,复选框有一个值。

例如:

$myValue = "";
if(isset($_POST['check_box_1']))
{
    $myValue=$_POST['check_box_1'];
}
else
{
    $myValue="0";
}