【问题标题】:Getting checkbox values on submit在提交时获取复选框值
【发布时间】:2013-08-27 15:15:47
【问题描述】:

我有 6 个选项,我想获取选中的值以将它们存储在第二页的变量中。我该如何继续这样做?

<form action="third.php" method="get">
    <!-- Choices -->
    Red     <input type="checkbox" name="color[]" id="color" value="Red">
    Green   <input type="checkbox" name="color[]" id="color" value="Green">
    Blue    <input type="checkbox" name="color[]" id="color" value="Blue">
    Cyan    <input type="checkbox" name="color[]" id="color" value="Cyan">
    Magenta <input type="checkbox" name="color[]" id="color" value="Magenta">
    Yellow  <input type="checkbox" name="color[]" id="color" value="Yellow">
    Black   <input type="checkbox" name="color[]" id="color" value="Black">
    <!-- Submit -->
    <input type="submit" value="submit">
</form>

还有third.php页面:

$color = $_GET['color'];

echo 'The color is '.$color;

如果我删除 [],我会得到颜色,当我像 color[] 那样删除时,我会收到一条通知:

数组到字符串的转换

我想要的是选中复选框的值,以便我可以将其存储在变量中。

【问题讨论】:

  • @MadaraUchiha 谢谢,我编辑了问题。
  • 不是 action="get" 它的方法="get" !
  • @AmmarKhan 看看下面我的回答,你可以使用一些额外的选项。
  • 我建议使用post 方法而不是get 进行表单提交。
  • 为什么在表单中使用多个ids?

标签: php forms


【解决方案1】:

(不是action="get"action="post" 而是method="get"method="post"

尝试使用 post 方法:

<form action="third.php" method="POST">
    Red<input type="checkbox" name="color[]" id="color" value="red">
    Green<input type="checkbox" name="color[]" id="color" value="green">
    Blue<input type="checkbox" name="color[]" id="color" value="blue">
    Cyan<input type="checkbox" name="color[]" id="color" value="cyan">
    Magenta<input type="checkbox" name="color[]" id="color" value="Magenta">
    Yellow<input type="checkbox" name="color[]" id="color" value="yellow">
    Black<input type="checkbox" name="color[]" id="color" value="black">
    <input type="submit" value="submit">
</form>

在third.php中

或者对于特定领域,您可以在其中获得价值:

$_POST['color'][0] //for RED
$_POST['color'][1] // for GREEN

【讨论】:

  • 啊,这就是 PHP 开始出现问题的时候。 $_POST 是一个数组,在查看解决方案时,我想,“$_POST['color'] 也是它自己的数组,不是吗?”
【解决方案2】:

我最喜欢的一个好方法是使用foreach,它会输出您选择的每种颜色,并在屏幕上显示在一个下方。

在使用复选框时,您别无选择,只能使用 foreach,这就是为什么您只能从数组中返回一个值。

这是一个使用$_GET 的示例。但是,您可以使用 $_POST 并且需要使两个文件中的两个指令都匹配才能正常工作。

###HTML 表单

<form action="third.php" method="get">
    Red<input type="checkbox" name="color[]" value="red">
    Green<input type="checkbox" name="color[]" value="green">
    Blue<input type="checkbox" name="color[]" value="blue">
    Cyan<input type="checkbox" name="color[]" value="cyan">
    Magenta<input type="checkbox" name="color[]" value="Magenta">
    Yellow<input type="checkbox" name="color[]" value="yellow">
    Black<input type="checkbox" name="color[]" value="black">
    <input type="submit" value="submit">
</form>

###PHP(使用 $_GET)使用 third.php 作为您的处理程序

<?php

$name = $_GET['color'];

// optional
// echo "You chose the following color(s): <br>";

foreach ($name as $color){ 
    echo $color."<br />";
}

?>

假设选择了红色、绿色、蓝色和青色作为颜色,将如下所示:

红色
绿色
蓝色
青色


##选项#2

您还可以检查是否选择了颜色。如果没有选择,则会出现单独的消息。

<?php

$name = $_GET['color'];

if (isset($_GET['color'])) {
    echo "You chose the following color(s): <br>";

    foreach ($name as $color){
        echo $color."<br />";
    }
} else {
    echo "You did not choose a color.";
}

?>

##其他选项: 以列表形式显示:(&lt;ul&gt;&lt;/ul&gt; 可以替换为 &lt;ol&gt;&lt;/ol&gt;

<?php

$name = $_GET['color'];

if (isset($_GET['color'])) {
    echo "You chose the following color(s): <br>";
    echo "<ul>";
    foreach ($name as $color){
        echo "<li>" .$color."</li>";
    }
    echo "</ul>";
} else {
    echo "You did not choose a color.";
}

?>

【讨论】:

  • 我知道这是一件旧作品,但我对所有那些 ids 都是彩色的感到有些不安。我一直认为这是一个很大的禁忌 - 或者对于收音机或复选框组来说是否可以? names 全部相同是最简单的解决方案,但ids 是操作 DOM 以进行预设表单等的最安全方法。当我看到相同的 id 时,我只听到人们在坟墓里翻滚!
  • @BeNice 我明白你在说什么,但是“id”不能单独在需要名称属性的 PHP 中传递。我倾向于认为为此需要 JS。
  • 哦,我错过了重要的词 - jQuery/JavaScript。我通常会做一点点 jQuery,然后用它来勾选相关的框。 ID 很重要,因为它们在任何选择器中具有最强的“权重”是 JavaScript。无论如何,这个答案已经坐了 6 年没有人抱怨,所以我会闭嘴。顺便说一句,答案很好。
  • @BeNice 我同意。您的评论很有根据,谢谢 :) 和谢谢。
