0

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

复选框部分的 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>

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

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

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

它打印:

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

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

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

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

4

3 回答 3

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
于 2011-01-11T18:42:34.533 回答
0

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

于 2011-01-11T21:41:08.893 回答
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);
?>

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

于 2011-01-11T18:43:29.777 回答