Comment lire si une case à cocher est cochée en PHP?


266

Comment lire si une case à cocher est cochée en PHP?


8
Cette question signifie en fait "a été cochée" (lorsque le formulaire a été soumis). Pour déterminer si une case est cochée, PHP nécessiterait un appel Ajax une fois l'élément basculé.
rybo111

Réponses:


342

Si votre page HTML ressemble à ceci:

<input type="checkbox" name="test" value="value1">

Après avoir soumis le formulaire, vous pouvez le vérifier avec:

isset($_POST['test'])

ou

if ($_POST['test'] == 'value1') ...

57
Les cases à cocher peuvent également avoir une valeur onlorsqu'elles sont cochées. Par conséquent, pour la compatibilité, il est plus facile à utiliser isset($_POST['checkboxName']).
Damiqib

13
La valeur "on" peut être prise en charge par certains navigateurs lorsque l'attribut value n'est pas défini, mais en général, il est préférable de définir l'attribut value et de le vérifier lors de la soumission.
m_vitaly

3
La «valeur1» change-t-elle si la case est cochée?
MoralCode

10
@Developer_ACE À moins que je ne vous comprenne mal, la valeur dans cet exemple serait value1si la case était cochée. Si elle n'est pas cochée, $_POST['test']n'existerait tout simplement pas.
rybo111

104

Zend Framework utilise un joli hack sur les cases à cocher, que vous pouvez également faire vous-même:

Chaque case à cocher générée est associée à un champ caché du même nom, placé juste avant la case à cocher, et avec une valeur de "0". Ensuite, si votre case à cocher correspond à la valeur "1", vous obtiendrez toujours la valeur "0" ou "1" dans le GET ou le POST résultant.

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 

J'ai également remarqué cela, mais je me sens en sécurité de l'utiliser: Zend Framework le fait aussi!
hpaknia

C'est intéressant. Mais existe-t-il une toute petite possibilité que l'agent utilisateur soumette la première valeur au lieu de la dernière, en supposant que la case est cochée?
rybo111

@ rybo111, pour l'agent utilisateur, je ne pense pas, mais pour un analyseur de formulaire javascript personnalisé, vous devez faire attention.
regilero

Désolé, quelqu'un pourrait-il m'expliquer comment cela fonctionne? Je n'ai pas compris. Pourquoi ce champ caché si seule la dernière valeur est toujours soumise (la input[type="checkbox"]sienne)?
tonix

6
lorsque la case n'est pas cochée, elle n'est pas transmise par la poste (donc seul le caché est transmis). Quand il est vérifié, il est transmis et écrasera la valeur cachée.
regilero

53

Lorsque vous utilisez des cases à cocher en tant que tableau:

<input type="checkbox" name="food[]" value="Orange">
<input type="checkbox" name="food[]" value="Apple">

Vous devez utiliser in_array():

if(in_array('Orange', $_POST['food'])){
  echo 'Orange was checked!';
}

N'oubliez pas de vérifier que le tableau est défini en premier, comme:

