IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

champs requis et vérification email


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut champs requis et vérification email
    Bonjour,

    J'ai un petit formulaire tout simple, sur une seule page.
    Je voudrais vérifier l'adresse mail, ainsi que mettre des champs requis, mais je n'y arrive pas.

    Voila le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
      <?php
    if ($_POST["email"]<>'') {
        $ToEmail = 'mon@mail.fr';
        $EmailSubject = 'Formulaire de contact';
        $mailheader = "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $MESSAGE_BODY = "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= " Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= " Ville : ".$_POST["ville"]."";
        $MESSAGE_BODY .= " Message : ".nl2br($_POST["comment"])."";
     
        mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Désolé, une erreur est survenue...");
    ?>
    ! Votre message a bien ete envoye !
    <?php
    } else {
    ?>
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre ville :</td>
        <td><input type=text name=ville size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=comment></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
         <input type=reset value=Annuler>    
    </form>
    <?php
    };
    ?>
    J'ai regardé la FAQ, mais je n'arrive pas à appliquer le code, par exemple pour vérifier le mail.
    Pour ce code par exemple, je ne sais pas comment l'inséréer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    function verifMail ($mail) 
    {
    	if (preg_match ('/^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]/i', $mail ) ) {
    		return false;
    	}
    	list ($nom, $domaine) = explode ('@', $mail);
    	if (getmxrr ($domaine, $mxhosts))  {
    		return true;
    	} else {
    		return false;
    	} 
    } 
    ?>
    Y a-t-il d'autres choses à faire pour vérifier / sécuriser un formulaire comme celui-la ?

    Si quelqu'un peut me guider un peu svp ?
    Merci d'avance,
    Très cordialement,

    ANDRE Ani
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    A chaque fois que c'est possible, il est préférable d'utiliser filter_input ou filter_var() associé au filtre adéquat.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    heu... Désolé mais ça ne m'aide pas beaucoup.

    Je ne devrais pas utiliser le script de la FAQ c'est ça ?
    Et plutôt faire un truc avec filter_input ou filter_var()

    Je n'arrive déjà pas à utiliser le script, alors, en faire un moi-même pour modifier mon formulaire, c'est pas gagné.

    Lorsque j'ai essayé de l'intégrer, il s'affichait dans ma page...
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    Les FAQ ne sont pas toutes mises à jour et celle-ci a peut-être été faite avant l'existence de ces fonctions. Par ailleurs les fonctions natives ont l'avantage d'être mises à jour avec les différentes versions de php.
    Avec filter_var cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $mail = 'bob@example.com';
    if(filter_var($mail, FILTER_VALIDATE_EMAIL)) 
    {
        echo 'structure du mail valide';
    }
    else
    {
        echo 'structure du mail non valide';
    }

  5. #5
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    D'accord, c'est noté.

    Merci pour votre exemple, mais je n'arrive pas à le faire fonctionner, j'ai toujours le message d'erreur sur l'email qui s'affiche.
    Alors impossible de tester également si les champs sont vides ou non...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php
    if ($_POST["email"]<>'') {
        $ToEmail = 'mon@mail.fr';
        $EmailSubject = 'Formulaire de contact';
        $mailheader = "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $MESSAGE_BODY = "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= " Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= " Ville : ".$_POST["ville"]."";
        $MESSAGE_BODY .= " Message : ".nl2br($_POST["comment"])."";
     
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
    {
        echo ' ';
    }
    else
    {
        echo 'Veuillez entrer une adresse mail valide SVP ';
    }
     
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Désolé, une erreur est survenue...");
    ?>
    ! Votre message a bien ete envoye !
    <?php
    } else {
    ?>
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre ville :</td>
        <td><input type=text name=ville size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=comment></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
         <input type=reset value=Annuler>    
    </form>
    <?php
    };
    ?>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  6. #6
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Bon, en fait, il y a du mieux. En fait, il semble que je ne récupérais pas les variables si j'ai bien compris. Mais même si l'adresse mail est invalide, le message est envoyé quand même... C'est le test à la fin qui n'ai pas correct, et je ne sais pas trop comment l'arranger.
    En plus, je voudrais tester les champs vides.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?php
    if(isset($_POST['name']) and isset($_POST['firstname']) and isset($_POST['email']) )
    {
    $nom = $_POST['name'];
    $prenom = $_POST['firstname'];
    $email = $_POST['email'];
     
        $ToEmail = 'mon@mail.fr';
        $EmailSubject = 'Formulaire de contact';
        $mailheader = "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $MESSAGE_BODY = "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= " Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= " Ville : ".$_POST["ville"]."";
        $MESSAGE_BODY .= " Message : ".nl2br($_POST["comment"])."";
     
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
    {
        echo ' ';
    }
    else
    {
        echo 'Veuillez entrer une adresse mail valide SVP ';
    }
     
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Désolé, une erreur est survenue...");
    ?>
    ! Votre message a bien ete envoye !
    <?php
    } else {
    ?>
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre ville :</td>
        <td><input type=text name=ville size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=comment></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
         <input type=reset value=Annuler>    
    </form>
    <?php
    };
    ?>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    Ton appel à mail() n'est pas dans le if() else() donc il le fait systématiquement.

    Pour savoir si une variable est vide tu as empty(). empty() fait ce que fait isset() mais en vérifiant en plus que la variable n'est pas vide ou égale à 0.

  8. #8
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    D'accord pour les if, et merci pour la précision pour isset et empty.

    Mais je n'arrive quand même pas à faire fonctionner mon formulaire.

    Je test d'abord si les champs sont vides, puis si le mail est valide, puis si le message part correctement.
    Mais je dois me mélanger les pinceaux dans les différents if else, car le formulaire n'apparait plus, j'ai le message du mail invalide suivi de celui comme quoi le message est bien envoyé...

    Il me semble pourtant que les if sont bien imbriqués.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?php
    if(empty($_POST['name']) and empty($_POST['firstname']) and empty($_POST['email'])  and empty($_POST['phone']) and empty($_POST['message']))
    {
    $nom = $_POST['name'];
    $prenom = $_POST['firstname'];
    $email = $_POST['email'];
     
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
    {
     
    $phone = $_POST['phone'];
    $message = $_POST['message'];
     
        $ToEmail = mon@mail.fr';
        $EmailSubject = 'Formulaire de contact';
        $mailheader = "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $MESSAGE_BODY = "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= " Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= " Téléphone : ".$_POST["phone"]."";
        $MESSAGE_BODY .= " Message : ".nl2br($_POST["message"])."";
    
    if(mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader))
    {
    echo 'Votre message a bien été envoyé';
    }
    else
    {
    echo 'Veuillez renseigner tous les champs SVP';
    }
    }
    else
    {
    echo 'Veuillez indiquer une adresse mail valide SVP';
    }
    ?>
     
    <?php
    } else {
    ?>
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre téléphone :</td>
        <td><input type=text name=phone size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=message></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
         <input type=reset value=Annuler>    
    </form>
    <?php
    };
    ?>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(empty($_POST['name']))
    {
    $nom = $_POST['name'];
    Si le champ est vide, alors utiliser le champ... N'y aurait-il pas comme un problème ?

    Ensuite pour ne pas te mélanger les pinceaux, il vaut mieux indenter ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (condition1) {
        if (condition2) {
            if (condition3) {
                // condition1 et condition2 et condition3 OK
            } else {
                // condition 3 non OK
            }
        } else {
            // condition 2 non OK
        }
    } else {
    // condition 1 non OK
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Effectivement, vu comme ça, y a clairement un soucis... C'est pour déclarer mes variables ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $nom = $_POST['name'];
    $prenom = $_POST['firstname'];
    $email = $_POST['email'];
    Oui, il faut que j'apprenne à indenter et écrire plus clairement.

    Il y a aussi cette partie du code (entre le php et le html, à la fin des tests) je penses qui me cause problème certainement avec mes if / else :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    } else {
    ?>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  11. #11
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Toujours bloqué...
    Si le mail est vide, il y a bien le msg d'erreur, mais pas si un autre champ est vide.
    J'ai vérifié mais if / else, ça me semble pourtant bon cette fois-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    <?php
    if(isset($_POST['name']) and isset($_POST['firstname']) and isset($_POST['email'])  and isset($_POST['phone']) and isset($_POST['message']))
    {
    $nom = $_POST['name'];
    $prenom = $_POST['firstname'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
     
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
    {
        $EmailSubject = 'Formulaire de contact';
        $message .= $_POST['message'];
        $ToEmail .= 'patr_and@yahoo.fr';
        $mailheader .= "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $MESSAGE_BODY = "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= " Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= " Téléphone : ".$_POST["phone"]."";
        $MESSAGE_BODY .= " Message : ".$_POST["message"]."";
     
    	if(mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader))
    	{
    	 echo 'Votre message a bien été envoyé';
    	 }
        else
        {
          echo 'Une erreur est survenue';
        }
        }
    else
    {
    echo 'Tous les champs sont obligatoires, ou ladresse email est invalide';
    }
    }
    else
    {
    ?>
     
     
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre téléphone :</td>
        <td><input type=text name=phone size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=message></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
         <input type=reset value=Annuler>    
    </form>
    <?php
    }
    ?>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je pense que tu devrais utiliser !empty($_POST['le_nom_du_champ']) à la place de isset($_POST['le_nom_du_champ']). (ne pas oublier le "!" cette fois )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Oui... C'est plus logique avec le ! Merci.

    Mais ça ne fonctionne toujours pas.
    S'il manque un champ, email ou autre, rien ne se passe. Le mail ne part pas, mais pas de message d'erreur non plus.
    J'ai beau vérifier mais if else, je ne vois pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    <?php
    if(!empty($_POST['name']) and !empty($_POST['firstname']) and !empty($_POST['email'])  and !empty($_POST['phone']) and !empty($_POST['message']))
    {
    $nom = $_POST['name'];
    $prenom = $_POST['firstname'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
     
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
    {
        $EmailSubject = 'Formulaire de contact';
        $message .= $_POST['message'];
        $ToEmail .= 'mon@mail.fr';
        $mailheader .= "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $MESSAGE_BODY = "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= "Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= "Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= "Téléphone : ".$_POST["phone"]."";
        $MESSAGE_BODY .= "Message : ".$_POST["message"]."";
     
    	if(mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader))
    	{
    	 echo 'Votre message a bien été envoyé';
    	 }
        else
        {
          echo 'Une erreur est survenue';
        }
        }
    else
    {
    echo 'Tous les champs sont obligatoires, ou ladresse email est invalide';
    }
    }
    else
    {
    ?>
     
     
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre téléphone :</td>
        <td><input type=text name=phone size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=message></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
         <input type=reset value=Annuler>    
    </form>
    <?php
    }
    ?>
    Un détail aussi, impossible de revenir à la ligne dans le mail reçu pour avoir chaque champ sur une ligne. Je tente des \n ou \r mais rien n'y fait.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  14. #14
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Bon, il y a du mieux !
    Si tout est remplit le message part et affiche qu'il est bien partie.
    Si un champ est vide, le message ne part pas et avertit que les champs sont obligatoires.
    Si le mail est invalide, le message ne part pas et averti que le mail est invalide.

    Mais... Il y a maintenant toujours le message Tous les champs sont obligatoires en arrivant sur la page du formulaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?php
    if(!empty($_POST['name']) and !empty($_POST['firstname']) and !empty($_POST['phone']) and !empty($_POST['email']) and !empty($_POST['message'])) {
    $nom = $_POST['name'];
    $prenom = $_POST['firstname'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
     
      if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $EmailSubject = 'Formulaire de contact';
        $message = $_POST['message'];
        $ToEmail = 'mon@mail.fr';
        $mailheader .= "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $mailheader .= "MIME-Version: 1.0 \n";
        $mailheader .= "X-Mailer: PHP \n";
        $MESSAGE_BODY .= "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= " Téléphone : ".$_POST["phone"]."";
        $MESSAGE_BODY .= " Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= " Message : ".$_POST["message"]."";
     
    	if(mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader)) {
    	 echo 'Votre message a bien été envoyé';
    	 }    else    {
          echo 'Une erreur est survenue';
        }
        } else {
    echo "L'adresse email est invalide";
    }
    } else {
    echo 'Tous les champs sont obligatoires';
    ?>
     
     
    <form method=POST action=contact.php >
    <input type=hidden name=subject value=formmail>
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre téléphone :</td>
        <td><input type=text name=phone size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=message></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
         <input type=reset value=Annuler>    
    </form>
    <?php
    }
    ?>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  15. #15
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Un petit up svp.
    Il manque pas grand chose pour que cela fonctionne, mais je suis perdu. Je ne comprends pas pourquoi le message s'affiche à chaque fois, alors que le formulaire semble fonctionner...
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  16. #16
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le message s'affiche parce que lorsque tu arrives sur la page, les champs sont vides (logique, vu que le formulaire n'a pas encore été envoyé)
    Donc, il faut encadrer toute la mécanisme de vérification et traitement par une condition "Si le formulaire a été envoyé".

    Personnellement, j'utilise la technique du champ caché : un champ de type hidden dans le formulaire renseigné par défaut et qui ne sert qu'à tester si le formulaire est envoyé :
    Dans le formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="send" value="1">
    et dans la partie PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (!empty($_POST['send'])) {
        if(!empty($_POST['name']) and !empty($_POST['firstname']) and !empty($_POST['phone']) and !empty($_POST['email']) and !empty($_POST['message'])) {
        // ....
        } else {
        echo 'Tous les champs sont obligatoires';
        }
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  17. #17
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Oui, très logique en effet.

    Je dois avoir 2 mains gauches, ça ne fonctionne pas.

    J'ai inclu le champ caché comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form method=POST action=contact.php >
    <input type="hidden" name="send" value="1">
    <table>
    Et pour fermé le nouveau if, j'ai fait comme ça, après le dernier else :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    else {
    echo 'Tous les champs sont obligatoires';
    }
    ?>
    Et le formulaire ne s'affiche plus du tout...
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  18. #18
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Hum... M'est avis que tu as une accolade fermante mal placée. Le plus simple, c'est de sortir le formulaire de toutes les accolades.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  19. #19
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Décidément, ces if / else, j'ai vraiment du mal à...

    Voilà mon formulaire complet. Mais je ne vois pas trop ou fermer le if autrement. J'ai essyé à la fin du formulaire, mais c'est pareil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <?php
    if(!empty($_POST['send'])) {
    if(!empty($_POST['name']) and !empty($_POST['firstname']) and !empty($_POST['phone']) and !empty($_POST['email']) and !empty($_POST['message'])) {
    $nom = $_POST['name'];
    $prenom = $_POST['firstname'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
     
      if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $EmailSubject = 'Formulaire de contact';
        $message = $_POST['message'];
        $ToEmail = 'patr_and@yahoo.fr';
        $mailheader .= "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
        $mailheader .= "MIME-Version: 1.0 \n";
        $mailheader .= "X-Mailer: PHP \n";
        $MESSAGE_BODY .= "Nom : ".$_POST["name"]."";
        $MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
        $MESSAGE_BODY .= " Téléphone : ".$_POST["phone"]."";
        $MESSAGE_BODY .= " Email : ".$_POST["email"]."";
        $MESSAGE_BODY .= " Message : ".$_POST["message"]."";
     
    	if(mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader)) {
    	 echo 'Votre message a bien été envoyé';
    	 }    else    {
          echo 'Une erreur est survenue';
        }
        } else {
    echo "L'adresse email est invalide";
    }
    } 
    else {
    echo 'Tous les champs sont obligatoires';
    }
    ?>
     
     
    <form method=POST action=contact.php >
    <input type="hidden" name="send" value="1">
    <table>
    <tr><td>Votre nom :</td>
        <td><input type=text name=name size=30></td></tr>
    <tr><td>Votre prénom :</td>
        <td><input type=text name=firstname size=30></td></tr>
    <tr><td>Votre téléphone :</td>
        <td><input type=text name=phone size=30></td></tr>
    <tr><td>Votre email :</td>
        <td><input type=text name=email size=30></td></tr>
    <tr><td colspan=2>Votre message :<br>
      <textarea COLS=50 ROWS=6 name=message></textarea>
    </td></tr>
    </table>
    <br> <input type=submit value=Envoyer> -
              <input type=reset value=Annuler>
    </form>
    <?php
    }
    ?>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  20. #20
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Ton indentation et le "découpage" de ton code sont juste horrible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    	if(!empty($_POST['send']))
    	{
    		if(!empty($_POST['name']) and !empty($_POST['firstname']) and !empty($_POST['phone']) and !empty($_POST['email']) and !empty($_POST['message']))
    		{
    			$nom = $_POST['name'];
    			$prenom = $_POST['firstname'];
    			$phone = $_POST['phone'];
    			$email = $_POST['email'];
     
    		  	if(filter_var($email, FILTER_VALIDATE_EMAIL))
    		  	{
    				$EmailSubject = 'Formulaire de contact';
    				$message = $_POST['message'];
    				$ToEmail = 'patr_and@yahoo.fr';
    				$mailheader .= "From: ".$_POST["email"]."\r\n";
    				$mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
    				$mailheader .= "Content-type: text/html; charset=UTF-8\r\n";
    				$mailheader .= "MIME-Version: 1.0 \n";
    				$mailheader .= "X-Mailer: PHP \n";
    				$MESSAGE_BODY .= "Nom : ".$_POST["name"]."";
    				$MESSAGE_BODY .= " Prénom : ".$_POST["firstname"]."";
    				$MESSAGE_BODY .= " Téléphone : ".$_POST["phone"]."";
    				$MESSAGE_BODY .= " Email : ".$_POST["email"]."";
    				$MESSAGE_BODY .= " Message : ".$_POST["message"]."";
     
    				if(mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader))
    				 	echo 'Votre message a bien été envoyé';
    				else
    				 	echo 'Une erreur est survenue';
    			}
    		    else 
    				echo "L'adresse email est invalide";
    		}
    		else 
    			echo 'Tous les champs sont obligatoires';
    		echo get_form();
    	}
     
    	function get_form()
    	{
    		return "<form method=POST action=contact.php >
    		<input type=\"hidden\" name=\"send\" value=\"1\">
    		<table>
    		<tr><td>Votre nom :</td>
    			<td><input type=text name=name size=30></td></tr>
    		<tr><td>Votre prénom :</td>
    			<td><input type=text name=firstname size=30></td></tr>
    		<tr><td>Votre téléphone :</td>
    			<td><input type=text name=phone size=30></td></tr>
    		<tr><td>Votre email :</td>
    			<td><input type=text name=email size=30></td></tr>
    		<tr><td colspan=2>Votre message :<br>
    			<textarea COLS=50 ROWS=6 name=message></textarea>
    		</td></tr>
    		</table>
    		<br><input type=submit value=Envoyer> -
    			<input type=reset value=Annuler>
    		</form>";
    	}
    ?>
    Je me suis contenté d'un echo d'une string, mais ton formulaire aurait très bien plus être déclaré comme étant un bloc de texte et éviter l'insertion de '\' devant les doubles quotes.
    Sinon j'ai pas compris pourquoi tu concatènes rien à la fin de ton $MESSAGE_BODY .= "Nom : ".$_POST["name"]."";

    Bonne chance pour ton débogage, mais essayes de découper encore d'avantage le code, c'est pas bien compliqué et ça permet une meilleure lisibilité

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/06/2011, 15h39
  2. [AJAX] champs requis avec jquery
    Par mademoizel dans le forum AJAX
    Réponses: 1
    Dernier message: 17/01/2011, 11h01
  3. [ZF 1.9] Champs requis "conditionnels"
    Par Guillaume.S dans le forum Zend_Form
    Réponses: 8
    Dernier message: 16/03/2010, 09h33
  4. [AC-2007] Remplir le champs .body de mon email
    Par theBinette dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/02/2010, 12h23
  5. Formulaire avec captcha et vérification email correct
    Par hersir dans le forum Zend_Form
    Réponses: 2
    Dernier message: 08/12/2009, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo