Formulaire de contact multichamps

Soyez le premier à donner votre avis sur cette source.

Snippet vu 33 803 fois - Téléchargée 17 fois

Contenu du snippet

Un formulaire de contact assez complet avec envoi d'un accusé.

Utile pour un petit site professionnel ou associatif.

En démo ici: http://viki53.free.fr/contact.php

/!\ Ce script sert pour mon site, évitez de l'utiliser abusivement pour ne pas pourrir ma BAL.

Source / Exemple :


<?php
if (isset($_POST["envoyer"])){ // Si le formulaire a été soumis
    $etat = "erreur"; // On initialise notre etat à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon il reste à erreur

    // On récupère les champs du formulaire, et on arrange leur mise en forme
	
	if (isset($_POST["titre"])) $_POST["titre"]=trim(stripslashes($_POST["titre"]));
	
    if (isset($_POST["nom"])) $_POST["nom"]=trim(stripslashes($_POST["nom"]));
	
	if (isset($_POST["prenom"])) $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));

    if (isset($_POST["email"])) $_POST["email"]=trim(stripslashes($_POST["email"]));

    if (isset($_POST["url"])) $_POST["url"]=trim(stripslashes($_POST["url"]));
	
	if (isset($_POST["pays"])) $_POST["pays"]=trim(stripslashes($_POST["pays"]));
	
	if (isset($_POST["adresse"])) $_POST["adresse"]=trim(stripslashes($_POST["adresse"]));
	
	if (isset($_POST["code_postal"])) $_POST["code_postal"]=trim(stripslashes($_POST["code_postal"]));
	
	if (isset($_POST["ville"])) $_POST["ville"]=trim(stripslashes($_POST["ville"]));
	
	if (isset($_POST["telephone"])) $_POST["telephone"]=trim(stripslashes($_POST["telephone"]));

    if (isset($_POST["objet"])) $_POST["objet"]=trim(stripslashes($_POST["objet"]));
	
	if (isset($_POST["priorite"])) $_POST["priorite"]=trim(stripslashes($_POST["priorite"]));

    if (isset($_POST["message"])) $_POST["message"]=trim(stripslashes($_POST["message"]));

    // Après la mise en forme, on vérifie la validité des champs
    if (empty($_POST["nom"])) { // L'utilisateur n'a pas rempli le champ pseudo
        $erreur="Vous n'avez pas entré votre nom..."; // On met dans erreur le message qui sera affiché
        }
        elseif (empty($_POST["email"])) { // L'utilisateur n'a pas rempli le champ email
            $erreur="Nous avons besoin de votre e-mail pour vous répondre...";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email"])){ // On vérifie si l'email est bien de la forme messagerie@domaine.tld (cf cours d'expressions régulières)
            $erreur="Votre adresse e-mail n'est pas valide...";
        }
        elseif (empty($_POST["objet"])) { // L'utilisateur n'a pas rempli le champ objet
            $erreur="Vous devez entrer l'objet de votre message...";
        }
        elseif (empty($_POST["message"])) { // L'utilsateur n'a écrit aucun message
            $erreur="Merci de saisir un message...";
        }
        else { // Si tous les champs sont valides, on change l'état à ok
            $etat="ok";
        }
}
else { // Sinon le formulaire n'a pas été soumis
    $etat="attente"; // On passe donc dans l'état attente
}

