Vérification des champs et message

Résolu/Fermé
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 - 14 avril 2014 à 04:02
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 - 15 avril 2014 à 01:01
Bonjour,

J'ai un formulaire qui envoie dans une base mysql
le problème est que en ajoutant la vérification des champs pour savoir si il sont vides et ne pas envoyer cela m'affiche le message d'erreur au chargement de la page

voici le code

if ((!empty($_POST['pseudo'])) && (!empty($_POST['message'])))

{
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
$message = nl2br($message);
$date = date('Y-m-d') ."\n";

mysql_query("INSERT INTO livre_or VALUES('', '" . $pseudo . "','" . $date . "', '" . $message . "')");
}
else { echo '<h1>Votre commentaire n\'a pas été posté</h1><p>Vous devez remplir tous les champs du formulaire</p>';}

au chargement de la page ca affiche sans meme avoir envoyer le formulaire mon message d'erreur

"Votre commentaire n'a pas été posté
Vous devez remplir tous les champs du formulaire"

Merci de vos réponses car je tourne en rond avec ca et je suis pas super bon en php
pourtant j'ai vidé le cache et effacé les cookies mais ce truc persiste


4 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
14 avril 2014 à 16:30
Salut,

Tu dois ajouter une condition pour savoir si le formulaire a été envoyé ou non.

Tu peux facilement le faire en vérifiant la présence du paramètre de ton bouton submit :

Dans le formulaire :
<form action="" method="post">
    <input type="text" name="pseudo" />
    <textarea name="message"></textarea>
    <input type="submit" name="envoi" value="Envoyer" />
</form>


Dans ton code php :
// si le paramètre $_POST['envoi'] existe, le formulaire a été soumis
// sinon on ne fait rien : premier chargement de la page
if (!empty($_POST['envoi'])) {
    if (!empty($_POST['pseudo']) && !empty($_POST['message'])) {

    } else {
        echo '<h1>Votre commentaire n\'a pas été posté</h1><p>Vous devez remplir tous les champs du formulaire</p>';
    }
}


Bonne journée
1
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
15 avril 2014 à 01:01
je me suis bien douté à un moment qu'il fallait vérifier si le submit est fait avant de verifier le reste, la solution était vraiment trop simple, si j'avais réflechi au lieu de tourner en boucle comme un serveur mal configuré !
je test quand je rentre chez moi (dans 2 jours) mais ca m'a l'air d'une logique implacable
Merci Pitet
0
joebuz Messages postés 39 Date d'inscription dimanche 11 novembre 2012 Statut Membre Dernière intervention 14 avril 2014 4
14 avril 2014 à 09:28
Bonjour,

Essaye ça :

if ((empty($_POST['pseudo'])) && (empty($_POST['message'])))

{
$pseudo = htmlspecialchars($_POST['pseudo']);
$message = htmlspecialchars(nl2br($_POST['message']));
$date = date('Y-m-d') ."\n";

$link = mysql_connect("localhost", "mysql_user", "mysql_password") or die ("Impossible de se connecter : " . mysql_error());
$sql = "INSERT INTO livre_or VALUES('', '$pseudo','$date', '$message')";
$req = mysql_query($sql, $link) or die( "ERREUR MYSQL: ".mysql_error()."<br>".$req."<br>\n" )
}
else {
echo '<h1>Votre commentaire n\'a pas été posté</h1><p>Vous devez remplir tous les champs du formulaire</p>';
}
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
Modifié par animostab le 14/04/2014 à 13:57
merci de ta réponse mais ca ne marche pas

virgule absente après
$req = mysql_query($sql, $link) or die( "ERREUR MYSQL: ".mysql_error()."<br>".$req."<br>\n" )

pas de base sélectionnée

après avoir corrigé de la manière suivante ca affiche toujours le echo dans else{ au chargement de la page donneravis.php

<form action="donneravis.php" method="post">

Prénom/Nom :
<input name="pseudo"><br>
Message :<br />
<textarea name="message" rows="8" cols="35"></textarea><br />
<input name="grand" id="pasla">
<input type="submit" value="Envoyer" class="bouton">




</form>
<?php

if ((empty($_POST['pseudo'])) && (empty($_POST['message'])) && (!empty($_POST['grand'])))

{
$pseudo = htmlspecialchars($_POST['pseudo']);
$message = htmlspecialchars(nl2br($_POST['message']));
$date = date('Y-m-d') ."\n";

$link = mysql_connect("127.0.0.1", "root", "password");
$ret = mysql_select_db ('clownphp', $link)
or die ("Impossible de se connecter : " . mysql_error());
$sql = "INSERT INTO livre_or VALUES('', '$pseudo','$date', '$message')";
$req = mysql_query($sql, $link) or die( "ERREUR MYSQL: ".mysql_error()."<br>".$req."<br>\n" );
}
else {
echo '<h1>Votre commentaire n\'a pas été posté</h1><p>Vous devez remplir tous les champs du formulaire</p>';
}

?>

pour info le input name="grand" est caché par css et si il est rempli (par un co...rd de robot) le message n'est pas envoyé.

bon j'ai contourné le problème en traitant le formulaire sur une autre page si c'est ok ca envoie vers l'affichage des posts sinon ca renvoi au formulaire mais je ne sais toujours pas pourquoi le message s'affiche au chargement de page

PS je tourne avec easyphp 5.3.2

Un petit merci vaut mieux qu'une grande ignorance !
Donc si votre sujet est résolu une réponse avec merci c'est pas de refus.
0
benj21000 Messages postés 8 Date d'inscription lundi 14 avril 2014 Statut Membre Dernière intervention 14 avril 2014
14 avril 2014 à 15:36
Bonjour à la place de !empty essaye isset($post...)
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
Modifié par animostab le 14/04/2014 à 16:07
il me semble que isset regarde si une variable est définie, pas si elle est vide ou remplie
donc il me semble que isset meme avec un champs vide validera et enverra le formulaire non ?
dites moi si je me trompe.
mais bon j'ai déjà contourner mon problème avec1 page de traitement intermédiaire et redirection header suivant le test avec empty et la ca fonctionne
0
benj21000 Messages postés 8 Date d'inscription lundi 14 avril 2014 Statut Membre Dernière intervention 14 avril 2014
14 avril 2014 à 16:11
si à la base le formulaire était sur la même page que la vérification effectivement, il faut faire une page temporaire, ou le faire en ajax. Isset va vérifier si ta variable est définie donc qu'elle existe et si elle est différente de null donc contenant au moins 1 caractère qui peux être un espace d'ailleur si aucune vérif n'a été faite
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
Modifié par animostab le 15/04/2014 à 00:52
exact c'était dans la meme page donc au chargement les champs sont vides d'ou le message de champs vides (je suis bete de ne pas y avoir pensé plus tot). c'est pour ca que j'ai fait le traitement du formulaire dans une autre page
0