Page 1 sur 1

[TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:22
par CowBoy
Salut,


Cela fait maintenant près de un mois que je recherche des tutos pour créer des formulaires de contact :D .Donc je me suis fait une petite compilation, et je vous la propose, ça vous évitera un jour de fouiller le net complet :lol:


SOMMAIRE :
  • I.) Présentation
  • II.) Le HTML du formulaire
  • III.) Amélioration du formulaire HTML
  • IV.) Le PHP du formulaire
  • V.) Amélioration du formulaire PHP
  • VI.) Un peu de CSS
  • VII.) Code final/complet

PS : Donnez moi vos avis ;)

Re: [TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:23
par CowBoy
I.) Présentation

Tout d'abord, j'ai créé ce tutoriel même pour les personnes qui n'ont de compétence en programmation. Donc j'expliquerai les moindre détails, ne vous étonnez pas. J'expliquerai étape par étape ce que je fais, afin que vous puissiez comprendre. Si à des moments, vous avez des petits problèmes de compréhension, signalez-le moi, je ferai de mon possible afin que vous compreniez.
Ce formulaire est une compilation de plusieurs tutos, et une amélioration de ma part. Chacun est ensuite libre de droit d'en faire ce que vous voulez. Vous pouvez très bien le transformer à votre manière. ;)

Ensuite, je tiens également à préciser que ce formulaire sera valide html. C'est toujours mieux, lorsque l'on respecte les "règles" ;) . Et une dernière chose, je vous ai fournit le code complet/final à la fin du tutoriel, mais je pense (et j'en suis sûr !), qu'il est préférable de comprendre le code. Alors lisez le tutoriel complet avant de prendre le code ;) . Merci.
Bon, je vais arrêter de vous baratiner avec ça, passons aux parties plus intéressantes, les codes. Bonne chance 8-)

Re: [TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:24
par CowBoy
II.) Le HTML du formulaire

Le formulaire contiendra 7 "parties" :
  • Le champ "E-Mail" qui sera obligatoire
  • Le champs "Nom", qui sera obligatoire
  • Le champs "Prénom", qui sera obligatoire
  • Le champs "Sujet du message", qui lui, ne sera pas obligatoire
  • Le champs "Message", qui sera bien évidemment obligatoire
  • Le bouton "Réinitialiser" afin de remettre les donnés à zéro
  • Et le bouton "Envoyer", afin que le visiteur vous transmettre son message
Donc on commence.

On crée la balise "Form" qui sert à indiquer que c'est un formulaire.

Code : Tout sélectionner

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
</form>

On crée 3 "fieldset" qui permettront de séparer les parties. Dans mon exemple :
  • Données Personnelles (pour y mettre : E-Mail ; Nom ; Prénom)
  • Commentaires / Remarques / Etc... (pour y mettre : Sujet ; Message)
  • Envoi / Réinitialisation (pour y mettre les boutons : Envoi ; Réinitialiser)

Code : Tout sélectionner

<fieldset>
<legend>Données Personnelles</legend>
</fieldset>

<fieldset>
<legend>Commentaires / Remarques / Etc...</legend>
</fieldset>

<fieldset>
<legend>Envoi / Réinitialisation</legend>
</fieldset>
[alinea]Dans le "fieldset" "Données Personnelles" :[/alinea]

Code : Tout sélectionner

<p>
<label for="email_expediteur">Votre adresse e-mail (obligatoire) : </label><br/>
<input name="email_expediteur" type="text" id="email_expediteur" size="54"/>
</p><br/>

<p><label for="nom">Nom (obligatoire) : </label><br/>
<input type="text" id="nom" name="nom" size="54"/></p><br/>

<p><label for="prenom">Prénom (obligatoire) : </label><br/>
<input type="text" id="prenom" name="prenom" size="54"/></p><br/>
Dans le "fieldset" "Commentaires / Remarques / Etc..." :

Code : Tout sélectionner

<p>
<label for="titre">Sujet du message (facultatif) : </label><br />
<input type="text" size="54" name="titre" id="titre"/>
</p><br/>

<p>
<label for="message">Message (obligatoire) : </label><br />
<textarea name="message" id="message" cols="41" rows="10"></textarea>
</p><br/>
[alinea]Et dans le "fieldset" "Envoi / Réinitialisation" :[/alinea]

Code : Tout sélectionner

<div><p>
<input type="reset" name="reset" value="Rénitialiser"/>
<input type="submit" name="envoyer" value="Envoyer"/></p></div>

