【问题标题】:PHP Multiple Checkbox ArrayPHP 多复选框数组
【发布时间】:2012-12-24 23:06:38
【问题描述】:

我在这里查看了一些示例,但其中很多对于我对 PHP 的掌握来说太高级了,或者他们的示例对于他们自己的项目来说太具体了。我目前正在努力处理 PHP 表单的一个非常基本的部分。

我正在尝试创建一个带有几个复选框的表单,每个复选框都分配了一个不同的值,我希望将它们发送到一个变量(数组?),我可以稍后回显/使用,在我的情况下,我将发送检查电子邮件中的值。

到目前为止,我已经尝试了一些变化,但最接近它的是这个......

<form method='post' id='userform' action='thisform.php'>
<tr>
    <td>Trouble Type</td>
    <td>
    <input type='checkbox' name='checkboxvar' value='Option One'>1<br>
    <input type='checkbox' name='checkboxvar' value='Option Two'>2<br>
    <input type='checkbox' name='checkboxvar' value='Option Three'>3
    </td>
</tr>
</table>
<input type='submit' class='buttons'>
</form>

<?php
$checkboxvar[] = $_REQUEST['checkboxvar'];
?>

我会将 $checkboxvar[] 回显到我的电子邮件中。 我完全错了吗?我的另一个想法是使用大量的 if 语句。

【问题讨论】:

    标签: php arrays variables checkbox


    【解决方案1】:
    <form method='post' id='userform' action='thisform.php'> <tr>
        <td>Trouble Type</td>
        <td>
        <input type='checkbox' name='checkboxvar[]' value='Option One'>1<br>
        <input type='checkbox' name='checkboxvar[]' value='Option Two'>2<br>
        <input type='checkbox' name='checkboxvar[]' value='Option Three'>3
        </td> </tr> </table> <input type='submit' class='buttons'> </form>
    
    <?php 
    if (isset($_POST['checkboxvar'])) 
    {
        print_r($_POST['checkboxvar']); 
    }
    ?>
    

    您将表单名称作为数组传递,然后您可以使用 var 本身访问所有选中的框,该 var 本身就是一个数组。

    要将选中的选项回显到您的电子邮件中,您可以这样做:

    echo implode(',', $_POST['checkboxvar']); // change the comma to whatever separator you want
    

    请记住,您应该始终根据需要清理您的输入。

    据此记录,官方文档存在:http://php.net/manual/en/faq.html.php#faq.html.arrays

    【讨论】:

    • 我想我明白了,但我真的很陌生,无法理解如何使用implode(',' $_POST['checkboxvar']); 将其放入我的电子邮件中。目前我有$message = "Message blah blah $array. \n";,但它似乎不喜欢它。
    • @DarekGajda 请记住请清理您的输入以防止邮件头注入攻击。基本上做$array = str_replace(array("\r", "\n"), ' ', $array); 去掉换行符和回车符。
    • 如果我们也想获取和发送标签内的文本怎么办?像这样 1,2,3。
    【解决方案2】:

    在输入标签的属性名称中添加[]

     <form action="" name="frm" method="post">
    <input type="checkbox" name="hobby[]" value="coding">  coding &nbsp
    <input type="checkbox" name="hobby[]" value="database">  database &nbsp
    <input type="checkbox" name="hobby[]" value="software engineer">  soft Engineering <br>
    <input type="submit" name="submit" value="submit"> 
    </form>
    

    对于 PHP 代码:

    <?php
     if(isset($_POST['submit']){
       $hobby = $_POST['hobby'];
    
       foreach ($hobby as $hobys=>$value) {
                 echo "Hobby : ".$value."<br />";
            }
    }
    ?>
    

    【讨论】:

    • 他对 foreach 语句的包含对我的情况非常有帮助。谢谢,罗内。
    • @Sébastien 如果 OP 接受了答案,任何人都可以添加答案,但这并不意味着它是最佳答案;
    【解决方案3】:

    试试这个,通过 for 循环

    <form method="post">
    <?php
    for ($i=1; $i <5 ; $i++) 
    { 
        echo'<input type="checkbox" value="'.$i.'" name="checkbox[]"/>';
    } 
    ?>
    <input type="submit" name="submit" class="form-control" value="Submit">  
    </form>
    
    <?php 
    if(isset($_POST['submit']))
    {
        $check=implode(", ", $_POST['checkbox']);
        print_r($check);
    }     
    ?>
    

    【讨论】:

      【解决方案4】:

      您需要使用方括号表示法将值作为数组发送:

      <form method='post' id='userform' action='thisform.php'>
      <tr>
          <td>Trouble Type</td>
          <td>
          <input type='checkbox' name='checkboxvar[]' value='Option One'>1<br>
          <input type='checkbox' name='checkboxvar[]' value='Option Two'>2<br>
          <input type='checkbox' name='checkboxvar[]' value='Option Three'>3
          </td>
      </tr>
      </table>
      <input type='submit' class='buttons'>
      </form>
      

      但请注意,只会发送仅选中复选框的值。

      【讨论】:

      • 当我尝试调用 checkboxvar[] 时,它只返回“Array”而不是分配给复选框的值。
      • @DarekGajda 请参阅我关于如何回应它的答案。
      【解决方案5】:

      还请记住,您可以像这样将自定义索引包含到发送到服务器的数组中

      <form method='post' id='userform' action='thisform.php'>
      <tr>
          <td>Trouble Type</td>
          <td>
          <input type='checkbox' name='checkboxvar[4]' value='Option One'>4<br>
          <input type='checkbox' name='checkboxvar[6]' value='Option Two'>6<br>
          <input type='checkbox' name='checkboxvar[9]' value='Option Three'>9
          </td>
      </tr>
      <input type='submit' class='buttons'>
      </form>
      

      当您想使用服务器数组accounts 中单个对象的id 将数据发送回服务器并在服务器上识别相同时,这特别有用(例如) /p>

      <form method='post' id='userform' action='thisform.php'>
      <tr>
          <td>Trouble Type</td>
          <td>
          <?php foreach($accounts as $account) { ?>
              <input type='checkbox' name='accounts[<?php echo $account->id ?>]' value='<?php echo $account->name ?>'>
              <?php echo $account->name ?>
              <br>
          <?php } ?>
          </td>
      </tr>
      <input type='submit' class='buttons'>
      </form>
      
      <?php 
      if (isset($_POST['accounts'])) 
      {
          print_r($_POST['accounts']); 
      }
      ?>
      

      【讨论】:

        【解决方案6】:
        if (isset($_POST['submit'])) {
        
        for($i = 0; $i<= 3; $i++){
        
            if(isset($_POST['books'][$i]))
        
                $book .= ' '.$_POST['books'][$i];
        }
        

        【讨论】:

        • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
        猜你喜欢
        • 2020-06-29
        • 2011-09-28
        • 1970-01-01
        • 2017-05-09
        • 1970-01-01
        • 2018-11-20
        • 1970-01-01
        • 2019-05-29
        相关资源
        最近更新 更多