Vérification des champs et message

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



--
Un petit merci vaut mieux qu'une grande ignorance !

4 réponses

  1. Pitet Messages postés 2845 Statut Membre 530
     
    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
    1. animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   738
       
      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
  2. joebuz Messages postés 40 Statut Membre 23
     
    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
  3. animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   738
     
    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
  4. benj21000 Messages postés 9 Statut Membre
     
    Bonjour à la place de !empty essaye isset($post...)
    0
    1. animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   738
       
      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
    2. benj21000 Messages postés 9 Statut Membre
       
      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
    3. animostab Messages postés 3003 Date d'inscription   Statut Membre Dernière intervention   738
       
      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