66

我有 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[]我会收到一条通知:

数组到字符串的转换

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

4

10 回答 10

144

一种我最喜欢的好方法,我敢肯定,对于许多人来说,使用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.";
}

?>

##附加选项:显示为列表:(<ul></ul>可以替换为<ol></ol>

<?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.";
}

?>
于 2013-08-24T23:28:35.120 回答
16

(它不是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
于 2013-08-24T19:47:09.927 回答
11

我的建议是,使用 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.";

    }

    ?>
于 2014-06-10T04:52:09.543 回答
3

这很简单。

复选框字段就像输入文本。如果您在该字段中不写任何内容,它会说该字段不存在。

<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!";
    }
}
?>
于 2018-10-11T16:09:01.063 回答
2

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

$name = $POST['color'];



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

?>
于 2018-05-23T03:40:26.860 回答
1

Just for printing you can use as below :

print_r($_GET['color']);

or

var_dump($_GET['color']);
于 2015-04-06T17:10:21.197 回答
1

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

// 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';
}
于 2017-11-05T19:18:15.893 回答
1

也许更好的方法是像这样使用 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,然后我们检查每个项目是否应该在我们返回的表单中检查。我相信这应该简化我们用复选框复制表单的方式。

于 2016-05-25T10:43:06.393 回答
1

我认为$_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.";

}

?>
于 2015-12-24T17:27:38.713 回答
0
//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']);
于 2016-08-11T08:51:44.410 回答