Checkbox Administration Wordpress

Résolu
Shuta Messages postés 210 Date d'inscription   Statut Membre Dernière intervention   -  
Shuta Messages postés 210 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   3
 
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