Récapitulatif du code html :

Code : Tout sélectionner

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<fieldset>
<legend>Données Personnelles</legend>

<p>
<label for="email_expediteur">Votre adresse e-mail (obligatoire) : </label><br/>
<input name="email_expediteur" type="text" id="email_expediteur" size="54"/>
</p><br/>

<p><label for="nom">Nom (obligatoire) : </label><br/>
<input type="text" id="nom" name="nom" size="54"/></p><br/>

<p><label for="prenom">Prénom (obligatoire) : </label><br/>
<input type="text" id="prenom" name="prenom" size="54"/></p><br/>

</fieldset>


<fieldset>
<legend>Commentaires / Remarques / Etc...</legend>


<p>
<label for="titre">Sujet du message (facultatif) : </label><br />
<input type="text" size="54" name="titre" id="titre"/>
</p><br/>

<p>
<label for="message">Message (obligatoire) : </label><br />
<textarea name="message" id="message" cols="41" rows="10"></textarea>
</p><br/>

</fieldset>

<fieldset>
<legend>Envoi / Réinitialisation</legend>

<div><p><input type="reset" name="reset" value="Rénitialiser"/><input type="submit" name="envoyer" value="Envoyer"/></p></div>
</fieldset>

</form>

Re: [TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:26
par CowBoy
III.) Amélioration du formulaire HTML


Déjà ? :shock: Oui :mrgreen: . On va déjà améliorer notre HTML en ajoutant tout simplement un petit peu de php. Pourquoi ? Ben tout simplement car je vous ai "dit" (vous l'avez remarqué plutôt si vous avez bien lu :D ) qu'il y avait des champs obligatoires. Si il y a des champs obligatoires, il peut y avoir des erreurs.

Et donc si a un moment il y a une erreur, celui qui écrit aime bien que tout ce qu'il a écrit soit encore là :roll:
Ça l'évites de tout réécrire :lol: .


Donc on va faire intervenir le PHP. Sans le reste du code PHP qui interviendra par la suite, ce code ne peux pas servir, mais il faut bien commencer d'un bout :mrgreen:

[alinea]Donc afin de faire ceci fonctionner, dans les "input", on ajoutes "valeur". Exemple pour E-Mail :[/alinea]

Code : Tout sélectionner

<p><label for="email_expediteur">Votre adresse e-mail (obligatoire) : </label><br/>
<input name="email_expediteur" type="text" id="email_expediteur" value="<?php
if (!empty($_POST["email_expediteur"])) {
echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
}
?>" size="54"/>
</p><br/>
Donc ça, c'est pour tout les input. Maintenant, il y a aussi le "textaera". C'est a dire, le "Message". Pour donc ajouter aussi ce code, c'est encore plus simple. On le place entre "<textaera>" et "</textaera>". Voila ce que ça nous donne :

Code : Tout sélectionner

<p>
<label for="message">Message (obligatoire) : </label><br />
<textarea name="message" id="message" cols="41" rows="10"><?php
if (isset($_POST["message"])) {
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?>
</textarea>
</p><br/>
Bon, donc en résumer, voila notre partie HTML (avec un peu de PHP) :

Code : Tout sélectionner

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<fieldset>
<legend>Données Personnelles</legend>

<p>
<label for="email_expediteur">Votre adresse e-mail (obligatoire) : </label><br/>
<input name="email_expediteur" type="text" id="email_expediteur" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["email_expediteur"])) {
echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
}
?>" size="54"/>
</p><br/>

<p><label for="nom">Nom (obligatoire) : </label><br/>
<input type="text" id="nom" name="nom" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["nom"])) {
echo htmlspecialchars($_POST["nom"],ENT_QUOTES);
}
?>" size="54"/></p><br/>

<p><label for="prenom">Prénom (obligatoire) : </label><br/>
<input type="text" id="prenom" name="prenom" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["prenom"])) {
echo htmlspecialchars($_POST["prenom"],ENT_QUOTES);
}
?>" size="54"/></p><br/>

</fieldset>


<fieldset>
<legend>Commentaires / Remarques / Etc...</legend>


<p>
<label for="titre">Sujet du message (facultatif) : </label><br />
<input type="text" size="54" name="titre" id="titre" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["titre"])) {
echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
}
?>" />
</p><br/>