if ($etat!="ok"){ // Le formulaire a été soumis mais il y a des erreurs (etat=erreur) OU le formulaire n'a pas été soumis (etat=attente)
    if ($etat=="erreur"){ // Cas où le formulaire a été soumis mais il y a des erreurs
        echo "<span style=\"color:red\">".$erreur."</span><br /><br />\n"; // On affiche le message correspondant à l'erreur
    }
?>
          <div class="contactform">
            <form method="post">
              <fieldset><legend>&nbsp;Vos détails&nbsp;</legend>
                <p><label for="contact_title" class="left">Votre titre :</label>
                   <select name="titre" id="contact_title" class="combo">
                     <option value="M." selected="selected">M.</option>
                     <option value="Mme">Mme</option>
                     <option value="Mlle">Mlle</option></select></p>
					 
                <p><label for="contact_firstname" class="left">Nom* :</label>
                   <input type="text" name="nom" id="contact_firstname" class="field" value="<?php
        if (!empty($_POST["nom"])) {
        echo htmlspecialchars($_POST["nom"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_familyname" class="left">Prénom :</label>
                   <input type="text" name="prenom" id="contact_familyname" class="field" value="<?php
        if (!empty($_POST["prenom"])) {
        echo htmlspecialchars($_POST["prenom"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_street" class="left">Adresse :</label>
                   <input type="text" name="adresse" id="contact_street" class="field" value="<?php
        if (!empty($_POST["adresse"])) {
        echo htmlspecialchars($_POST["adresse"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_postalcode" class="left">Code postal :</label>
                   <input type="text" name="code_postal" id="contact_postalcode" class="field" value="<?php
        if (!empty($_POST["code_postal"])) {
        echo htmlspecialchars($_POST["code_postal"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_city" class="left">Ville :</label>
                   <input type="text" name="ville" id="contact_city" class="field" value="<?php
        if (!empty($_POST["ville"])) {
        echo htmlspecialchars($_POST["ville"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_country" class="left">Pays:</label>
                   <select name="pays" id="contact_country" class="combo">
                     <option value="N/A">Sélection...</option>
                     <option value="France">France</option>
                     <option value="Canada">Canada</option>
                     <option value="Etats-Unis">États-Unis</option>
				   </select></p>
					 
                <p><label for="contact_phone" class="left">Téléphone :</label>
                   <input type="text" name="telephone" id="contact_phone" class="field" value="<?php
        if (!empty($_POST["telephone"])) {
        echo htmlspecialchars($_POST["telephone"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_email" class="left">E-mail* :</label>
                   <input type="text" name="email" id="contact_email" class="field" value="<?php
        if (!empty($_POST["email"])) {
        echo htmlspecialchars($_POST["email"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_url" class="left">Site Web :</label>
                   <input type="text" name="url" id="contact_url" class="field" value="<?php
        if (!empty($_POST["url"])) {
        echo htmlspecialchars($_POST["url"],ENT_QUOTES);
        }
        ?>" /></p>
				   
              </fieldset>
				
				
              <fieldset><legend>&nbsp;Détails du message&nbsp;</legend>
                <p><label for="contact_subject" class="left">Sujet* :</label>
                   <input type="text" name="objet" id="contact_subject" class="field" value="<?php
        if (!empty($_POST["objet"])) {
        echo htmlspecialchars($_POST["objet"],ENT_QUOTES);
        }
        ?>" /></p>
				   
                <p><label for="contact_urgency" class="left">Priorité :</label>
                   <select name="priorite" id="contact_urgency" class="combo">
                     <option value="Très basse">Très basse</option>
                     <option value="Basse">Basse</option>
                     <option value="Normale" selected="selected">Normale</option>
                     <option value="Haute">Haute</option>
                     <option value="Très Haute">Très haute</option></select></p>
					 
                <p><label for="contact_message" class="left">Message* :</label>
                   <textarea name="message" id="contact_message" cols="45" rows="10"><?php
        if (!empty($_POST["message"])) {
        echo htmlspecialchars($_POST["message"],ENT_QUOTES);
        }
        ?></textarea></p>
				   <p>Formulaire fourni par viki53 (http://viki53.free.fr/)</p>
                <p><input type="submit" name="envoyer" class="button" value="Envoyer" /></p>
              </fieldset>
            </form>
          </div>
<?php
}
else { // Sinon l'état est ok donc on envoie le mail
	$titre = $_POST["titre"];
    $nom = $_POST["nom"]; // On stocke les variables récupérées du formulaire
    $email = $_POST["email"];
    $url = $_POST["url"];
    $objet = $_POST["objet"];
    $message = $_POST["message"];
	$adresse = $_POST["adresse"];
	$code_postal = $_POST["code_postal"];
	$ville = $_POST["ville"];
	$pays = $_POST["pays"];
	$telephone = $_POST["telephone"];
	$priorite = $_POST["priorite"];
// ================= Les 3 lignes suivantes sont à modifier ====================================
    $mon_email = "user@site.com"; // Mise en forme du message que vous recevrez
    $mon_pseudo = ".:mwa:.";
    $mon_url = "http://viki53.free.fr/";
    $msg_pour_moi = "
Par $titre $nom $prenom
- E-mail : $email
- URL : $url
- Objet du message : $objet
- Message :
$message

- Autres:
Adresse: $adresse
$code_postal
$ville
$pays
Tel: $telephone";

    // Mise en forme de l'accusé réception qu'il recevra
    $accuse_pour_lui = "
Bonjour $titre $nom nous tâcherons de vous répondre le plus rapidement possible.\n\n
- Votre E-mail : $email \n
- Votre site : $url
- L'objet de votre message : $objet
- Votre message :
$message

Merci et à bientôt sur $mon_url !

Formulaire fourni par viki53 (http://viki53.free.fr/)";

    // Envoie du mail
    $entete = "From: " . $mon_mail . "\n
	Priorité: $priorité\n"; // On prépare l'entête du message
    $entete .= "";

    if (@mail($mon_email,$objet,$msg_pour_moi,$entete) && @mail($email,$objet,$accuse_pour_lui,$entete)){ // Si le mail a été envoyé
        echo "<p style=\"text-align:center\">Votre message a été envoyé, vous recevrez une confirmation par mail.<br /><br />\n"; // On affiche un message de confirmation
        echo "<a href=\"" . $mon_url . "\">Retour</a></p>\n"; // Avec un lien de retour vers l'accueil du site
    }
    else { // Sinon il y a eu une erreur lors de l'envoi
        echo "<p style=\"text-align:center\">Un problème s'est produit lors de l'envoi du message.\n";
        echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a></p>\n"; // On propose un lien de retour vers le formulaire
    }
}
?>

Conclusion :


Et voilà un formulaire utile et simple.

Un maximum de détail peut se révéler utile.

P.S: Seul nom, email, objet et message sont obligatoires. La modification peut être faite très rapidement si vous souhaitez rendre d'autres champs obligatoires. A vous de jouer !

A voir également

Ajouter un commentaire

Commentaires

malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

bon...je vais tâcher d'être le plus objectif possible :
- je suis gêné par tes commentaires "formulaire idéal", "idéal pour un site pro"...il ne faut pas exagérer. Je suis un pro (j'entends par là que le développement web, c'est mon boulot) et les formulaires que je peux avoir sur mes applicatifs web ne ressemblent jamais à ça. Le code est long et n'est lié à rien. Généralement, on a une base de données derrière, et on condense le code en se basant sur les champs de notre bdd. Il faut savoir rester modeste.
- des formulaires de ce type, on en trouve des tonnes que ce soit sur ce site, ou sur le net en général.
- tu as fait un effort évident sur le html et sur la sécurisation...sauf que ta sécurisation n'est que très partielle. Il n'y a rien de dangereux dans ce formulaire puisqu'on ne fait que le poster par email. Sauf qu'on peut facilement te spammer avec, par exemple.
- tu ne gères qu'une seule erreur à la fois.
- les champs non obligatoires ne sont pas vérifiés : on peut saisir n'importe quoi dans le champ téléphone, ou code postal.
- le php est vieillot ou mal optimisé : des " quand des ' suffisent (gain de place, et de rapidité), assignations de variables inutiles ($nom = $_POST["nom"] : pour quoi faire au juste ? A part doubler le volume de tes variables en mémoire ?

Bref, ton code n'est pas mauvais : simplement, il n'a rien d'un code pour professionnels, et rien d'idéal non plus. C'est par contre un bon code pour grands débutants : il est meilleur dans son genre que bien d'autres. Mais il est loin d'être idéal.
viki53
Messages postés
31
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
11 septembre 2008
-
Je sais que c'est loin d'être le meilleur de tous!

Mais je le propose car beaucoup de débutants en cherche et que la plupart de ceux que l'on trouve n'ont que 3 ou 4 champs.

Et si je dis qu'il peut servir sur un site pro, j'entend par là un site par exemple pour des petites entreprises ou des petites associations, etc.

En tout cas merci, l'avis d'un pro peut toujours servir pour me fair évoluer. Toute critique ou encouragement est toujours bon à prendre :)
codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1 -
Yop :)

J'irai dans le sens de Malalam, l'idée qu'il ne faut pas oublier, c'est que Php te permet du dynamisme ; si je te demande un champs en plus ? ou deux en moins, tu fait comment ? Il faut que tu modifie tout ton code rien que pour ca.

Pourquoi ne pas faire un script qui prends en parametre d'entreé les différents champs à afficher (label, type, longueur, message par défaut, etc), et en sortie il va analyser les valeurs entrées, et valider (ou non) le formulaire.

Il faut penser Flexibilité car ton cas ne sera pas forcément celui de la personne en face.

Finalement, il est déconseillé de mettre des superlatifs, Idéal, parfait, ne conviennent jamais pour un code :p (Et si tu regarde, tous les codes avec un "super", "idéal", "meilleur" ne sont pas les meilleurs :p).

En tout cas bon courage pour ta quete du Php :), c'est en faisant des erreurs que l'on progresse, alors courage ! :)
snoopip
Messages postés
235
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
1 mai 2014
-
Bonjour, SVP aide... je suis debutatn et je ne trouve pas l'endrois ou l'on dois inscrir son email dans le code... svp
snoopip
Messages postés
235
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
1 mai 2014
-
Vous pouvez SVP indiquer les ligne ou il faut faire des changement.... Merci d'avance.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (viki53)