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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Forum] PHP et la fonction mail()


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Par défaut [Forum] PHP et la fonction mail()
    Bonsoir à tous,
    je suis débutant en PHP, et j'ai réalisé un site grâce aux langages XHTML et CSS.
    J'ai une page qui s'intitule contact.php
    Sur cette page se trouve un formulaire dans lequel on trouve 4 entrées : Nom, Entreprise (facultatif), Mail, Remarque.
    Voici le code de ce 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
     
    <form action="contact.php" method="post" />
    <p>N'hésitez pas à utiliser le formulaire ci-contre pour nous faire part de vos remarques</p>
    <input type="hidden" name="destinataire" value="<a href="mailto:rousseau.olivier@hotmail.fr">rousseau.olivier@hotmail.fr</a>" />
    <table>
     <tr>
      <td class="intitule">Nom:<sup>*</sup></td>
      <td class="champ"> <input type="text" name="nom" size="32"> <br /></td>
     </tr>
     <tr>
      <td class="intitule">Entreprise:</td>
      <td class="champ"> <input type="text" name="entreprise" size="32"> <br /></td>
     </tr>
     
     <tr>
      <td class="intitule">Mail:<sup>*</sup></td>
      <td class="champ"> <input type="text" name="mail" size="32"> <br /><td>
     </tr>
     
     <tr>
      <td class="intitule">Remarque:<sup>*</sup></td>
      <td class="champ"> <textarea name="remarque" cols="45" rows="6"></textarea> <br /></td>
     </tr>
    </table>
    <p><em>(Les champs marqués d'un * doivent être obligatoirement remplis)</em></p>
    <input type="submit" value="Envoyer" />
    </form>
    Je souhaite maintenant insérer un script PHP qui permettrai d'envoyer le contenu du formulaire à mon adresse e-mail donné dans le champ de type "hidden". Je crois que c'est comme ça qu'on fait

    Visiblement, c'est la fonction php mail() que je dois utiliser, mais, étant débutant, je ne sais pas du tout comment l'utiliser.
    J'aimerai que :
    $destinataire=$_GET['destinataire'];
    $sujet="Vous avez un nouveau message de $_GET['nom'];
    $message=$_GET['remarque'];
    Avant tout il faut surement que j'utilise isset pour vérifier l'existence des variables

    En gros, c'est quelque chose comme ça, n'hésitez pas à me demander si vous ne comprenez pas qqch.
    Autre question, ce script, je l'inscrit sur une autre page ou sur la même page (contact.php) ?

    Merci d'avance de votre patience

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Tu peux ecrire ton script sur la même page ou sur une autre page, c'est à toi de voir. En l'ecrivant sur une autre page tu gagneras en lisibilité.

    Il faut que tu vérifie que tes variables remplies par l'utilsiateur soient non nulles, et correspondent au type de données attendu. En effet sinon tu vas rencontrer certains problèmes. Il faut aussi que tu verifi que l'adresse mail soit valide.

    Voila pour plus de détails sur la fonction mail : mail() (php.net)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Par défaut
    Merci beaucoup pour ce premier élément de réponse.
    Alors, voilà, comme je l'ai déjà dit je suis débutant en PHP.

    Voilà donc ce que j'ai réalisé.
    Dans un premier temps, je vous présente le code (X)HTML de mon formulaire que j'ai mis sur la page intitulée contact.php, puis je vous présente mon script PHP que j'ai mis sur une page intitulé mail_envoi.php.
    Pouvez-vous me dire s'il y a des erreurs ?

    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
     
    <form action="mail_envoi.php" method="post" />
    <p>N'hésitez pas à utiliser le formulaire ci-contre pour nous faire part de vos remarques</p>
    <input type="hidden" name="destinataire" value="rousseau.olivier@hotmail.fr" />
    <table>
        <tr>
            <td class="intitule">Nom:<sup>*</sup></td>
            <td class="champ"> <input type="text" name="nom" size="32"> <br /></td>
        </tr>
     
        <tr>
            <td class="intitule">Entreprise:</td>
            <td class="champ"> <input type="text" name="entreprise" size="32"> <br /></td>
        </tr>
     
        <tr>
            <td class="intitule">Mail:<sup>*</sup></td>
            <td class="champ"> <input type="text" name="mail" size="32"> <br /><td>
        </tr>
     
        <tr>
            <td class="intitule">Remarque:<sup>*</sup></td>
            <td class="champ"> <textarea name="message" cols="45" rows="6"></textarea> <br /></td>
        </tr>
    </table>
    <p><em>(Les champs marqués d'un * doivent être obligatoirement remplis)</em></p>
    <input type="submit" value="Envoyer" />
    </form>
    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
     
    <?php
        if(isset($_POST['nom']) AND isset($_POST['mail']) AND isset($_POST['remarque']))
        {
        $to = $_POST['destinataire'];
        $subject = $_POST['nom'];
     
        $message = $_POST['message'];
        $message = "Line 1\nLine2\nLine3";
        $message = wordwrap($message, 70);
     
        $headers = 'From: $nom';
     
        mail($to, $subject, $message, $headers);
     
        echo 'Votre mail a bien été envoyé';
        }
        else
        {
        echo 'Vous avez omis de remplir un champ, votre mail n\'a donc pu être correctement acheminé vers votre destinataire.';
        }
        ?>
    Alors voilà, j'ai fait un petit test, et, alors que j'ai bien renseigné les trois champs obligatoires, c'est l'écho de 'else' qui m'est renvoyé.
    Il y a dans mon formulaire, trois champs qui doivent être renseignés obligatoirement : nom, mail, message. Le champ entreprise est facultatif.

    Pourriez-vous me donner un petit coup de main svp ?

    PS : j'ajoute que j'ai un peu de mal avec la variable $message dans le script PHP...

  4. #4
    Membre confirmé Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Par défaut
    Salut,

    Quelques remarques :

    Tu ecris ton site en XHTML mais tu utilises encore un tableau pour la mise en page ! Y a antinomie, là !

    N'écris pas ton adresse mail dans le HTML, même dans un hidden. Mets là uniquement dans le php, elle sera protégée des spammeurs. Là, elle ne l'est pas du tout (et encore moins si tu la diffuse sur un forum - cible privilégiée des robots de recherche de mail)

    Tu peux aussi vérifier la pertinence des saisies, en Javascript (avec les inconvénients que cela implique) avant de lancer le traitement php du mail

    Mets ton traitement du mail sur la même page que ton formulaire. Il ne sera executé que si certaines données existent dans le $_POST, sinon, c'est le formulaire qui sera affiché. Et si tu traite le pertinence en php, cela te permettra d'afficher des messages d'erreur directement sur le formulaire.

    Si mail() ne fonctionne pas c'est peut-être parce que tu es en localhost (dans ce cas je crois qu'il faut tripoter la config d'Apache ou de php.ini) ou que tu es hébergé par un gratuit qui, en général, désactivent cette fonctionnalité. Je crois qu'on peut le voir sur phpinfo mais je ne sais plus où.

    Il faut séparer les tests sur les saisies de l'erreur d'envoi. Ton mail peut ne pas partir pour des raisons techniques (serveur smtp KO...). Ton utilisateur va s'arracher les cheveux a essayer de comprendre ce qu'il a pu écrir de travers alors que tout est bon.


  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Par défaut
    Tu peux aussi vérifier la pertinence des saisies, en Javascript (avec les inconvénients que cela implique) avant de lancer le traitement php du mail
    Je n'ai pas bien compris ce que tu as dit, je suis débutant, et je ne connais pas le Javascript

    Mets ton traitement du mail sur la même page que ton formulaire. Il ne sera executé que si certaines données existent dans le $_POST, sinon, c'est le formulaire qui sera affiché. Et si tu traite le pertinence en php, cela te permettra d'afficher des messages d'erreur directement sur le formulaire.
    Donc si je comprends bien, tu me conseilles de mettre mon script PHP sur la page contact.php et non sur envoi_mail.php ?

    Il faut séparer les tests sur les saisies de l'erreur d'envoi. Ton mail peut ne pas partir pour des raisons techniques (serveur smtp KO...). Ton utilisateur va s'arracher les cheveux a essayer de comprendre ce qu'il a pu écrir de travers alors que tout est bon.
    Dernière question...j'ai pas compris

    Merci !

    €dit :

    Je viens de réctifier un peu le tir. Je suis parvenu à envoyer un mail : j'ai tout d'abord modifier le fichier de configuration php.ini en remplaçant localhost par smtp.wanadoo.fr.
    Résultat : je reçois bien un mail.

    Mais je n'arrive pas à donner une valeur à la variable $headers.
    En effet, je voudrais que dans From: apparaisse l'adresse de l'expediteur, mais comment écrire ça en PHP :
    $adresse = $_GET['mail'];
    $headers = 'From:'.$adresse.'';
    Mais visiblement cela ne fonctionne pas puisque mon champ expéditeur est vide sur la boite mail.

    Merci beaucoup, grâce à vous je parviens à comprendre, et surtout à apprécier la grandeur de PHP !

  6. #6
    Membre confirmé Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Par défaut
    Pardon pour le délai mais je n'ai pas recu la notification de nouveau message par mail.
    Citation Envoyé par lolo_the_fripouille
    Je n'ai pas bien compris ce que tu as dit, je suis débutant, et je ne connais pas le Javascript
    Tu peux vérifier que le formulaire est bien remplit soit en Javascript, lorsque l'utilisateur clique sur le bouton "envoyer" avant d'envoyer réellement le formulaire (ce qui te permet d'annuler l'envoi mais est inutilisable si l'utilisateur à désactivé Javascript), soit de vérifier les saisies en php, donc après l'envoi du formulaire.

    Citation Envoyé par lolo_the_fripouille
    Donc si je comprends bien, tu me conseilles de mettre mon script PHP sur la page contact.php et non sur envoi_mail.php ?
    Oui, le principe est le suivant (dans l'ordre du code de la page)
    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
    //1 - Initialisation des variables (par défaut)
    $Nom = '';
    $Tel = '';
    $Adresse = '';
    ...
    $ErreurNom = false;
    $ErreurTel = false;
     
    //2 - Tester si $_POST contient une des variables du formulaire
    if(isset($_POST['Nom'])) // Ce champ fait partie du formulaire qui a donc été soumis
    {
         // 3 - Récupération des données
         $Nom = $_POST['Nom'];
         $Tel = $_POST['Tel'];
         ...
         // 4 - Recherche des erreurs de saisie
         if($Tel == '') $ErreurTel = true;
         if($Adresse == '') $ErreurAdresse = true;
         ...
         // 5 - On regarde si on envoi le mail ou si on affiche une alerte de saisie
         if( $ErreurTel Or $ErreurAdresse Or $Erreur...)
                echo 'Votre saisie comporte des erreur (indiquées en rouge)...';
          else
         {
              // 6 - Envoie du mail car pas d'erreur de saisie
              ...
              $resultmail = mail(....);
              if($resultmail)
              {
                  // 7 - Le mail est bien parti => message de confirmation
                  exit();
              }
              esle
              {
                   // 8 - Le mail n'est pas parti pour des raisons techniques
                   // Affichage d'un message d'erreur
                   exit();
               }
         }
    }
     
    // A ce niveau, soit c'est le premier affichage du formulaire, 
    // soit il a déjà été soumis et comporte des erreurs
    // Affichage du corps de la page (le formulaire)
         // 9 - Préparation des classes si il y a erreur
         if($ErreurNom) $ClasseNom = 'erreur' else $ClasseNom = 'normal';
         if($ErreurTel) $ClasseTel = 'erreur' else $ClasseTel = 'normal';
         ...
         // 10 - Affichage du formulaire (vide ou préremplit avec les messages d'erreur 
        // ici je me contente d'afficher le label dans un style différent)
     
        <form...>
             <label for="Nom" class="<?php echo $ClasseNom; ?>">Votre nom</label>
             <input type="text" ... value="<?php echo $Nom; ?>" />
             <label for="Tel" class="<?php echo $ClasseTel; ?>">Téléphone</label>
             <input type="text" ... value="<?php echo $Tel; ?>" />
            ...
         </form>
    Bien sûr, ce qui est ci-dessus n'est qu'un canevas ecrit à la volée et il existe autant de façon de le traiter qu'il existe de développeur
    D'autant qu'en le relisant, on doit pouvoir faire beaucoup mieux en terme de structuration des test et de l'affichage (si tu as un pied de page, tous mes "exit()" sont bons à jeter)

    Citation Envoyé par lolo_the_fripouille
    Dernière question...j'ai pas compris
    Regardes les points 4 et 8. La fonction mail te retourne vrai ou faux selon qu'elle a réussi ou non a envoyer le mail. Un retour à faux ne veut pas du tout dire que le formulaire est mal saisi (contrairement à ce que laisse entendre ton code).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/12/2008, 09h32
  2. [FLASH MX] Problème flash et fonction mail() php
    Par proutcore dans le forum Flash
    Réponses: 7
    Dernier message: 21/05/2007, 12h21
  3. configurer php.ini pour fonction mail
    Par michka999 dans le forum Apache
    Réponses: 4
    Dernier message: 06/09/2006, 14h13
  4. [Mail] php et la fonction mail
    Par kagura dans le forum Langage
    Réponses: 1
    Dernier message: 01/09/2006, 19h30
  5. [Forum] Fonction mail() ne marche pas chez OVH ?
    Par quanou dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 08/11/2005, 13h11

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