从php中的复选框或单选按钮检索值时出现问题

时间:2011-01-11 18:32:07

标签: php post checkbox radio

我有一个表单,其中包含一部分复选框和另一部分单选按钮。我对两者都有类似的问题。

复选框部分的html如下所示:

<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label>
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label>
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label>

当我提交表单时,似乎没有正确定义activity数组。

当我处理表单时,假设前两个复选框被勾选,当php执行时

$activity = $_POST['activity'];
var_dump($activity);

打印:

array(2) [0]=> string(0) "" [1]=> string(0) ""

显然,它检测到三个方框中的两个被勾选,但它没有通过这些值。如果HTML以所有复选框的checked属性开头,则它会通过复选框值正确发送。

同样,使用单选按钮,我无法获得除默认值以外的值。如果用户更改了默认值,则参数存在,但该值为空字符串。

我的理解是,数组应该包含为每个勾选的框定义的值,无论在加载表单时是否勾选了该框。我做错了什么?

3 个答案:

答案 0 :(得分:1)

我无法通过这个简单的测试重复您的行为

<?php

if ( isset( $_POST['activity'] ) )
{
  $activity = $_POST['activity'];
  var_dump($activity);
}

?>

<form method="post">
  <input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label>
  <input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label>
  <input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label>
  <input type="submit" value="go" />
</form>

我点击了“游泳”和“自行车”,我的输出看起来像这样

array(2) { [0]=> string(4) "swim" [1]=> string(4) "bike" } 

所以也许还有其他问题,你没有提到你的问题。

即使我用Firebug检查请求,我也会看到预期的输出

Content-Type: application/x-www-form-urlencoded 
Content-Length: 39

activity%5B%5D=swim&activity%5B%5D=bike

答案 1 :(得分:0)

它按预期的方式工作,像那样复制粘贴。
它是否真的不适合你,如果你这样孤立:

<form action="test.php" method="post">
<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label>
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label>
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label>
<input type="submit">
</form>
<?php
$activity = $_POST['activity'];
var_dump($activity);
?>

我怀疑你没有发现这个问题(就像我在这个片段中所做的那样)并且它位于其他地方。那可能是对的吗?

答案 2 :(得分:0)

可悲的是,问题与我的想法无关!感谢彼得和鲁宾的建议,我能够确定我之前写过的一些javascript(很久以前)在发送到服务器之前验证表单是错误的消隐了复选框和单选按钮的值焦点。确认输入字段的简单测试是文本区域停止发生!