<p>
<label for="message">Message (obligatoire) : </label><br />
<textarea name="message" id="message" cols="41" rows="10"><?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (isset($_POST["message"])) {
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?>
</textarea>
</p><br/>

</fieldset>

<fieldset>
<legend>Envoi / Réinitialisation</legend>

<div><p><input type="reset" name="reset" value="Rénitialiser"/><input type="submit" name="envoyer" value="Envoyer"/></p></div>
</fieldset>

</form>
Voila ;) . A la suite maintenant :mrgreen: .

Re: [TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:27
par CowBoy
IV.) Le PHP du formulaire


Bon, voila la partie qui va, je pense, être la plus longue. Dedans, il va y avoir le code pour vérifier les champs qui sont obligatoires pour voir s'ils ne sont pas vides, vérifier si l'adresse E-Mail est correcte (ben ... façon de dire. Si elle a une bonne forme. Car on ne peut vérifier si l'adresse existe vraiment ;) ), l'affichage des erreurs (si il y en a bien sur :mrgreen: ), l'envoi de l'E-Mail, l'affichage d'un texte de remerciement, et encore d'autres petits trucs par ci par là ...

Donc on y va. On commence avec, une chose assez importante, votre E-Mail. Oui, car si un visiteur vous contact, il faut bien que ça arrive quelque part ... Ensuite, on traite les données du formulaire, et on indique en "$etat", une valeur "erreur" pour le moment car on n'a rien vérifier. Donc ça nous donne ça :

Code : Tout sélectionner

<?php
// E-Mail du destinataire
$email_webmaster = "*********@******.**";

// Traitement des données du formulaire
if (isset($_POST["envoyer"])){
// Le formulaire a été soumis.

$etat = "erreur";
// Pour le moment, l'état est erreur. Si toutes les informations sont juste, l'état changera par la suite.

?>
On ajoute maintenant la mise en forme des champs, et on test si les champs obligatoires ne sont pas vide. Ensuite, on vérifie également si l'adresse E-Mail à une forme correcte. Si quelque chose à une erreur, on affiche une description à cette erreur. Si tout roule correctement, alors on modifie la valeur de "$etat" en "ok" :

Code : Tout sélectionner

// Mise en forme des champs saisis dans le formulaire lors de sa soumission
        if (isset($_POST["email_expediteur"])) {
                 $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
        }
        if (isset($_POST["nom"])) {
                 $_POST["nom"]=trim(stripslashes($_POST["nom"]));
        }
        if (isset($_POST["prenom"])) {
                 $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));
        }
        if (isset($_POST["titre"])) {
                 $_POST["titre"]=trim(stripslashes($_POST["titre"]));
        }
        if (isset($_POST["message"])) {
                 $_POST["message"]=trim(stripslashes($_POST["message"]));
        }
        
// Test de la validité des champs saisis

        if (empty($_POST["email_expediteur"])) {
// Si le champs de l'E-Mail est vide :
                 $erreur="Merci de saisir votre adresse email.";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3}$",$_POST["email_expediteur"])){
// Si l'adresse E-Mail n'est pas une adresse E-Mail valide :
                 $erreur="Votre adresse e-mail n'est pas valide. Merci de recommencer.";
        }
        elseif (empty($_POST["nom"])) {
// Si le champs du nom est vide :
                 $erreur="Merci de saisir votre nom.";
        }
        elseif (empty($_POST["prenom"])) {
// Si le champs du prénom est vide :
                 $erreur="Merci de saisir votre prénom.";
        }
        elseif (empty($_POST["message"])) {
// Si le champs du message est vide :
                 $erreur="Merci de saisir votre message.";
        }
        else {
// Tout les champs ont correctement été remplis, on remplace alors l'état en "ok".
                 $etat="ok";
        }
}
Maintenant, si le cette page est lu mais qu'aucunes informations n'a encore été rentrées dans le formulaire, on modifie l valeur de "$etat" en "attente". Et si il y a eu des erreurs plus haut, il faut l'afficher :

Code : Tout sélectionner

else {
// Si le formulaire n'a pas été soumis :
           $etat="attente";
}
// Fin de traitement des données du formulaire
 
 
 
