Création du formulaire de contact

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
On créer une nouvelle page nommé "contact.php" à partir du gabarit :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>Formulaire de contact</title>
<meta name="Description" content="Formulaire de contact" />
<link href="http://<?php echo $_SERVER['HTTP_HOST'];?>/style.css" rel="stylesheet" type="text/css"/>
</head>
 
<body>
<div id="moncadre">
<?php include('menu.php');?>
<div class="cadrecentrale">
<h1>Formulaire de contact</h1>
<p>
<a title="Accueil" href="http://<?php echo $_SERVER['HTTP_HOST'];?>">Accueil</a> »
<a title="Formulaire de contact" href="http://<?php echo $_SERVER['HTTP_HOST'];?>/contact.php">Formulaire de contact</a>
</p>
</div>
<?php include('footer.php');?>
</div>
</body>
 
</html>
Au dessus du DOCTYPE, nous incluons le fichier de connexions et des fonctions puis on contrôle si l'adresse email à été rempli. Si la variable "$adresse_email" du fichier des fonctions est vide, on informe le webmaster et on bloque l'accès au formulaire :
<?php
//On se connecte à la base de données
include('connexion_bd.php');
include('fonctions.php');
connexion_bd();
//Le webmaster a oublier de saisir son adresse email
if(empty($adresse_email))
{
    echo '<p>Le formulaire de contact ne peux fonctionner sans adresse email! Merci de saisir votre adresse email dans le fichier adéquate.</p>';
    exit();
}
?>
Sous le fil d’Ariane, on créé un formulaire de contact comportant les champs suivant :
  • Objet du message.
  • Nom.
  • Email.
  • Texte.
  • Captcha.
Ce formulaire sera masqué une fois que tout les champs seront correctement remplis grâce à la variable "$masquer_formulaire".
<?php if($masquer_formulaire == 0) { ?>
    <div class="cadre">
    <form class="form" action="#ancre_formulaire" method="post">
 
    <label for="objet" id="objet">Objet du message :</label>
    <input name="objet" size="50" maxlength="100" type="text" value="<?php if (!empty($_POST["objet"])) { echo htmlspecialchars($_POST["objet"],ENT_QUOTES); } ?>"/><br/>
 
    <label for="nom" id="nom">Votre nom :</label>
    <input name="nom" size="50" maxlength="100" type="text" value="<?php if (!empty($_POST["nom"])) { echo htmlspecialchars($_POST["nom"],ENT_QUOTES); } ?>"/><br/>
 
    <label for="email" id="email">Votre email :</label>
    <input name="email_du_formulaire" size="50" maxlength="100" type="text" value="<?php if (!empty($_POST["email_du_formulaire"])) { echo htmlspecialchars($_POST["email_du_formulaire"],ENT_QUOTES); } ?>"/><br/>
 
    <label for="texte" id="texte">Texte :</label>
    <textarea name="demande_du_formulaire" rows="10" cols="50"><?php
    if (isset($_POST["demande_du_formulaire"])) {
        echo stripcslashes(htmlspecialchars($_POST["demande_du_formulaire"],ENT_QUOTES));
    }
    ?></textarea><br/>
 
    <label for="spam" id="spam">Captcha: </label>
    <input name="code_anti_spam" size="22" value="" type="text"/>  <span class="ok"><?php echo $pass;?></span><br/>
    <input name="clef" size="22" value="<?php echo $pass;?>" type="hidden"/>
 
    <label for="valider" id="valider">Action</label>
    <input value="Valider" name="Valider" type="submit" />
    <input name="Effacer" value="Effacer" type="reset" /><br/>
 
    </form>
    </div>
<?php } ?>
Le code que nous allons à présent mettre en place doit être mis sous le fil d’Ariane (donc "coincé" entre le fil d’Ariane et le formulaire).

