web-dev-qa-db-ja.com

送信時にチェックボックス値を取得する

私は6つのオプションがあり、チェックされた値を取得して2ページ目の変数に保存したいです。それをどうやって続けるのですか?

<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[]のようにすると、次のような通知が表示されます。

配列から文字列への変換

私が欲しいのは、チェックボックスの値で、変数に保存できます。

49
Nofel

私のお気に入りであり、多くの人にとって間違いなく、あなたが選択した各色を出力し、画面の下に互いに表示されるforeachを使用するのが良い方法です。

チェックボックスを使用する場合、foreachを使用する以外に選択肢はありません。そのため、配列から1つの値のみが返されます。

$_GETを使用した例を次に示します。ただし、$_POSTを使用できます。適切に機能するには、両方のファイルで両方のディレクティブを一致させる必要があります。

HTMLフォーム

<form action="third.php" method="get">
    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を使用するPHP($ _GETを使用)

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

?>
122

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
14
Rahul

私が提案するのは、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.";

    }

    ?>
9
Sathya Baman

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

}

?>
0
Blacboy

特定の値が選択されている場合、それらを新しい変数に変換する場合:

// 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';
}
0
user8890598

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>

phpcode:

<?php

$name = $POST['color'];



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

?>

おそらくもっと良い方法は、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で指定された各オプションを作成し、返されたフォームでチェックする必要がある場合は各アイテムをチェックします。これにより、チェックボックスを使用してフォームを再現する方法が簡素化されるはずです。

0
Cor Cool

印刷のためだけに、次のように使用できます。

print_r($_GET['color']);

または

var_dump($_GET['color']);
0

とても簡単です。

チェックボックスフィールドは入力テキストのようなものです。フィールドに何も書き込まない場合、フィールドが存在しないと表示されます。

<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!";
    }
}
?>
0
Arty