// Si le formulaire n'a pas été soumis, ou soumis avec une erreur :
if ($etat!="ok"){
         if ($etat=="erreur"){
// Si le formulaire a été soumis avec une erreur, on affiche l'erreur :
                         echo "<p><strong>".$erreur."</strong></p>n";
         }
[centrer]A cette place, on insère le code HTML.[/centrer]


Maintenant, on envoi le mail si tout est correct, et on affiche une page de remerciement (ou une page pour dire que l'E-Mail n'a pu être envoyé).

Code : Tout sélectionner

<?php
}
else {


// Si le formulaire a été soumis sans erreur, on envoie l'E-Mail :

// On récupère l'E-Mail de l'expéditeur pour l'en-tête :
$entete = "From: ".$_POST["email_expediteur"]."";

// Et on envoi
        if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){
        
// Si l'E-Mail a été envoyé :
                echo "Votre message a correctement été envoyé. <br/>Merci.<br/>Aurélien.<br/><br/><br/><br/>";
                echo "<a href='index.php'>Retour à l'accueil.<br/><br/></a>";
 
        }
        else {
// Si il y a eu une erreur lors de l'envoi de l'E-Mail :
                echo "Un problème s'est produit lors de l'envoi du message.<br/>Merci de recommencer.<br/>Si le problème perciste, merci de me contacter à *******@********.** <br/><br/>Aurélien";
                echo "<a href='contact.php'>Cliquer ici pour retourner à la page de contact.</a><br /><br /><br /><br /><br /><br /><br /><br /><br />n";
        }
}
?>

Et voila, le principal est terminé ! :D

Re: [TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:29
par CowBoy
V.) Amélioration du formulaire PHP

Bon, je ne sais pas si vous avez essayé, ou certains compris, mais lorsque vous envoyé le mail, premièrement, les accents ou symboles spéciaux ne sont pas prit et comptes et remplacer par des trucs bizarres :mrgreen: , et deuxièmement, on demande le nom et le prénom du visiteur, mais on en le reprends même pas par la suite :lol: . Alors on va s'occuper de tout ça.

Étant donné que je suis logique, on va commencer par le deuxième problème :mrgreen: . Pour ça, on va personnaliser le corps du message. Et donc on va faire ceci :

Code : Tout sélectionner

// On récupère tout les champs :
$nom = $_POST["nom"];
$prenom = $_POST["prenom"];
$email_expediteur = $_POST["email_expediteur"];
$titre = $_POST["titre"];
$message = $_POST["message"];

// On crée la présentation du corps de l'E-Mail :
$msg = "Cette E-Mail a été envoyé depuis le site de ******* \r\n\r\n";

$msg .= "Envoyé par : $nom $prenom \r\n";
$msg .= "Son E-Mail est : $email_expediteur \r\n\r\n";

$msg .= "Voici son message :\r\n";
$msg .= "Sujet : $titre \r\n";
$msg .= "* * * * * * * * * * * * * * * * * * * * * * * * * * *\r\n";
$msg .= " $message \r\n";
$msg .= "* * * * * * * * * * * * * * * * * * * * * * * * * * *\r\n";
Bien sur, le corps du message n'est plus "message", mais maintenant "msg". Donc on modifie ceci dans l'envoi de l'E-Mail :

Code : Tout sélectionner

// On récupère l'E-Mail de l'expéditeur pour l'en-tête :
$entete = "From: ".$_POST["email_expediteur"]."";

        if (@mail($email_webmaster,$_POST["titre"],$msg,$entete)){

Et la premier problème ... Alors on va tout simplement utiliser "utf8_decode($...)" que l'on va insérer dans l'envoi de l'E-Mail :

Code : Tout sélectionner

        if (@mail($email_webmaster,$_POST["titre"],utf8_decode($msg),$entete)){
Et là, vous recevrez les E-Mail avec des accents :D .


Donc on a fait tout le boulot là presque :mrgreen:

Re: [TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:29
par CowBoy
VI.) Un peu de CSS

Bon, ce n'était pas du tout le but du tutoriel, donc je vais vous donner un petit bout de code qui ne servira à peu de chose, mais améliorer le ;) :

Code : Tout sélectionner

legend
{
	background-color:silver;
}

label
{
	margin-left:20px;
}

input
{
	border:none;
	border:1px solid black;
	margin-left:20px;
}

fieldset
{
	margin-left:5px;
	margin-bottom:10px;
}

textarea
{
	margin-left:20px;
	border:1px solid black;
}
C'est peut, et il est adapter à mon site. Donc ça ne vous servira surement pas à grand chose, mais mieux vaut un petit truc que rien :D

Re: [TUTORIEL] Formulaire de Contact

Posté : 10 oct 2009 17:30
par CowBoy
VII.) Code final/complet


Bon, voilà le tout. Modifier le à votre sauce ;) :

Code : Tout sélectionner

<h1>Contact</h1>


<?php