【解决方案3】:

我的建议是,使用 post 比 get 更好。这里是 post VS get 之间的一些区别

关于 GET 请求的一些说明:

  1. GET 请求可以被缓存
  2. GET 请求保留在浏览器历史记录中
  3. GET 请求可以添加书签
  4. 在处理敏感数据时绝不应使用 GET 请求
  5. GET 请求有长度限制
  6. GET 请求只能用于检索数据

关于 POST 请求的一些说明:

  1. POST 请求永远不会被缓存
  2. POST 请求不会保留在浏览器历史记录中
  3. 无法为 POST 请求添加书签
  4. POST 请求对数据长度没有限制

HTML 代码

            <html>
    <head></head>
    <body>
    <form action="output.php" method="post">
    Red<input type="checkbox" name="color[]" id="color" value="red">
    Green<input type="checkbox" name="color[]" id="color" value="green">
    Blue<input type="checkbox" name="color[]" id="color" value="blue">
    Cyan<input type="checkbox" name="color[]" id="color" value="cyan">
    Magenta<input type="checkbox" name="color[]" id="color" value="Magenta">
    Yellow<input type="checkbox" name="color[]" id="color" value="yellow">
    Black<input type="checkbox" name="color[]" id="color" value="black">
    <input type="submit" value="submit">
    </form>
    <body>
    </html>

PHP 代码

    <?php


    if(isset($_POST['color'])) {
    $name = $_POST['color'];

    echo "You chose the following color(s): <br>";
    foreach ($name as $color){
    echo $color."<br />";
    }} // end brace for if(isset

    else {

    echo "You did not choose a color.";

    }

    ?>

【讨论】:

  • 什么是二维数组? GET 是否支持这样的东西:&lt;input type="checkbox" name="color[categoryA][]" id="color" value="red"&gt; &lt;input type="checkbox" name="color[categoryA][]" id="color" value="green"&gt; 这将与 mehtod=POST 一起使用
【解决方案4】:

仅用于打印,您可以使用如下:

print_r($_GET['color']);

var_dump($_GET['color']);

