【问题标题】:Problem retrieving values from checkboxes or radio buttons in php从 php 中的复选框或单选按钮中检索值的问题
【发布时间】:2011-06-07 08:53:18
【问题描述】:

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

复选框部分的 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 以所有复选框的选中属性开头,则它会正确发送复选框值。

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

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

【问题讨论】:

  • 你能显示你的表单的 HTML 吗?
  • 您是否使用过 Firebug/HTTPFox 之类的工具来查看浏览器发送的内容?可能有一些客户端 javascript 修改表单,或者一些库/插件在执行相同的服务器端。
  • 我使用 Firebug,但我不知道如何找出浏览器发送的内容。我不想问这个,但你能指出我正确的部分吗?谢谢。
  • 它在 Net 面板下。您会看到列出的各个请求。单击 POST 请求旁边的加号,然后单击 Post 选项卡
  • 嗨彼得,感谢您的指导。了解网络面板会派上用场,但在这种情况下,它只是确认了 var_dump 已经显示的内容,即数组值是空白的。不过,它会让我免于添加调试代码!

标签: php post checkbox radio


【解决方案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

【讨论】:

    【解决方案2】:

    它按我的预期工作,就像那样复制粘贴。
    如果您像这样隔离这一点,它真的不适合您吗:

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

    我怀疑你没有隔离这个问题(就像我在这个 sn-p 中所做的那样),它存在于其他地方。是这样吗?

    【讨论】:

    • 感谢您的快速反馈。它引导我朝着正确的方向前进。我没有尝试隔离它,也没有花很长时间发现我有一些 javascript 在我尝试隔离它时错误地清除了该值。
    • 恐怕我没有彼得那么快^^
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      相关资源
      最近更新 更多