// E-Mail du destinataire
$email_webmaster = "********@*******.**";

// Traitement des données du formulaire
if (isset($_POST["envoyer"])){
// Le formulaire a été soumis.


$etat = "erreur";
// Pour le moment, l'état est erreur. Si toutes les informations sont juste, l'état changera par la suite.


// Mise en forme des champs saisis dans le formulaire lors de sa soumission
        if (isset($_POST["email_expediteur"])) {
                 $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
        }
        if (isset($_POST["nom"])) {
                 $_POST["nom"]=trim(stripslashes($_POST["nom"]));
        }
        if (isset($_POST["prenom"])) {
                 $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));
        }
        if (isset($_POST["titre"])) {
                 $_POST["titre"]=trim(stripslashes($_POST["titre"]));
        }
        if (isset($_POST["message"])) {
                 $_POST["message"]=trim(stripslashes($_POST["message"]));
        }
        
// Test de la validité des champs saisis

        if (empty($_POST["email_expediteur"])) {
// Si le champs de l'E-Mail est vide :
                 $erreur="Merci de saisir votre adresse email.";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3}$",$_POST["email_expediteur"])){
// Si l'adresse E-Mail n'est pas une adresse E-Mail valide :
                 $erreur="Votre adresse e-mail n'est pas valide. Merci de recommencer.";
        }
        elseif (empty($_POST["nom"])) {
// Si le champs du nom est vide :
                 $erreur="Merci de saisir votre nom.";
        }
        elseif (empty($_POST["prenom"])) {
// Si le champs du prénom est vide :
                 $erreur="Merci de saisir votre prénom.";
        }
        elseif (empty($_POST["message"])) {
// Si le champs du message est vide :
                 $erreur="Merci de saisir votre message.";
        }
        else {
// Tout les champs ont correctement été remplis, on remplace alors l'état en "ok".
                 $etat="ok";
        }
}
else {
// Si le formulaire n'a pas été soumis :
           $etat="attente";
}
// Fin de traitement des données du formulaire
 
 
 
// Si le formulaire n'a pas été soumis, ou soumis avec une erreur :
if ($etat!="ok"){
         if ($etat=="erreur"){
// Si le formulaire a été soumis avec une erreur, on affiche l'erreur :
                         echo "<p><strong>".$erreur."</strong></p>n";
         }

?>


<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<fieldset>
<legend>Données Personnelles</legend>

<p>
<label for="email_expediteur">Votre adresse e-mail (obligatoire) : </label><br/>
<input name="email_expediteur" type="text" id="email_expediteur" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["email_expediteur"])) {
echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
}
?>" size="54"/>
</p><br/>

<p><label for="nom">Nom (obligatoire) : </label><br/>
<input type="text" id="nom" name="nom" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["nom"])) {
echo htmlspecialchars($_POST["nom"],ENT_QUOTES);
}
?>" size="54"/></p><br/>

<p><label for="prenom">Prénom (obligatoire) : </label><br/>
<input type="text" id="prenom" name="prenom" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["prenom"])) {
echo htmlspecialchars($_POST["prenom"],ENT_QUOTES);
}
?>" size="54"/></p><br/>

</fieldset>


<fieldset>
<legend>Commentaires / Remarques / Etc...</legend>


<p>
<label for="titre">Sujet du message (facultatif) : </label><br />
<input type="text" size="54" name="titre" id="titre" value="<?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (!empty($_POST["titre"])) {
echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
}
?>" />
</p><br/>

