【问题标题】:Get $_POST from multiple checkboxes从多个复选框中获取 $_POST
【发布时间】:2011-06-27 04:53:13
【问题描述】:

我有一个表格,里面有多个复选框(每个都有代码):

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">

$row['Report ID'] 是数据库中的主键,因此每个值都不同。

我如何知道哪些复选框已被选中? (可能有多个)

这是一个收件箱系统,我在下方有一个按钮,我希望(单击时)删除选中复选框的所有消息(ID 为:$row['Report ID'])。

【问题讨论】:

    标签: php html forms checkbox


    【解决方案1】:

    将表单中的名称设置为check_list[],您将能够以数组的形式访问所有复选框($_POST['check_list'][])。

    根据要求,这是一个小样本:

    <form action="test.php" method="post">
        <input type="checkbox" name="check_list[]" value="value 1">
        <input type="checkbox" name="check_list[]" value="value 2">
        <input type="checkbox" name="check_list[]" value="value 3">
        <input type="checkbox" name="check_list[]" value="value 4">
        <input type="checkbox" name="check_list[]" value="value 5">
        <input type="submit" />
    </form>
    <?php
    if(!empty($_POST['check_list'])) {
        foreach($_POST['check_list'] as $check) {
                echo $check; //echoes the value set in the HTML form for each checked checkbox.
                             //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                             //in your case, it would echo whatever $row['Report ID'] is equivalent to.
        }
    }
    ?>
    

    【讨论】:

    • 你能给我一个 echo(ing) one check_list[] 复选框的例子吗? (两个被选中的情况会相似吗?)谢谢。
    • 我还应该指定如果没有在 HTML 中设置值,$check 将等于 on
    • if($_POST) - 没用,$_POST 永远是真的。您应该检查 !empty($_POST['check_list']) 是否改为。
    • @MārtiņšBriedis 如果数组索引不存在,则会导致数组索引越界。更好的检查是array_key_exists('check_list', $_POST) &amp;&amp; !empty($_POST['check_list'])
    • @Tyzoid empty() 不会导致此错误。来自手册:empty() does not generate a warning if the variable does not exist.
    【解决方案2】:

    编辑以反映@Marc 在下面的评论中所说的话。

    您可以对所有发布的值进行循环。

    HTML:

    <input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
    <input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
    <input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
    

    PHP:

    foreach($_POST['check_list'] as $item){
      // query to delete where item = $item
    }
    

    【讨论】:

    • 奇怪的错误:警告:在第 30 行的 /home1/mountgam/public_html/zombiewrath/reports.php 中为 foreach() 提供的参数无效 =/
    • 只有在字段定义中使用[] 语法时才会起作用,这使得 PHP 将 $_POST 值创建为数组。否则它将是一个非数组值,导致 foreach() 循环崩溃。
    • 我都试过了,但好的,我会再试一次(表单/名称中没有 [])
    【解决方案3】:

    您必须相应地命名您的复选框:

    <input type="checkbox" name="check_list[]" value="…" />
    

    然后您可以使用

    访问所有选中的复选框
    // loop over checked checkboxes
    foreach($_POST['check_list'] as $checkbox) {
       // do something
    }
    

    ps。确保正确转义您的输出 (htmlspecialchars())

    【讨论】:

      【解决方案4】:
      <input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">
      

      发完后,你可以循环浏览它们:

         if(!empty($_POST['check_list'])){
           foreach($_POST['check_list'] as $report_id){
              echo "$report_id was checked! ";
           }
         }
      

      或者获取上一页发布的某个值:

      if(isset($_POST['check_list'][$report_id])){
        echo $report_id . " was checked!<br/>";
      }
      

      【讨论】:

        【解决方案5】:

        这很简单。注意,你会马上得到它! :)

        您将创建一个 html 数组,然后将其发送到 php 数组。 您的 html 代码将如下所示:

        <input type="checkbox" name="check_list[1]" alt="Checkbox" value="checked">
        <input type="checkbox" name="check_list[2]" alt="Checkbox" value="checked">
        <input type="checkbox" name="check_list[3]" alt="Checkbox" value="checked">
        

        [1] [2] [3] 是您消息的 IDs,这意味着您将 echo 您的 $row['Report ID'] 代替它们。

        然后,当您提交表单时,您的 PHP 数组将如下所示:

        print_r($check_list)

        [1] => checked [3] => checked

        取决于哪些被检查,哪些没有。

        我相信你可以从现在开始。

        【讨论】:

        • 请记住check_list[] 将以check_list[0] 开头,而不是check_list[1]
        • value="checked" 适得其反。如果未指定任何值,您将获得“开启”。在 value 属性中指定要提交的值的好处是,您可以发送几乎任意数据,而不必成为 PHP 数组索引。使用 foreach 迭代数组值也比迭代键更容易。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 1970-01-01
        • 2011-02-06
        • 2021-11-21
        相关资源
        最近更新 更多