Validation d'un formulaire contenant des checkbox

Eléphanteau du PHP | 18 Messages

19 févr. 2012, 15:01

Bonjour,

Après envoi d'un formulaire, je souhaite vérifier si une de mes 3 checkbox est cochée.
Si aucune n'est cochée, je dois renvoyer un message d'erreur contenu dans le variable $error_sect

Voici mon code.

Création de la variable, qui est nulle avant l'envoi du formulaire (l'utilisateur ne reçoit pas de message d'erreur avant d'avoir envoyer son formulaire, normal) :
if ((!isset($_POST['agro'])) && (!isset($_POST['pharma'])) && (!isset($_POST['indus']))) {
	$error_sect = NULL;
}

Aprés envoi du formulaire, récupération des données envoyées dans les checkbox :
$agro = $_POST['agro'];
$pharma = $_POST['pharma'];
$indus = $_POST['indus'];
Si aucune des 3 checkbox n'est cochée, envoi d'un message d'erreur :
if (($agro == "") && ($pharma == "") && ($indus == "")) {	
$error_sect = "Merci de cocher une des trois cases";
}
Est-ce que quelqu'un voit où est l'erreur ?
Car ce code ne fonctionne pas...

Merci

Mammouth du PHP | 2278 Messages

20 févr. 2012, 21:48

En ajoutant
print_r($_POST); // ça éclairerait ta lanterne
$agro = $_POST['agro'];
$pharma = $_POST['pharma'];
$indus = $_POST['indus'];
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 18 Messages

26 févr. 2012, 14:07

ça ma éclairé que dalle.... lol

Eléphanteau du PHP | 18 Messages

26 févr. 2012, 15:58

Bon ben ça fonctionne avec
if (($agro != "a") && ($pharma !="p") && ($indus !="i")){
	$error_sect = "merci de cocher une case";
}
J'ai toujours pas compris pourquoi la première syntaxe ne fonctionnait pas.... Mais bon

Eléphanteau du PHP | 37 Messages

10 mars 2012, 08:19

peut être comme ça...
if (($agro === NULL) && ($pharma === NULL) && ($indus === NULL)) {       
$error_sect = "Merci de cocher une des trois cases";
}

Invité
Invité n'ayant pas de compte PHPfrance

12 mars 2012, 16:12

Bonjour,

La solution que tu cherche c'est : if(empty($variable) && empty($variable2) && empty ($variable3) { $erreur = 'string' }

ViPHP
AB
ViPHP | 5818 Messages

12 mars 2012, 17:30

Bonjour,

La solution que tu cherche c'est : if(empty($variable) && empty($variable2) && empty ($variable3) { $erreur = 'string' }
+1

Explication :
Si le checkox n'est pas coché le post correspondant n'est pas envoyé, il n'est donc pas égal à rien ("") puisqu'il est indéfini. Une valeur non définie ne peut pas être comparéé directement avec une égalité et il faut commencer par vérifier son existence avec isset ou empty (comme ci-dessus).
Normalement un message "undefined index" aurait dû t'alerter.