<p>
<label for="message">Message (obligatoire) : </label><br />
<textarea name="message" id="message" cols="41" rows="10"><?php
// Si il y a eu une erreur, pour ne pas perdre ce que le visiteur avait préalablement écrit, on le remet.
if (isset($_POST["message"])) {
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?>
</textarea>
</p><br/>

</fieldset>

<fieldset>
<legend>Envoi / Réinitialisation</legend>

<div><p><input type="reset" name="reset" value="Rénitialiser"/><input type="submit" name="envoyer" value="Envoyer"/></p></div>
</fieldset>

</form>
<?php
}
else {


// Si le formulaire a été soumis sans erreur, on envoie l'E-Mail :

// On récupère tout les champs :
$nom = $_POST["nom"];
$prenom = $_POST["prenom"];
$email_expediteur = $_POST["email_expediteur"];
$titre = $_POST["titre"];
$message = $_POST["message"];

// On crée la présentation du corps de l'E-Mail :
$msg = "Cette E-Mail a été envoyé depuis le site de Villers \r\n\r\n";

$msg .= "Envoyé par : $nom $prenom \r\n";
$msg .= "Son E-Mail est : $email_expediteur \r\n\r\n";

$msg .= "Voici son message :\r\n";
$msg .= "Sujet : $titre \r\n";
$msg .= "* * * * * * * * * * * * * * * * * * * * * * * * * * *\r\n";
$msg .= " $message \r\n";
$msg .= "* * * * * * * * * * * * * * * * * * * * * * * * * * *\r\n";

// On récupère l'E-Mail de l'expéditeur pour l'en-tête :
$entete = "From: ".$_POST["email_expediteur"]."";

        if (@mail($email_webmaster,$_POST["titre"],utf8_decode($msg),$entete)){
        
// Si l'E-Mail a été envoyé :
                echo "Votre message a correctement été envoyé. <br/>Merci.<br/>Aurélien.<br/><br/><br/><br/>";
                echo "<a href='index.php'>Retour à l'accueil.<br/><br/></a>";
 
        }
        else {
// Si il y a eu une erreur lors de l'envoi de l'E-Mail :
                echo "Un problème s'est produit lors de l'envoi du message.<br/>Merci de recommencer.<br/>Si le problème perciste, merci de me contacter à *********@*********.** <br/><br/>Aurélien";
                echo "<a href='contact.php'>Cliquer ici pour retourner à la page de contact.</a><br /><br /><br /><br /><br /><br /><br /><br /><br />n";
        }
}
?>







Voilà.
En espérant que ce tutoriel vous a plus, laissez moi vos bonnes ou mauvaises critiques (plutôt les bonnes :lol: ) ;)
@++
CowBoy

Re: [TUTORIEL] Formulaire de Contact

Posté : 11 oct 2009 16:19
par Machinchose
Salut Cowboy,

Pas mal du tout ta démo, bravo.

Juste un détail :
vérifier si l'adresse E-Mail est correcte (ben ... façon de dire. Si elle a une bonne forme. Car on ne peut vérifier si l'adresse existe vraiment ),
Première soluce : http://examples.mashupguide.net/lib/Zen ... esses.html

Deuxième soluce (je ne sais plus où j'ai pris ça, mais je crois que c'était sur CCM) :

Code : Tout sélectionner

<?
/*
===============================================================================
==                                                                           ==
==                                                                           ==
==  Fonction permettant de verifier une adresse mail.                        ==
==  Cette fonction va verifier l'adresse mail fournie en argument            ==
==  de plusieurs manières. Premièrement a l'aide d'expressions régulière     ==
==  afin de vérifier la syntaxe de celle-ci.                                 ==
==  ensuite une verification mx afin de verifier le domaine                  ==
==  et puis une connection sur le serveur afin de valider l'user             ==
==                                                                           ==
==  function verif_email($email,$debug)                                      ==
==                                                                           ==
==  $email adresse à verifier.                                               ==
==  $debug information de deboguage.                                         ==
==                                                                           ==
==                                                                           ==
===============================================================================
*/
 
