Bonjour,
Je cré un formulaire avec le code du tuto placé dans mon fichier index.php contenant lui même mon formulaire.
Je souhaiterais que l'on m'explique la première condition de ce code dont le fin fonctionnement m'est étrange ^^.
Ma compréhension de celui ci est :
1 - ouverture page php
2- la première condition (!empty($_POST)) détermine que $_POST es vide donc la suite n'est pas lu (ceci évite les message d'erreur à l'ouverture de la page)
3 mais pourquoi qd on click su le bouton submit et qu'auncun formulaire n'est rempli la condition est acceptée comme vrai ??? alors que c'est dernière son vides ?
<?php
if(!empty($_POST)){
extract($_POST);
$valide= true;
if(empty($nom)){
$valide=false;
$erreurnom="vous n'avez pas rempli votre nom";
}
if(empty($email)){
$valide=false;
$erreurmail="vous n'avez pas rempli votre mail";
}
if(empty($message)){
$valide=false;
$erreurmessage="vous n'avez pas rempli votre message";
}
if($valide){
echo "tous les champs sont bons";
}
}
?>
Yop pas de problème sert toi de ce MANUEL
ici en l’occurrence tu as le descriptif de ce que fait empty. Fouine bien A+
Tous simplement car il n'est pas vide X)
Petit test : avant le if place un "print_r($_POST);" et dans le if la même chose.
Tu verras au lancement de ta page un Array() et dans le cas ou tu soumets ton formulaire quelque chose comme "Array( [nom] => );"
Solution : Utiliser la valeur d'un clé:
if(!empty($_POST'name'])){ }
EDIT: un moyen peut être plus simple si tu as de grand formulaire.
<?php
//test si l'utilisateur a soumit le formulaire
if(isset($_POST'formulaire'])){
//initialisation de erreur
$erreur='';
//boucle qui test chaque element
foreach ($_POST as $key => $value) {
//si la valeur est vide on inscrit la cle (qui est le name de l'input) dans une variable erreur
if($value == ''){
echo "Le champ \"$key\" est vide ! <br />";
$erreur.=$value.'@';
}
}
//test des erreurs => posibilité de transformer en tableau avec explode et de traiter
if($erreur == ''){
echo 'tous les champs sont remplis, YOUPI !';
}
echo '<hr />';
}
?>
<form action="index.php" method="post">
<input type="text"name="nom"/>
<input type="text" name="email" />
<input type="text" name="message" />
<input type="submit" value="ENV" name="formulaire"/>
</form>
Hello, !empty = différent de vide.
empty ne permet pas de recevoir des tableaux (sauf un tableau vide), il ne va pas prendre en compte ta condition puisqu'il y a des "clé" (nom,email,message,etc..) dans $_POST donc ce n'est pas vide et te retourne une condition vrai car $valide est par défault à true.
Seule solution si tu veux continuer à utiliser empty c'est d'ajouter les clé, !empty($_POST'clé']) ou isset($_POST'clé'][0], $_POST'clé2'][0]) (important le [0] chez isset) ou $_POST'clé'] != ''
Voilà.
Ok merci a vous deux avec la méthode print-r j'ai saisi le sens du code donné dans le tuto, en premier lieu au chargement de la page la valeur de POST = null et qd on soumet si les champs sont vide la valeur de POST prend la valeur "name" de chaques champs ainsi la condition passe a vrai.
Golendercaria pour ta méthode avec la boucle je la garde en mémoire pour le moment c'est un poil compliqué pour moi, j'ingère mes conditions ce sera un bon début ^^
Merci pour votre aide à tous les deux