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

在php中从复选框或单选按钮检索值时出现问题,php,post,checkbox,radio,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 fo

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

复选框部分的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>
它打印:

array(2) [0]=> string(0) "" [1]=> string(0) ""
显然,它检测到三个框中有两个被勾选,但它没有传递值。如果HTML以所有复选框的checked属性开头,那么它将正确地通过复选框值发送

类似地,对于单选按钮,除了默认值之外,我无法获得要通过的值。如果用户更改默认值,则该参数存在,但该值为空字符串


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

我不能用这个简单的测试来复制你的行为

<?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>
所以,也许你的问题中没有包括其他一些问题

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

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

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

它对我来说就像预期的那样工作,复制粘贴就是这样。
如果你像这样孤立这一点,它真的不适合你吗

<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);
?>

跑
游
自行车

我怀疑您并没有孤立这个问题(就像我在这段代码中所做的那样),它位于其他地方。那是对的吗?

遗憾的是,这个问题与我的想法无关!由于Peter和Rubin的建议,我能够确定在表单发送到服务器之前我(很久以前)编写的验证表单的javascript在获得焦点时错误地清空了复选框和单选按钮的值。一个简单的测试来确认输入字段是一个文本区域,阻止了这种情况的发生

你能显示你的表单的HTML吗?你有没有使用Firebug/HTTPFox之类的东西来查看浏览器发送的内容?可能有一些客户端javascript破坏了表单,或者有一些库/插件在服务器端执行相同的操作。我使用Firebug,但我不知道如何找出浏览器发送的内容。我不想问这个问题,但你能给我指出正确的部分吗?谢谢。它在网络面板下面。您将看到列出的单个请求。单击POST请求旁边的加号,然后单击POST Tabi Peter,感谢您的指导。了解网络面板会很方便,但在本例中,它只是确认了var_转储已经显示的内容,即数组值为空。尽管如此,它还是可以避免我添加调试代码!感谢您的快速反馈。它把我引向了正确的方向。我没有试着去隔离它,也没过多久我就发现我有一些javascript,在我尝试隔离它时,它错误地将值清空了。我恐怕没有Peter那么快^^
Content-Type: application/x-www-form-urlencoded 
Content-Length: 39

activity%5B%5D=swim&activity%5B%5D=bike
<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);
?>