function verif_email($email,$debug=false)
         {
         global $HTTP_HOST;
         $Return= array();
         /*
         Tableau pour contenir les info que la fct renvoie.
         $return['0'] = true/false état.
         $return['1'] = message.
 
 
         Nous sommes au commencement de nos test ici nous allons validé la syntaxe
         utilisé dans la variable $email.
         fonction utilisé eregi();
         <a href="http://www.manuelphp.com/php/function.eregi.php" target="_blank">http://www.manuelphp.com/php/function.eregi.php</a>
         */
         
         if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email))
            {
             /*
               Pour plus d'information sur la fonction eregi() veuillez voir : l'excellente page
               <a href="http://www.commentcamarche.net/php/phpreg.php3" target="_blank">http://www.commentcamarche.net/php/phpreg.php3</a>
             */
              $Return[0]=false;
              $Return[1]="${email} cet E-Mail n'as pas la bonne syntaxe.";
              if ($debug) echo "Erreur : ${email} cet E-Mail n'as pas la bonne syntaxe.<br>";
              return $Return;
            }//fin if regexp.
            
         else if($debug) echo "Confirmation : ${email} cet E-Mail n'as pas la bonne syntaxe.<br>";
         
         /*
         Notre première étape franchie avec succès, nous devons maintenant verifier l'existance
         d'un serveur a cette adresse.
         pour ce faire nous allons prendre la variable $email, et la diviser en ces deux composante.
         d'une part l'utilisateur et d'autre part le domaines une adresse mail ayant la forme
         <a href="mailto:utilisateur@domaine.com">utilisateur@domaine.com</a>.
         nous allons créer deux variables pour contenir cela
         $util utilisateur
         $domaine le domaine.
         
         nous allons utilisé deux fonctions de php :
         
         1) list  <a href="http://www.manuelphp.com/php/function.list.php" target="_blank">http://www.manuelphp.com/php/function.list.php</a>
         2) split <a href="http://www.manuelphp.com/php/function.split.php" target="_blank">http://www.manuelphp.com/php/function.split.php</a>
 
         voyons cela en action.
         */
         list ( $util, $domaine ) = split ("@",$email);
 
         /*
         maintenant on check l'existance du domaine.
         1) checkdnsrr <a href="http://www.manuelphp.com/php/function.checkdnsrr.php" target="_blank">http://www.manuelphp.com/php/function.checkdnsrr.php</a>
         */
         if ( checkdnsrr ( $domaine, "MX" ) )  {
          if($debug) echo "Confirmation : MX record du  {$Domain} existe.<br>";
          /*
           nous sauvons l'adress du mx record pour testerl'existence de serveur mail sur le domaine.
           1) getmxrr: <a href="http://www.manuelphp.com/php/function.getmxrr.php" target="_blank">http://www.manuelphp.com/php/function.getmxrr.php</a>
          */
           if ( getmxrr ($domaine, $mxHote))
            {
             if($debug)
             {
                echo "Confirmation : MX record du  {$Domain} confirmer par MX LOOKUP.<br>";
              for ( $i = 0,$j = 1; $i < count ( $mxHote ); $i++,$j++ )
              {
            echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result($j) - $mxHote[$i]<BR>";
              } // fin for
             } //fin if debug
            } //fin if getmxrr
          /*
            la fonction getmxrr a stocké les information concernant les mx records dans le tableau $mxHote
            nous allons employé l'une de ces valeurs pour notre connection.
          */
          $cible= $mxHote[0];
          
          }//fin if checkdnsrr
         else {
        // si il n'y a pas de  MX record simplement prendre le $domaine comme adresse pour la connection socket .
        $cible = $domaine;
        if ($debug) echo "Confirmation : MX record du {$Domain} n'existe pas.<br>";
              } //fin else checkdnsrr.
 
        /*
         nous sommes a la dernière étape a ce stade nous savons que l'adresse à une syntaxe valide et nous savons si le serveur mail
         est renseigné. nous allons donc ouvrir une session sur l'hote $mxHote et si nous obtenons une réponse valide allons checker
         l'utilisateur.
         1) fsockopen: <a href="http://www.manuelphp.com/php/function.fsockopen.php" target="_blank">http://www.manuelphp.com/php/function.fsockopen.php</a>
        */
        $connection= fsockopen ($cible,25);
        
        if ($connection)
          {
            if ($debug) echo "Connection réussie sur  {$cible} SMTP.<br>";
            /*
              la connection est réussie sur le serveur smtp.
              nous devons donc normalement recevoir une reponse contenant le code 220
              plus d'information sur le protocol smtp: <a href="http://www.commentcamarche.net/internet/smtp.php3" target="_blank">http://www.commentcamarche.net/internet/smtp.php3</a>
 
              1) fgets: <a href="http://www.manuelphp.com/php/function.fgets.php" target="_blank">http://www.manuelphp.com/php/function.fgets.php</a>
            */
            if ( ereg ( "^220", $Out = fgets ( $Connect, 1024 ) ) ) {
 
            // nous saluons le serveur smtp.
            fputs ( $connection, "HELO $HTTP_HOSTrn" );
                if ($debug) echo "en cours : HELO $HTTP_HOST<br>";
            $Out = fgets ( $connection, 1024 ); // reception reponse serveur.
 
            // envois de l'adresse de l'envoyeur au serveur.
            fputs ( $connection, "MAIL FROM: <{$email}>rn" );
                if ($debug) echo "en cours : MAIL FROM: <{$email}><br>";
            $From = fgets ( $connection, 1024 ); // reception reponse serveur.
 
            // envois de l'adresse cible.
            fputs ( $connection, "RCPT TO: <{$email}>rn" );
                if ($debug) echo "en cours : RCPT TO: <{$email}><br>";
            $To = fgets ( $Connect, 1024 ); // reception reponse serveur.
 
            // cloture de la connection.
            fputs ( $connection, "QUITrn");
                if ($debug) echo "en cours : QUIT<br>";
 
            fclose($connection);
 
                // nous verifions les reponse du serveur a propos de la commande to et mail.
                // le serveur renvois le code  550 si elle n'existe pas
                // check du mailbox.
                if ( !ereg ( "^250", $From ) || !ereg ( "^250", $To )) {
                    $Return[0]=false;
                    $Return[1]="{$email} le serveur rejete l'adresse.";
                    if ($debug) echo "{$email} le serveur rejete l'adresse.<br>";
                    return $Return;
                }
        }
          
          }//fin if $connection
        
        else {
        $Return[0]=false;
        $Return[1]="connection impossible E-Mail server ({$cible}).";
        if ($debug) echo "connection impossible E-Mail server ({$cible}).<br>";
        return $Return;
    }
    $Return[0]=true;
    $Return[1]="{$email} cet email est valide";
    return $Return;
         } //fin verif_email.
 
 
