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

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

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

4

6 回答 6

2

更好的方法是删除隐藏字段,并简单地在 PHP 中进行检查:

if ($_POST['check_box_1']=='1') { /*Do something for ticked*/ }
else { /*Do something for unticked*/ }
于 2012-05-26T16:40:48.040 回答
1

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

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

于 2012-05-26T16:38:23.703 回答
0

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

我的意思是......你为什么要添加隐藏字段开始?

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

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

于 2012-05-26T16:37:48.587 回答
0

这很正常。

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

如果你想在任何情况下只得到 1 ,你可以这样做:

<input type="checkbox" style="display:none;" name="check_box_1" value="0">
于 2012-05-26T16:37:55.797 回答
0

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

<input type="checkbox" name="check_box_0" value="0" />
<input type="checkbox" name="check_box_1" value="1" />
于 2012-05-26T16:38:39.320 回答
0

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

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

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

如果你想有一个默认设置,那么你必须根据天气处理服务器端的所有内容,复选框有一个值。

例如:

$myValue = "";
if(isset($_POST['check_box_1']))
{
    $myValue=$_POST['check_box_1'];
}
else
{
    $myValue="0";
}
于 2012-05-26T20:53:06.903 回答