【问题标题】:POST checkbox form via PHP通过 PHP POST 复选框表单
【发布时间】:2011-11-12 11:55:38
【问题描述】:

我的表单既有文本区域也有复选框。当我POST 结果时,即使选择了多个复选框值,也只会发布一个复选框值。

这是我的表格:

<form action="search.php">
<input type="text" name="term">

<input type="checkbox" name="filter" value="subject"> Subject
<input type="checkbox" name="filter" value="course"> Course
<input type="checkbox" name="filter" value="professor"> Professor

<input type="submit" name="submit" value="Go" />

这就是我echo 的形式(search.php):

<?php
$term = $_GET['term'];
$filter = $_GET['filter'];
echo "$term $filter";
?>

【问题讨论】:

  • 为什么不回答你的建议@realshadow?

标签: php forms


【解决方案1】:

试试这个:

<input type="checkbox" name="filter[]" value="subject" /> Subject
<input type="checkbox" name="filter[]" value="course" /> Course
<input type="checkbox" name="filter[]" value="course" /> Professor

在您的 search.php 脚本中,提交的“过滤器”变量将被视为一个数组。

更多信息请看这里:http://us2.php.net/manual/en/faq.html.php#faq.html.arrays

另一个类似的问题,我认为是:HTML input arrays

【讨论】:

    【解决方案2】:

    问题在于您为每个复选框分配的名称,当前发生的情况是 PHP 正在读取第一个复选框并将其值分配给变量,正在读取下一个过滤器复选框但随后覆盖当前分配的值变量,然后再次使用第三个复选框。所以你永远只会得到最后一个勾选的复选框作为 $filter 变量的值。

    您需要为每个复选框单独分配不同的名称,例如:

    <form action="search.php">
    <input type="text" name="term" />
    
    <input type="checkbox" name="filter1" value="subject" /> Subject
    <input type="checkbox" name="filter2" value="course" /> Course
    <input type="checkbox" name="filter3" value="professor" /> Professor
    
    <input type="submit" name="submit" value="Go" />
    

    然后是PHP:

    <?php
    $term = $_GET['term'];
    $filter1 = $_GET['filter1'];
    $filter2 = $_GET['filter2'];
    $filter3 = $_GET['filter3'];
    echo "$term $filter1 $filter2 $filter3";
    ?>
    

    您的最后一个复选框的值也与第二个相同,因此我将值从 course 更改为 Professor,如果这实际上是错误的,您显然可以将其更改回来。

    另一个注意事项,使用方法 POST 而不是 GET 也可能是一个好主意,因为它更安全,但是,您可能有理由使用 GET,但这只是一个提示:)

    【讨论】:

      【解决方案3】:

      我认为你有 3 个输入框命名为相同的“过滤器”,哪个是 php 预期得到的?

      对于单选按钮,我们使用数组过滤器[],所以如果你真的想要复选框并且你真的希望它们都具有相同的名称,那么试试

      <input type="checkbox" name="filter[]" value="subject"/> Subject
      <input type="checkbox" name="filter[]" value="course"/> Course
      <input type="checkbox" name="filter[]" value="course"/> Professor
      

      然后在你的 php 中你将得到一个数组的过滤器。

      【讨论】:

        【解决方案4】:

        可能是因为您没有关闭输入标签,而是将它们全部视为一个标签?

        【讨论】:

        • 不,这不是问题所在。复选框的名称都相同。正如 realshadow 指出的那样,它应该是 filter[]
        【解决方案5】:

        您还可以为每个复选框使用不同的名称,例如 filter_1、filter_2 等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-23
          • 2014-10-06
          • 1970-01-01
          • 1970-01-01
          • 2013-03-09
          • 1970-01-01
          • 1970-01-01
          • 2020-03-30
          相关资源
          最近更新 更多