Pour commencer, on récupère le timestamp du moment et l'adresse ip du posteur puis on initialise le masquage du formulaire :
<?php
$timestamp_actuel = time();
$ip = getIp();
$masquer_formulaire = 0;
Si l'action de valider a été faite, on place tout les champs dans des variables :
if(isset($_POST["Valider"]))
{
    $formulaire_objet = stripcslashes(htmlspecialchars($_POST["objet"]));
    $formulaire_nom = stripcslashes(htmlspecialchars($_POST["nom"]));
    $formulaire_email = stripcslashes(htmlspecialchars($_POST["email_du_formulaire"]));
    $formulaire_demande = stripcslashes(htmlspecialchars($_POST["demande_du_formulaire"]));
    $formulaire_anti_spam = stripcslashes(htmlspecialchars($_POST["code_anti_spam"]));
    $formulaire_clef = stripcslashes(htmlspecialchars($_POST["clef"]));
On vérifie si l'auteur du mail a été banni et si tel est le cas, on lui dit gentiment d'allé voir ailleurs et on stope tout :
    //On vérifie si l'auteur est banni (2)
    $ban = mysql_query("SELECT email,ip FROM COMMENTAIRE WHERE validation = '2' AND (ip = '".mysql_real_escape_string($ip)."' OR email = '".mysql_real_escape_string($formulaire_email)."')");
    //Si le résultat est différent de zéro, c'est que l'auteur est banni
    if(mysql_num_rows($ban) != 0)
    {
        echo '<div class="erreur"><a name="ok"></a>Le formulaire de contacte vous est refusé!</div>';
        exit();
    }
L'auteur du mail n'est pas banni, on contrôle chaque champ du formulaire :
    else if(empty($formulaire_objet)){
        echo '<a name="ancre_formulaire"></a><div class="erreur">Le champ "Objet" est vide.</div>';
    }
    else if(empty($formulaire_nom)){
        echo '<a name="ancre_formulaire"></a><div class="erreur">Le champ "Nom" est vide.</div>';
    }
    else if(empty($formulaire_email)){
        echo '<a name="ancre_formulaire"></a><div class="erreur">Le champ "Email" est vide.</div>';
    }
    else if (!preg_match("#^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$#",$formulaire_email))
    {
        echo '<a name="ancre_formulaire"></a><div class="erreur">Votre email semble ne pas être valide.</div>';
    }
    else if(empty($formulaire_demande)){
        echo '<a name="ancre_formulaire"></a><div class="erreur">Le champ "Texte" est vide.</div>';
    }
    else if(empty($formulaire_anti_spam)){
        echo '<a name="ancre_formulaire"></a><div class="erreur">Vous n\'avez pas saisie le code anti spam.</div>';
    }
    else if($formulaire_anti_spam != $formulaire_clef)
    {
        echo '<a name="ancre_formulaire"></a><div class="erreur">Le code anti spam est faux.</div>';
    }
Si tout c'est bien passé, on prépare le corp du mail :
    else
    {
        $msg = "Prise de contact avec le site http://".$_SERVER['HTTP_HOST']." .\n\n";
        $msg .= "Objet du message:\t$formulaire_objet\n";  
        $msg .= "$formulaire_demande\n\n\n";  
        $msg .= "Nom de votre interlocuteur:\t$formulaire_nom\n";
        $msg .= "Mail de votre interlocuteur:\t$formulaire_email\n";
        $msg .= "Date et heure :\tle ".convertit_timestamp_en_date("$timestamp_actuel")."\n";
        $msg .= "Adresse Ip de votre interlocuteur en cas de besoin:\t ".getIp()."\n\n\n";
On prépare l'entête :
        $subject = "$formulaire_objet";
        $mailheaders = "From: $formulaire_email\n";
        $mailheaders .= "Reply-To: $formulaire_email\n\n";
        $mailheaders .='Content-Type: text/html; charset="iso-8859-1"\n';
        $mailheaders .='Content-Transfer-Encoding: 8bit';
On envoie le mail :
        mail($adresse_email, $subject, $msg, $mailheaders);
Le mail est envoyé, on cache le formulaire :
        $masquer_formulaire=1;
On informe le posteur :
        echo '<div class="ok"><a name="ancre_formulaire"></a>Votre message a été envoyé avec succès. Redirection automatique en cours...</div>';
On redirige vers la page d'accueil puis on referme tout :
        echo '<script> function redirection(page){ window.location=page; } setTimeout(\'redirection("index.php")\',8000); </script>';
    }
}
?>
Formulaire de contact
Voir/déposer un commentaire (0) | Signaler un problème