web-dev-qa-db-fra.com

Obtenir des valeurs de case à cocher lors de la soumission

J'ai 6 options, je veux obtenir les valeurs vérifiées pour les stocker dans la variable sur la deuxième page. Comment je continue à faire ça?

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

Et third.php page:

$color = $_GET['color'];

echo 'The color is '.$color;

Si je supprime [], la couleur est activée. Lorsque je le fais comme color[], je reçois un avis disant: 

Conversion de tableau à chaîne

Ce que je veux, c’est la valeur des cases à cocher cochées pour pouvoir les stocker dans une variable.

45
Nofel

Une bonne méthode qui est l'une de mes préférées et pour beaucoup, j'en suis sûr, consiste à utiliser foreach qui permet d'afficher chaque couleur que vous avez choisie et d'apparaître à l'écran l'une sous l'autre. 

Quand il s'agit d'utiliser des cases à cocher, vous n'avez généralement pas d'autre choix que d'utiliser foreach, et c'est pourquoi vous ne recevez qu'une seule valeur renvoyée de votre tableau.

Voici un exemple utilisant $_GET. Cependant, vous pouvez utiliser $_POST et vous devrez faire correspondre les deux directives dans les deux fichiers pour fonctionner correctement.

FORMULAIRE 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>

PHP (en utilisant $ _GET) en utilisant third.php comme gestionnaire

<?php

$name = $_GET['color'];

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

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

?>

En supposant que vous ayez choisi le rouge, le vert, le bleu et le cyan comme couleurs, vous verrez apparaître ceci:

rouge
vert
bleu
cyan 


OPTION 2

Vous pouvez également vérifier si une couleur a été choisie. Si aucun n'est choisi, un message séparé apparaîtra.

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

?>

Options additionelles:

Pour apparaître sous forme de liste: (<ul></ul> peut être remplacé par <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.";
}

?>

Drapeau: (5 août 2016)

J'ai reçu 2 votes négatifs ce matin et mes commentaires ont été supprimés. Pourquoi? Celui qui fait cela le fait évidemment avec malice. La réponse n'a reçu que des votes positifs et maintenant ceci. Je veux dire sérieusement; wtf? - Fred -ii- Il y a une heure, a refusé - Les gens sont libres de voter comme ils veulent, tant que vous n'êtes pas ciblé. Je ne vois aucune preuve de cela. Vos commentaires sur les votes étaient du bruit, marqués comme tels et supprimés.

Réponse à ceci: c'est juste la chose; Je suis.

113
Funk Forty Niner

(Ce n'est pas action="get" ou action="post" c'est method="get" ou method="post"

Essayez de le faire en utilisant la méthode 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>

et dans third.php

ou pour un champ periculaire, vous obtenez une valeur:

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

Ce que je suggère, c’est mieux d’utiliser post que d’obtenir. voici une différence entre post VS obtenir

Quelques notes sur les requêtes GET:

  1. Les requêtes GET peuvent être mises en cache
  2. Les requêtes GET restent dans l'historique du navigateur
  3. Les demandes GET peuvent être marquées d'un signet
  4. Les requêtes GET ne doivent jamais être utilisées pour traiter des données sensibles
  5. Les requêtes GET ont des restrictions de longueur
  6. Les requêtes GET doivent être utilisées uniquement pour récupérer des données

Quelques notes sur les demandes POST:

  1. Les demandes POST ne sont jamais mises en cache
  2. Les demandes POST ne restent pas dans l'historique du navigateur
  3. Les demandes POST ne peuvent pas être marquées d'un signet
  4. Les requêtes POST n'ont aucune restriction sur la longueur des données

Code 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>

Code 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

Je pense que la valeur du $_POST['color'] devrait être lue uniquement après avoir vérifié si elle est définie.

<?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

Si vous souhaitez attribuer des valeurs spécifiques à de nouvelles variables si elles ont été sélectionnées:

// 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 est le meilleur moyen d’obtenir un tableau de valeurs.

voici l'exemple de code: code 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 />";
}

?>

Peut-être un meilleur moyen utilise-t-il la fonction php in_array () comme ceci:

$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
;

Pour commencer, nous avons créé une variable $style à définir si nous voulons que les options soient horizontales ou verticales. Cela n'influencera pas la façon dont nous affichons nos cases à cocher. Ensuite, nous définissons le $name pour nos options. C’est nécessaire comme nom du tableau dans lequel nous voulons conserver nos options. J'ai créé une boucle ici pour construire chaque option comme indiqué dans le tableau $options, puis nous les vérifions article s'il doit être vérifié dans notre forme renvoyée. Je pense que cela devrait simplifier la manière dont nous pouvons reproduire un formulaire avec des cases à cocher.

0
Cor Cool

Juste pour imprimer, vous pouvez utiliser comme ci-dessous: 

print_r($_GET['color']);

ou

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

C'est très simple.

Le champ de case à cocher est comme un texte saisi. Si vous n'écrivez rien dans le champ, cela signifie que le champ n'existe pas.

<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