Fonction PHP : Envoyer des mails

Suivre ce topic
Ce topic est suivi par : Personne...
Ce topic a été résolu
Profil introuvable

Profil introuvable Le 23 juin 2016 à 23:36 (Édité le 25 janvier 2019 à 17:51)

Bonjour à tous ! 😉

J'ai coder un formulaire en HTML de manière simple, j'ai déjà vu la vidéo de Boris (https://www.youtube.com/watch?v=c4C0LXmSHhE) mais il a des trucs que je ne saisi pas, ayant pas de connaissance en PHP (pas encore 😫) j'aimerais que lorsque l'utilisateur clique sur le bouton "Soumettre le formulaire" le fichier PHP gère :
-Si les champs ne sont pas complétés, il affiche un message d'erreur (en majuscule) "Merci de bien vouloir vérifier que tous les champs contiennent les bonnes informations. Merci."
-Si les champs sont compléter mais invalide, il affiche toujours le même message.
-Si les champs sont compléter et valide, il envoie le message.

Voici le formulaire de contact en HTML :

<form action="php\send_form.php" method="post" class="form-style-9">
            <ul>
                <li>
                    <input type="text" name="field1" class="field-style field-split align-left" placeholder="Nom (requis)"/>
                </li>
            <li>
        <input type="email" name="field2" class="field-style field-split align-right" placeholder="Email (requis)"/>
            </li>
                <li>
                    <input type="text" name="field3" class="field-style field-full align-none" placeholder="Sujet"/>
            </li>
        <li>
        <textarea name="field5" class="field-style" placeholder="Message"></textarea>
            </li>
                <li>
                    <input type="submit" value="Soumettre le formulaire" title="Soumettre le formulaire"/>
            </li>
        </ul>
        </form>
Si vous pouvez le remarquez, j'appelle le fichier PHP dans le code HTML.
Si vous pouvez me programmer le fichier PHP et m'expliquer le code en détails, se serait cool pour un premier cours en PHP 😄

Merci d'avance 😉
Ranarxhag

Ranarxhag Le 24 juin 2016 à 13:40

Donne-nous le code de ton fichier PHP mais d'abord une question : connais-tu au moins un peu le PHP ?
Profil introuvable

Profil introuvable Le 24 juin 2016 à 14:14

Re :

Voilà le souci, je n'ai pas encore appris le PHP donc je connais rien sur le PHP, j'appelle un fichier PHP dans le code mais je ne l'ai pas programmer, je me suis arrêté la, ça fait bien longtemps, et quand j'ai découvert le forum de Boris, je me suis inscrit et vous le faire part sur ce topic. 😄 😰

Pouvez-vous m'aider ? 😰
Ranarxhag

Ranarxhag Le 24 juin 2016 à 14:58

Le truc c'est que l'envoi d'un mail avec sa vérification d'erreurs, c'est la base. 2-3 conditions puis c'est tout.

Je pourrais te faire le code mais tu n'y comprendrais rien si tu n'as jamais utilisé un langage de programmation.

Le seul truc que je vais te donner c'est un conseil :
Prend ton mal en patience et apprend le PHP. Tu pourras faire cet envoi d'email très facilement et un tas d'autres choses 😉
Balatharas

Balatharas Le 24 juin 2016 à 19:53 (Édité le 24 juin 2016 à 20:20)

Salut @Jerem971 😀
Bon je suis gentil j'ai du temps alors je  vais te montrer les conditions en détail avec des explications. Mais d'abord je ne comprends pas trop ceci:

-Si les champs sont compléter mais invalide, il affiche toujours le même message.
Tu veux dire une vérification d'email ?
EDIT: J'ai rien dit pour action=""  :D
Profil introuvable

Profil introuvable Le 24 juin 2016 à 20:22

Re :

Merci pour tes conseils 'Ranarxhag', j'aurais quand même voulu que tu me montres le code puis tu me l'explique par la suite, comme ça je comprendrais 😉 J'apprendrais le PHP plus tard, c'est juste un fichier PHP pour envoyer un mail, rien de plus.

Salut 'Beignet', content de te revoir 😉

-Si les champs sont compléter mais invalide, il affiche toujours le même message.
C'est-à-dire celui ci : "Merci de bien vouloir vérifier que tous les champs contiennent les bonnes informations. Merci." (Tu n'a jamais remarquer quand tu cliques sur "Soumettre le formulaire" d'un formulaire avec de fausses informations un message de ce type apparaît en rouge ?)

"action="php\send_form.php"" est correct, qu'est-ce que tu me racontes la ?

Bon je suis gentil j'ai du temps alors je  vais te montrer les conditions en détail avec des explications.
Peut-tu me montrer comment faire ?
Balatharas

Balatharas Le 24 juin 2016 à 20:31

Alors j'ai toujours pas trop compris cette ligne, mais en gros tu souhaites qu'il y ai une vérification de l'existence du mail ? Ou alors une vérification du pseudo etc s'il existe dans ton site ? Sinon je suis en train de faire le code avec juste la vérification d'email.
Profil introuvable

Profil introuvable Le 24 juin 2016 à 20:48

Re:

Oui c'est ça, par exemple rend-toi ici : http://christians-steffen.fr/contact/
Sans remplir le formulaire, clique sur "Soumettre le formulaire", tu comprendras 😉
Balatharas

Balatharas Le 24 juin 2016 à 21:11 (Édité le 24 juin 2016 à 21:18)

Alors !
D'abord voilà le code:
PHP
<?php
if(isset($_POST['form-style-9']))
{
    if(filter_var($_POST['field2'], FILTER_VALIDATE_EMAIL) AND !empty($_POST['field1']) AND !empty($_POST['field2']) AND !empty($_POST['field3']) AND !empty($_POST['field5']))
    {
        $destinataire = "ton email@domaine.fr";
        $header="MIME-Version: 1.0\r\n";
        $header.='From:"ton pseudo"<ton email@domaine.fr>'."\n";
        $header.='Content-Type:text/html; charset="uft-8"'."\n";
        $header.='Content-Transfer-Encoding: 8bit';
        $message=$field5;
        mail($destinataire, "ton objet ici", $message, $header);
        $error = "Succès !";
    }
    else
    {
       $error = "Merci de bien vouloir vérifier que tous les champs contiennent de bonnes informations. Merci.";
    }
}
?>
Formulaire avec un peu de php
<form action="" method="POST" class="form-style-9">
            <ul>
                <li>
                    <input type="text" name="field1" id="field1" class="field-style field-split align-left" placeholder="Nom (requis)"/>
                </li><br />
                <li>
                    <input type="mail" name="field2" id="field2" class="field-style field-split align-right" placeholder="Email (requis)"/>
                </li><br />
                <li>
                    <input type="text" name="field3" id="field3" class="field-style field-full align-none" placeholder="Sujet"/>
                </li><br />
                <li>
                    <textarea name="field5" id="field5" class="field-style" placeholder="Message"></textarea>
                </li><br />
                <li>
                    <input type="submit" value="Soumettre le formulaire" name="form-style-9" title="Soumettre le formulaire"/>
                </li>
            </ul>
        </form>
        <?php
        if(isset($error))
        {
            echo '<font color="#C22B2B">'.$error.'</font>';
        }
        ?>
D'abord, la condition if(isset($_POST[''])) veut dire "Si on clique sur le bouton, alors...." et entre les accolades { } on a "....on vérifie que le format de l'email rentré dans field2, qui est le champ du mail,  est valide et que les champs sont tous bien remplis."
Ensuite dans cette condition la, on va traiter l'envoi du mail. Tous les $header sont les paramètres du mail. Le premier tu n'as pas vraiment besoin de t'en occuper. Le second: From="TonPseudo" c'est le pseudo qui va apparaître comme "nom de contact" et entre les chevrons, l'email du contact. Le reste tu n'a pas besoin de t'y attarder non plus.
Ensuite $message = $field5 c'est l'affichage dans le mail du message écrit par l'utilisateur.
mail() normalement je n'ai pas besoin de t'expliquer.
Maintenant }else{ $error = .....; c'est, si il y a un quelconque problème, que l'adresse email est invalide ou que un ou plusieurs champs ne sont pas remplis alors on affiche une erreur sous le formulaire avec 
   if(isset($error))
   {
      echo '<font color="#C22B2B">'.$error.'</font>';
   }
Donc a la fin on obtiens
Si on clique sur le bouton, alors, on vérifie que le format  de l'email rentré dans field2, qui est le champ du mail,  est valide et que les champs sont tous bien remplis. Ensuite on envoi le mail. Après on affiche les erreurs "Succès !" s'il n'y a pas de problème ou "Merci de bien vouloir vérifier que tous les champs contiennent de bonnes informations. Merci." s'il y en a un.

Voilà 😄 ah et je te déconseille d'utiliser un fichier distant pour le traitement du mail.
Profil introuvable

Profil introuvable Le 24 juin 2016 à 21:25 (Édité le 24 juin 2016 à 21:47)

Re :

Merci 'Beignet' pour toutes ces explications, donc je récapitule :

if(isset($error))
   {
      echo '<font color="#C22B2B">'.$error.'</font>';
   }
Je l'insère à la suite du code du formulaire de contact en HTML, puis je rempli le fichier le fichier PHP avec ce code :

<?php
if(isset($_POST['form-style-9']))
{
    if(filter_var($_POST['field2'], FILTER_VALIDATE_EMAIL) AND !empty($_POST['field1']) AND !empty($_POST['field2']) AND !empty($_POST['field3']) AND !empty($_POST['field5']))
    {
        $destinataire = "ton email@domaine.fr";
        $header="MIME-Version: 1.0\r\n";
        $header.='From:"ton pseudo"<ton email@domaine.fr>'."\n";
        $header.='Content-Type:text/html; charset="uft-8"'."\n";
        $header.='Content-Transfer-Encoding: 8bit';
        $message=$field5;
        mail($destinataire, "ton objet ici", $message, $header);
        $error = "Succès !";
    }
    else
    {
       $error = "Merci de bien vouloir vérifier que tous les champs contiennent de bonnes informations. Merci.";
    }
}
?>
N'ai-je pas oublier quelque chose ?

Qu'entends-tu par :

Voilà  ah et je te déconseille d'utiliser un fichier distant pour le traitement du mail.
Que veux-tu dire par la ?
Balatharas

Balatharas Le 24 juin 2016 à 21:34

Oui c'est cela 😄
Qu'entends-tu par : 

Voilà  ah et je te déconseille d'utiliser un fichier distant pour le traitement du mail.
Que veux-tu dire par la ?
Je voulais dire que je te déconseillais de mettre action="php\send_form.php" c'est a dire d'utiliser un fichier distant pour mettre le php, tout simplement parce que si tu as quelques chose a modifier ce sera plus simple.
Profil introuvable

Profil introuvable Le 24 juin 2016 à 21:45

Re:

Je pense que mélanger les codes ne sont pas une bonne solution, car au début (quand j'étais petit) j'ai programmer le début de mon site et j'ai mis ensemble l'HTML et le CSS dans le même fichier. C'est pratique pour modifier rapidement mais quand on regarde le code (Ctrl+U) sur le navigateur, on se rend compte que c'est comme le code source de la page Google donc en désordre ! 😮

C'est pour cela que maintenant j'appelle les fichiers CSS, PHP, JavaScript, JQuery...etc.
D'ailleurs, le site du zéro l'explique 😉

Merci de m'avoir aidé 'Beignet', je met le sujet en résolu après avoir fait quelque test 😉
Balatharas

Balatharas Le 24 juin 2016 à 22:43

C'est vrai @Jerem971 😀 moi personnellement je met seulement le PHP dans la même page. Sauf pour certaines choses comme la connexion a la base de données. Sinon le CSS JS etc je fais comme ça.

Content d'avoir pu t'aider 😄 ;) 
Profil introuvable

Profil introuvable Le 25 juin 2016 à 19:06

Re:

Tu avais oublier de fermer avec "?>", ce qui donne :

<?php
        if(isset($error))
        {
        echo '<font color="#C22B2B">'.$error.'</font>';
        }
        ?>
De plus, cela ne fonctionne pas quand je clique sur "Soumettre le formulaire", aucun message d'erreur n'apparait, le navigateur m'affiche le code du fichier PHP

De plus, sur ma page HTML apparait ceci : "'.$error.'';}?>" en dessous du bouton "Soumettre le formulaire"

As-tu fait une erreur quelque part ?
Balatharas

Balatharas Le 25 juin 2016 à 19:24

Salut @Jerem971 désolé je ne vois pas 😦 
Essaie comme je t'ai dit, de mettre le php dans le même fichier. Car sinon je ne vois vraiment pas, j'ai pris des bout de mes codes et 
<?php
if(isset($error))
{
   echo '<font color="#C22B2B">'.$error.'</font>';
}
?>
ce code la est copié-collé du mien donc il n'y a pas de raisons. A part si le fichier qui le contient est au format HTML. Si oui il faut le mettre au format PHP.
Profil introuvable

Profil introuvable Le 25 juin 2016 à 19:33

Re:

Mon site web est fait que de page HTML, j'ai introduit le code, voila ce que ça donne :

<!DOCTYPE html">
<html lang="fr">
    <meta charset="utf-8" />
   <link rel="stylesheet" href="css\contact.css" type="text/css" media="all"/>
   
   <p><font size="4"><font face="Calibri">Pour me contacter, veuillez remplir le formulaire ci-dessous. Soyez patient pour l’obtention d’une réponse !</font></font></p>

<form action="php\send_form.php" method="post" class="form-style-9">
         <ul>
            <li>
               <input type="text" name="field1" class="field-style field-split align-left" placeholder="Nom (requis)"/>
            </li>
         <li>
      <input type="email" name="field2" class="field-style field-split align-right" placeholder="Email (requis)"/>
         </li>
            <li>
               <input type="text" name="field3" class="field-style field-full align-none" placeholder="Sujet"/>
         </li>
      <li>
      <textarea name="field5" class="field-style" placeholder="Message"></textarea>
         </li>
            <li>
               <input type="submit" value="Soumettre le formulaire" title="Soumettre le formulaire"/>
         </li>
      </ul>
      </form>
      <?php
      if(isset($error))
      {
      echo '<font color="#C22B2B">'.$error.'</font>';
      }
      ?>

</html>
Ensuite, j'ai copier/coller le code PHP pour le mettre dans le fichier PHP (send_form.php) :

<?php
if(isset($_POST['form-style-9']))
{
    if(filter_var($_POST['field2'], FILTER_VALIDATE_EMAIL) AND !empty($_POST['field1']) AND !empty($_POST['field2']) AND !empty($_POST['field3']) AND !empty($_POST['field5']))
    {
        $destinataire = "mon email@domaine.fr";
        $header="MIME-Version: 1.0\r\n";
        $header.='From:"mon pseudo"<mon email@domaine.fr>'."\n";
        $header.='Content-Type:text/html; charset="uft-8"'."\n";
        $header.='Content-Transfer-Encoding: 8bit';
        $message=$field5;
        mail($destinataire, "mon objet ici", $message, $header);
        $error = "Succès !";
    }
    else
    {
       $error = "Merci de bien vouloir vérifier que tous les champs contiennent de bonnes informations. Merci.";
    }
}
?>
Ou se trouve l'erreur ? 😤
Balatharas

Balatharas Le 26 juin 2016 à 14:14 (Édité le 26 juin 2016 à 14:19)

Hello @Jerem971
Si le fichier qui contient 
<?php
if(isset($error))
{
   echo '<font color="#C22B2B">'.$error.'</font>';
}
?>
est dans un fichier HTML (ex: index.html) alors il faut renommer ce fichier index.php c'est la seule solution.
Si il y a encore une erreur lors de la soumission du formulaire:
Essaie comme je t'ai dit, de mettre le php dans le même fichier.
Profil introuvable

Profil introuvable Le 26 juin 2016 à 18:28

Re:

Si le fichier qui contient est dans un fichier HTML (ex: index.html) alors il faut renommer ce fichier index.php c'est la seule solution.
Tu veux dire que mon fichier "contact.html" deviendra "contact.php" le fait qu'il y est du code PHP dans le code HTML ?

Essaie comme je t'ai dit, de mettre le php dans le même fichier.
Je vais essayer 😉
Balatharas

Balatharas Le 26 juin 2016 à 18:33

Oui voilà c'est plus logique 😉
Profil introuvable

Profil introuvable Le 26 juin 2016 à 18:41

Re:

Je viens d'essayer, toujours le même problème que ce soit de modifier l'extension du fichier, que ce soit d'insérer le code PHP dans l'HTML, toujours le même problème 😕

As-tu une autre solution ? 😦
Balatharas

Balatharas Le 26 juin 2016 à 18:49

En tout cas tu as une erreur de résolue.. Je vais chercher un peu je te redis..
Profil introuvable

Profil introuvable Le 26 juin 2016 à 18:50

Re:

Fais quelque test avec mon code HTML et ton code PHP et tiens-moi au courant des nouveautés 😉
Balatharas

Balatharas Le 26 juin 2016 à 19:01

Voilà j'ai réussi 😄
Alors tu mets bien ce code dans un fichier contact.php
<?php
if(isset($_POST['form-style-9']))
{
    if(filter_var($_POST['field2'], FILTER_VALIDATE_EMAIL) AND !empty($_POST['field1']) AND !empty($_POST['field2']) AND !empty($_POST['field3']) AND !empty($_POST['field5']))
    {
        $destinataire = "mon email@domaine.fr";
        $header="MIME-Version: 1.0\r\n";
        $header.='From:"mon pseudo"<mon email@domaine.fr>'."\n";
        $header.='Content-Type:text/html; charset="uft-8"'."\n";
        $header.='Content-Transfer-Encoding: 8bit';
        $message=$field5;
        mail($destinataire, "mon objet ici", $message, $header);
        $error = "Succès !";
    }
    else
    {
       $error = "Merci de bien vouloir vérifier que tous les champs contiennent de bonnes informations. Merci.";
    }
}
?>
<html>
   <head>
      <meta charset="utf-8" />
      <link rel="stylesheet" href="css\contact.css" type="text/css" media="all"/>
      <title>Contact</title>
   </head>
   <body>
      <p>
         <font size="4"><font face="Calibri">Pour me contacter, veuillez remplir le formulaire ci-dessous. Soyez patient pour l’obtention d’une réponse !</font></font>
      </p>
      <form action="" method="post" class="form-style-9">
            <ul>
               <li>
                  <input type="text" name="field1" class="field-style field-split align-left" placeholder="Nom (requis)"/>
               </li>
               <li>
                  <input type="email" name="field2" class="field-style field-split align-right" placeholder="Email (requis)"/>
               </li>
               <li>
                  <input type="text" name="field3" class="field-style field-full align-none" placeholder="Sujet"/>
               </li>
               <li>
                  <textarea name="field5" class="field-style" placeholder="Message"></textarea>
               </li>
               <li>
                  <input type="submit" value="Soumettre le formulaire" title="Soumettre le formulaire"/>
               </li>
            </ul>
      </form>  
      <?php
      if(isset($error))
      {
         echo '<font color="#C22B2B">'.$error.'</font>';
      }
      ?>    
   </body>
</html>

J'ai un peu refait ton code, je l'ai réorganisé et j'ai ajouté quelques balises comme body et head.
Profil introuvable

Profil introuvable Le 26 juin 2016 à 19:06

Re :

Tu as fait un test vérifiant si il n'y a pas d'erreur ? Je vais essayer de mon côté 😉 Merci 😉
Balatharas

Balatharas Le 26 juin 2016 à 19:08

Oui je n'en ai pas eu 😀