8768 sujets

Développement web côté serveur, CMS

Rebonjour à vous,

J'ai un souci avec une structure conditionnelle sensée tester l'existence de 3 variables avant l'affichage des valeurs (2 de type texte (prénom et e-mail) et une de type radio (couleur préférée)). Mon soucis c'est que je saisisse ou pas tous les champs, le navigateur me renverra toujours "Tous les champs doivent être saisis". Je ne comprends pas où j'ai commis une erreur et j'ai vérifié plusieurs fois la syntaxe.

Voici le code HTML :

<!doctype html>
<html lang="fr">
	<head>
		<meta charset="UTF-8">
		<title>Programmons en php</title>
	</head>
	<body>
		<form action="resultat.php" method="get">
			<label>Votre prénom : </label>
			<input type="text" name="prenom">
			<br>
			<label>Votre e-mail : </label>
			<input type="text" name="email">
			<br>
			<label>Votre couleur préférée : </label>
			<input type="radio" name="couleur" value="orange">Orange
			<input type="radio" name="couleur" value="rouge">Rouge
			<input type="radio" name="couleur" value="vert">Vert
			<br>
			<input type="submit">
		</form>
	</body>
</html>

Qui me renvoie cette présentation :
upload/1649741318-62242-capturedancran2022-04-1207282.png
Voici le code PHP vérifiant le formulaire :

	$prenom = $_GET['prenom'];
	$email = $_GET['email'];
	$couleur = $_GET['couleur'];
	if
		(
		(!empty($prenom)) OR
		(!empty($email)) OR
		(!isset($couleur))
		)
	{
		echo 'Tous les champs doivent être saisis';
	}else{
		echo 'Votre prenom est ' . $prenom . '<br>';
		echo 'Votre e-mail est ' . $email . '<br>';
		echo 'Votre couleur préférée est ' . $couleur . '<br>';
	}

Merci de m'aider à comprendre d'où vient le problème.
Modifié par ObiJuanKenobi (12 Apr 2022 - 07:34)
Bonjour,
A priori, tu veux écrire 'Tous les champs doivent être saisis' si au moins un de tes champs est vide.
La condition devrait plutôt être:

if
		(
		(empty($prenom)) OR
		(empty($email)) OR
		(!isset($couleur))
		)

Si prenom est vide ou email est vide ou couleur n'existe pas.
pour rappel, si on décortique ton if()
!empty($prenom)
!empty($email)
!isset($couleur)

veut dire

"Si prenom n'est pas vide"
ou
"Si email n'est pas vide"
ou
"Si couleur n'existe pas"
Salut,

petit supplément de réponse sans rapport direct avec ton problème Smiley lol
Du coté html tu peux également rajouter un attribut required sur les champs obligatoire de ton formulaire ce qui permettra une première vérification du coté client.
Je précise que c'est un complément, il faut toujours faire les vérifications coté serveur. Les vérifications coté client sont la pour simplifier la vie de l'utilisateur standard mais peuvent être détournées par un utilisateur mal intentionné

<!doctype html>
<html lang="fr">
	<head>
		<meta charset="UTF-8">
		<title>Programmons en php</title>
	</head>
	<body>
		<form action="resultat.php" method="get">
			<label>Votre prénom : </label>
			<input type="text" name="prenom" required>
			<br>
			<label>Votre e-mail : </label>
			<input type="text" name="email" required>
			<br>
			<label>Votre couleur préférée : </label>
			<input type="radio" name="couleur" value="orange" required>Orange
			<input type="radio" name="couleur" value="rouge">Rouge
			<input type="radio" name="couleur" value="vert">Vert
			<br>
			<input type="submit">
		</form>
	</body>
</html>


(Pour les champs de type radio il me semble que c'est suffisant de le mettre sur un seul d'un name donnée, mais je ne sais pas dire si la bonne pratique est de le mettre sur un seul comme j'ai fais la ou sur tous Smiley sweatdrop )
Si j'ai bien compris, mon erreur se trouvait dans !empty où il ne fallait pas que j'utilise le symbole exclamation pour les inputs de type texte ?

J'ai du mal à comprendre cette instruction. Elle signifie bien différent de vide, ou qui n'est pas vide, ou encore qui contient quelque chose ?
Modifié par ObiJuanKenobi (12 Apr 2022 - 11:38)
Le symbole ! c'est la négation en logique booléen, ce qui est vrai devient faux et ce qui est faux devient vrai.
Donc par exemple si empty($toto) retourne true !empty($toto) retourne false

Toi tu voulais vérifier "est ce que le prénom est vide" ce qui correspond à empty($prénom).

Si tu met la négation ça vérifie "est ce que le prénom n'est pas vide" (ce qui est ton else pas ton if)
Meilleure solution
Merci Mathieuu, j'ai enfin compris que dans une structure conditionnelle, la condition placée entre parenthèses doit être vrai (TRUE) pour que la première instruction s'exécute. Et si la condition n'est pas remplie (elle devient FALSE), c'est la seconde instruction qui s'exécute.
Modifié par ObiJuanKenobi (12 Apr 2022 - 15:40)