?>
Cela dit, il est clair qu'il y aura toujours moyen de contourner la vérification. Ne serait-ce que certains plugins un peu malhonnêtes comme "Jetable mail" pour cette indiscible horreur qu'est Firefox. Jetable mail ETAIT un plugin qui créait une adresse-masque et qui renvoyait vers la vraie adresse mail.

Maintenant, on fait comme ça : viewtopic.php?f=9&t=43

:mrgreen:

Re: [TUTORIEL] Formulaire de Contact

Posté : 11 oct 2009 16:38
par CowBoy
Salut,


Merci pour le détail, je regarderai ça dès que j'ai un peu de temps ;)


Merci beaucoup ;)
@++
CowBoy

Re: [TUTORIEL] Formulaire de Contact

Posté : 17 oct 2009 16:58
par Papylo
Super ton tuto!

Merci beaucoup CowBoy et passe une bonne fin de journée!

Papylo :)

Re: [TUTORIEL] Formulaire de Contact

Posté : 25 nov 2009 03:52
par Shadow
Sans vouloir être un gros chiant...

Code : Tout sélectionner

</p><br/>
Enfer et damnation ! Qu'est-ce que c'est que ces histoires de retour de ligne en dehors de balises de paragraphes ? Et après on gueule qu'IE n'affiche pas correctement les pages ! :@
AGROUGROUM !

Re: [TUTORIEL] Formulaire de Contact

Posté : 18 sep 2013 19:16
par scarabus
Merci beaucoup pour ce tuto

Re: [TUTORIEL] Formulaire de Contact

Posté : 18 sep 2013 21:48
par fvz
Rooooooh, la vache !
On passe notre temps à se plaindre du délestage automatique intempestif ... et voilà que ressort un topic de la nuit des temps (octobre 2009 !!!!) ??
D'autant plus que, vu le sujet traité, on peut raisonnablement avoir quelques doutes quand à une éventuelle "popularité" lui ayant permis d'échapper au délestage ???
^^ ^^

Re: [TUTORIEL] Formulaire de Contact

Posté : 18 sep 2013 22:35
par ThiWeb
Wahou 2009 lol c'est beau de remonter 4 ans en arrière ^^
Comme tu dis, les sujet non délestés existent apparemment ;)

Enfin, dans Tuto, c'est normal.

ThiWeb

Re: [TUTORIEL] Formulaire de Contact

Posté : 22 sep 2013 14:31
par Azamat
Déterrer, c'est redonner vie alors ? Whaooou... à relier avec certains sujets de "Discussion libre" :d
CowBoy baignait déjà dans le code et Machinchose (p*t**n, MACHINCHOSE... !!!) était parfois courtois !!!
Bon, je récupère ce tuto qui pourrait bien me servir ! :)

Re: [TUTORIEL] Formulaire de Contact

Posté : 09 oct 2016 22:02
par docteurmaboul94
Merci :)

Re: [TUTORIEL] Formulaire de Contact

Posté : 15 nov 2016 14:45
par Marty
Ghostfly a écrit :A ne pas utiliser en 2016, et même en 2009 le code était moyen voir mauvais..

Ça mérite une petite mise à jour tout ça
Ben étant presque nul en codage, je suis intéressé, ça fait longtemps que j'attends une correction de ta part à propos de ce code. Le feras-tu un jour ?
En attendant c’est lui que j’utilise présentement, merci encore CowBoy, et merci d'avance à toi Ghostfly si un jour tu le fais.
Marty