【讨论】:

    【解决方案5】:

    我认为 $_POST['color'] 的值应该在检查其是否设置后才能读取。

    <?php
    
    
        if(isset($_POST['color'])) {
          $name = $_POST['color'];  
    
        echo "You chose the following color(s): <br>";
        foreach ($name as $color){
       echo $color."<br />";
      }} // end brace for if(isset
    
    else {
    
    echo "You did not choose a color.";
    
    }
    
    ?>
    

    【讨论】:

      【解决方案6】:

      也许更好的方法是像这样使用 php 函数in_array()

      $style='V';//can be 'V'ertical or 'H'orizontal
      $lineBreak=($style=='V')?'<br>':'';
      $name='colors';//the name of your options
      $Legent="Select your $name";//dress it up in a nice fieldset with a ledgent
      $options=array('red','green','blue','orange','yellow','white','black');
      $boxes='';//innitiate the list of tickboxes to be generated
      if(isset($_REQUEST["$name"])){ 
      //we shall use $_REQUEST but $_POST would be better
         $Checked=$_REQUEST["$name"];
      }else{
         $Checked=array();
      }
      foreach($options as $option){
      $checkmark=(in_array($option,$Checked))?'checked':'';
      $nameAsArray=$name.'[]';//we would like the returned data to be in an array so we end with []
      $boxes.=($style=='V')?"<span class='label2' align='right'><b>$option : </b></span>":"<b>$option </b>";
      $boxes.="<input style='width:2em;' type='checkbox' name='$nameAsArray' id='$option' value='$option' $checkmark >$lineBreak";
      }
      
      echo<<<EOF
      <html>
      <head></head>
      <body>
      <form name="Update" method="GET" action="{$_SERVER['PHP_SELF']}">\n
      <fieldset id="tickboxes" style="width:25em;">
      <legend>{$Legent}</legend>
      {$boxes}
      </fieldset>
      <button type="submit" >Submit Form</button>
      </form>
      <body>
      </html>
      EOF
      ;
      

      首先,我们创建了一个变量$style 来设置我们想要水平或垂直方式的选项。这将不经常显示我们的复选框。接下来我们为我们的选项设置$name,这是我们想要保留选项的数组的名称。 我在这里创建了一个循环来构造数组$options 中给定的每个选项,然后我们检查每个项目是否应该在我们返回的表单中检查。我相信这应该会简化我们使用复选框重现表单的方式。

      【讨论】:

        【解决方案7】:
        //retrive check box and gender value
        $gender=$row['gender'];
        $chkhobby=$row['chkhobby'];
        <tr>
            <th>GENDER</th>
            <td>
                    Male<input type="radio" name="gender" value="1" <?php echo ($gender== '1') ?  "checked" : "" ;  ?>/>
                    Female<input type="radio" name="gender" value="0" <?php echo ($gender== '0') ?  "checked" : "" ;  ?>/>
        
            </td>
        </tr>
        <tr>
            <th>Hobbies</th>
            <td>
                <pre><?php //print_r($row);
        
                    $hby = @explode(",",$row['chkhobby']);
                    //print_r($hby);
                ?></pre>
                read<input id="check_1" type="checkbox" name="chkhobby[]" value="read" <?php if(in_array("read",$hby)){?> checked="checked"<?php }?>>
                write<input id="check_2" type="checkbox" name="chkhobby[]" value="write" <?php if(in_array("write",$hby)){?> checked="checked"<?php }?>>
                play<input id="check_4" type="checkbox" name="chkhobby[]" value="play" <?php if(in_array("play",$hby)){?> checked="checked"<?php }?>>
        
        
            </td>
            </tr>
        //update
        $gender=$_POST['gender'];
        $chkhobby = implode(',', $_POST['chkhobby']);
        

        【讨论】:

          【解决方案8】:

          如果您想将特定值转换为新变量(如果它们已被选中):

          // Retrieve array color[] and set as variable    
          $colors = $_GET['color'];
          // Use array_search to find the key for "red"
          $key_red = array_search('red', $colors);
          // If "red" exists, the key will be an integer (or FALSE)
          if (is_int($key_red)) {
              $red_color = 'Red was selected';
          }
          

          【讨论】:

            【解决方案9】:

            foreach 是获取值数组的最佳方式。

            这里是示例代码: html代码:

            <form action="send.php" method="post">
                Red<input type="checkbox" name="color[]" id="color" value="red">
                Green<input type="checkbox" name="color[]" id="color" value="green">
                Blue<input type="checkbox" name="color[]" id="color" value="blue">
                Cyan<input type="checkbox" name="color[]" id="color" value="cyan">
                Magenta<input type="checkbox" name="color[]" id="color" value="Magenta">
                Yellow<input type="checkbox" name="color[]" id="color" value="yellow">
                Black<input type="checkbox" name="color[]" id="color" value="black">
                <input type="submit" value="submit">
            </form>
            

            php代码:

            <?php
            
            $name = $POST['color'];
            
            
            
            foreach ($name as $color){ 
                echo $color."<br />";
            }
            
            ?>
            

            【讨论】:

              【解决方案10】:

              这很简单。

              复选框字段类似于输入文本。如果你在字段中不写任何东西,它会说该字段不存在。

              <form method="post">
                  <input type="checkbox" name="check">This is how it works!<br>
                  <button type="submit" name="submit">Submit</button>
              </form>
              <?php
              if(isset($_POST['submit'])) {
                  if(!isset($_POST['check'])) {
                      echo "Not selected!";
                  }else{
                      echo "Selected!";
                  }
              }
              ?>
              

              【讨论】:

                猜你喜欢
                • 2019-08-22
                • 1970-01-01
                • 1970-01-01
                • 2015-01-04
                • 1970-01-01
                • 2017-01-26
                • 2016-01-10
                • 2014-06-26
                • 1970-01-01
                相关资源
                最近更新 更多