Checkbox Administration Wordpress

Résolu/Fermé
Shuta Messages postés 210 Date d'inscription samedi 28 février 2015 Statut Membre Dernière intervention 11 mars 2021 - Modifié par Shuta le 22/08/2016 à 23:02
Shuta Messages postés 210 Date d'inscription samedi 28 février 2015 Statut Membre Dernière intervention 11 mars 2021 - 24 août 2016 à 12:06
Bonjour,

Alors voilà, j'essaie de faire une checkbox sur une page personnelle en administration.
Seulement avec tous les tutos que j'ai croisé (sur le peu que je croises) impossible de la faire fonctionner correctement :(

Je m'explique :
<input type="checkbox" id="check01" name="options[check01]" value="1" <?php checked( '1', get_option('check01') ); ?> />

Voici la checkbox en question ! Alors celle ci marche mais que dans le sens "On" C'est a dire que si elle n'est pas cochée de base, je viens pour la cocher, j'enregistre et elle se coche correctement. Le soucis est que... Elle ne se décoche plus !
Je vais voir sur la base de donnée, la valeur est bien affiché à 1. Mais impossible de décocher cette checkbox...

En ce qui concerne le traitement de 'options[]' voici le code, il m'est utile pour tout le reste du template :
foreach($_POST['options'] as $name => $value){
 if(empty($value)){
  delete_option($name);
 } else {
  update_option($name, $value);
 }
}


Merci de bien vouloir m'aider :'( Ca fait 5h que je bloque sur ça, ça devient pesant...
Bonne soirée.
Cordialement

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
23 août 2016 à 09:25
Salut,

As tu vérifié le contenu de la variable $_POST['option'] lorsque la checkbox est décochée ?

Le paramètre POST correspondant à la checkbox n'est pas envoyée si celle-ci n'est pas cochée.
Pour vérifier qu'une checkbox n'est pas cochée, il faut donc vérifier l'existence du paramètre POST correspondant via par exemple la fonction isset().

Bonne journée,
1
Shuta Messages postés 210 Date d'inscription samedi 28 février 2015 Statut Membre Dernière intervention 11 mars 2021 3
Modifié par Shuta le 23/08/2016 à 10:24
Eh bien il semblerait que non >.<

Je ne suis pas très développé en php, pourriez vous m'aider juste à développer la vérification de la variable =o

D'ailleurs, le name 'options[]' est utilisé pour d'autres champs aussi.
je devrais le changer pour la checkbox ?

Bonne journée !
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
23 août 2016 à 12:30
Tu peux conserver le options[check01] en tant que name de ta checkbox, il faut simplement utiliser isset() sur le paramètre $_POST['options']['check01'] pour vérifier si celle-ci est cochée.

Un exemple très simple :
<?php 
var_dump($_POST);

if (isset($_POST['options']['check01'])) {
	echo 'cochée';
} else {
	echo 'non cochée';
}
?>
<form method="post">
<input type="checkbox" id="check01" name="options[check01]" value="1" />
<input type="submit">
</form>
0
Shuta Messages postés 210 Date d'inscription samedi 28 février 2015 Statut Membre Dernière intervention 11 mars 2021 3
Modifié par Shuta le 23/08/2016 à 14:52
Bonjour !

En fait j'ai essayé votre méthode. Tout se passe très bien je dois avouer, mais... Si j'actualise la page (sans sauvegarder D: ) Eh bien il réinitialise tout à 0...

Voici le code que j'ai fait assemblé. J'essaie plusieurs méthodes dans celle ci, mais c'est celle qui me semble la plus proche... Mais l'actualisation fausse tout et vire le 1 de la base de donnée.

<td>
    <?php 
    if (isset($_POST['options']['check01'])) {
     echo 'cochée';
     $checkval = '1';
     update_option('check01', $checkval);
    } else {
     echo 'non cochée ';
     $checkval = '';
     delete_option('check01');
    }
    ?>
    <input type="checkbox" id="check01" name="options[check01]" value="<?php if($checkval == '1') {echo ('1');}else{echo ('0');} ?>" <?php if(get_option('check01') == '1') {echo ('checked="checked"');}  ?> />
   </td>


Merci de votre aide !
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
23 août 2016 à 15:13
Effectivement en rechargeant la page sans envoyer le formulaire, le paramètre $_POST['options']['check01'] n'existe pas (puisque le formulaire n'est pas envoyé) et donc ta condition entre dans le else et appelle la fonction delete_option().

Il faut donc vérifier que le formulaire soit envoyé avant le faire le test sur le paramètre $_POST['options']['check01'].
Pour cela, tu peux par exemple vérifier l'existence du paramètre POST correspondant à ton bouton submit, ce dernier sera toujours définie lorsque le formulaire est envoyé.
Par exemple :
<?php 
if (isset($_POST['monsubmit'])) { // si le formulaire est envoyé
	if (isset($_POST['options']['check01'])) {
		echo 'cochée';
	} else {
		echo 'non cochée';
	}
}
?>
<form method="post">
	<input type="checkbox" id="check01" name="options[check01]" value="1" />
	<input type="submit" name="monsubmit">
</form>
0
Shuta Messages postés 210 Date d'inscription samedi 28 février 2015 Statut Membre Dernière intervention 11 mars 2021 3
23 août 2016 à 20:16
Aaah merci !

J'ai modifié le code ainsi :
if(isset($_POST['pannel_update'])){
 if (isset($_POST['checkup']['check01'])) {
  $checkval = '1';
  update_option('check01', $checkval);
 } else {
  $checkval = '';
  delete_option('check01');
 }
}

<input type="checkbox" id="check01" name="checkup[check01]" value="<?php if($checkval == '1') {echo ('1');}else{echo ('0');} ?>" <?php if(get_option('check01') == '1') {echo ('checked="checked"');}  ?> />


C'est le seul moyen qu'il marche correctement D:
Enfin merci beaucoup pour l'aide =3 Je met la page en résolu !
0