if(isset($_POST['food']) && in_array(...

les cases à cocher en tant que tableau et foreach ($_POST['food'] as $selected_food)de travailler sur une case cochée est agréable, merci
bcag2

42

Laissez votre html pour votre case à cocher sera comme

<input type="checkbox" name="check1">

Ensuite, après avoir soumis votre formulaire, vous devez vérifier comme

if (isset($_POST['check1'])) {

    // Checkbox is selected
} else {

   // Alternate code
}

En supposant que cela check1devrait être le nom de votre case à cocher Et si votre méthode de soumission de formulaire est GETalors vous devez vérifier avec des $_GETvariables comme

if (isset($_GET['check1'])) {

   // Checkbox is selected
} 


6

J'utilise cette astuce depuis plusieurs années et elle fonctionne parfaitement sans aucun problème pour l'état de la case cochée / non cochée lors de l'utilisation avec PHP et la base de données.

Code HTML: (pour ajouter une page)

<input name="status" type="checkbox" value="1" checked>

Astuce: supprimez la "case à cocher" si vous souhaitez l'afficher comme non cochée par défaut

Code HTML: (pour la page d'édition)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>

Code PHP: (à utiliser pour ajouter / modifier des pages)

$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}

Astuce: Il y aura toujours une valeur vide à moins que l'utilisateur ne la vérifie. Donc, nous avons déjà du code PHP pour l'attraper, sinon gardez la valeur à 0. Ensuite, utilisez simplement la variable $ status pour la base de données.


1
c'est la très bonne forme pour le faire en php pur et simple. mais il faut noter que la valeur d'une case à cocher est une chaîne lorsqu'elle est activée et une valeur inexistante si elle est cochée.
Elvis Technologies

4

Pour vérifier si une case est cochée, utilisez empty ()

Lorsque le formulaire est soumis, la case à cocher sera TOUJOURS activée, car TOUTES les variables POST seront envoyées avec le formulaire.

Cochez si la case est cochée avec vide comme suit:

//Check if checkbox is checked    
if(!empty($_POST['checkbox'])){
 #Checkbox selected code
} else {
 #Checkbox not selected code
}

3
Si la case n'est pas cochée, elle ne sera pas publiée, elle sera donc TOUJOURS définie.
Wessam El Mahdy

^ PAS * toujours réglé
The Codesee

3

Vous pouvez vérifier que la valeur correspondante est définie et non vide dans le tableau $ _POST ou $ _GET en fonction de l'action de votre formulaire.

ie: Avec un formulaire POST utilisant un namede "test" (ie <input type="checkbox" name="test">:, vous utiliseriez:

if(isset($_POST['test']) {
   // The checkbox was enabled...

}

2

Découvrez issetquelle est une "fonction" intégrée qui peut être utilisée dans les instructions if pour indiquer si une variable a été utilisée ou définie

Exemple:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }

2

Eh bien, les exemples ci-dessus ne fonctionnent que lorsque vous souhaitez INSÉRER une valeur, pas utile pour METTRE À JOUR différentes valeurs dans différentes colonnes, voici donc ma petite astuce pour mettre à jour:


//EMPTY ALL VALUES TO 0 
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();
if(!empty($_POST['check_menus'])) {
    foreach($_POST['check_menus'] as $checkU) {
try {
//UPDATE only the values checked
    $queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();  
        } catch(PDOException $e) {
          $msg = 'Error: ' . $e->getMessage();}

        }
}
<input type="checkbox" value="menu_news" name="check_menus[]" />
<input type="checkbox" value="menu_gallery" name="check_menus[]" />

....

Le secret consiste simplement à mettre à jour toutes les VALEURS en premier (dans ce cas, à 0), et puisque le n'enverra que les valeurs vérifiées, cela signifie que tout ce que vous obtenez doit être défini sur 1, donc tout ce que vous obtenez le définit sur 1.

L'exemple est PHP mais s'applique à tout.

S'amuser :)


2

Vous pouvez le faire avec le court si:

$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;

ou avec le nouveau PHP7 Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;


1

Un contrôle booléen minimaliste avec maintien de la position du commutateur

<?php

$checked = ($_POST['foo'] == ' checked');

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>

1
Lorsque vous donnez une réponse, il est préférable de donner une explication quant à la raison pour laquelle votre réponse est la seule. Cela est particulièrement vrai lorsque vous répondez à un TRÈS ancien message 11 autres réponses.
Stephen Rauch

Il est bon que vous reconnaissiez la nécessité pour la case à cocher de conserver son état. Cependant, votre code pour ce faire n'est pas correct.
Vern Jensen

1
<?php

  if (isset($_POST['add'])) {

    $nama      = $_POST['name'];
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";

    echo "Name: {$nama} <br />";
    echo "Subscribe: {$subscribe}";

    echo "<hr />";   

  }

?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >

  <input type="text" name="name" /> <br />
  <input type="checkbox" name="subscribe" value="news" /> News <br />

  <input type="submit" name="add" value="Save" />

</form>

pouvez-vous expliquer votre objectif ici?
Elvis Technologies

0

dans BS3, vous pouvez mettre

  <?php
                  $checked="hola";
                  $exenta = $datosOrdenCompra[0]['exenta'];
                  var_dump($datosOrdenCompra[0]['exenta']);
                  if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){

                      $checked="on";

                  }else{
                    $checked="off";
                  }

              ?>
              <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>

Veuillez noter l'utilisation deisset($datosOrdenCompra[0]['exenta'])


0

filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)


0

Wordpress a la checked()fonction. Référence: https://developer.wordpress.org/reference/functions/checked/

checked( mixed $checked, mixed $current = true, bool $echo = true )

Description Compare les deux premiers arguments et si des marques identiques sont cochées

Paramètres $ vérifié (mixte) (Obligatoire) Une des valeurs à comparer

$ current (mixed) (Facultatif) (true) L'autre valeur à comparer si pas seulement true Valeur par défaut: true

$ echo (bool) (Facultatif) Que ce soit pour faire écho ou simplement renvoyer la chaîne Valeur par défaut: true

Renvoie l'attribut html #Return (string) ou une chaîne vide


-3
<?php

if(isset($_POST['nameCheckbox'])){
    $_SESSION['fr_nameCheckbox'] = true;
}

?>

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']);
} 

?>

Bienvenue dans Stack Overflow! Bien que cet extrait de code puisse résoudre le problème, il n'explique pas pourquoi ni comment il répond à la question. Veuillez inclure une explication pour votre code , car cela aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondrez à la question pour les lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Flaggers / relecteurs: pour les réponses en code uniquement comme celle-ci, downvote, ne supprimez pas!
Scott Weldon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.