Créer un formulaire de contact pour un site

Résolu/Fermé
alex5978 Messages postés 1 Date d'inscription lundi 18 mars 2013 Statut Membre Dernière intervention 18 mars 2013 - Modifié le 26 nov. 2019 à 16:14
astuces72 Messages postés 7762 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 15 novembre 2024 - 23 juin 2016 à 07:34
Bonjour,

J'aimerais avoir un formulaire de contact dans mon site.

J'ai suivi un tuto mais j'ai une erreur.

Le tuto est ici : http://www.infowebmaster.fr/tutoriel/creer-page-contact-php

J'obtiens une erreur : le mail s'envoie tout de même alors que certaines cases ne sont pas remplies.

Je vous copie le code ici. Pouvez-vous m'aider, de façon à ce que le mail ne parte qu'une fois les champs obligatoires remplis ?

D'avance, je vous remercie pour votre aide.


<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>Contacter le webmaster</h1>
<?php
// S'il y des données de postées
if ($_SERVER['REQUEST_METHOD']=='POST') {

// (1) Code PHP pour traiter l'envoi de l'email

// Récupération des variables et sécurisation des données
$nom = htmlentities($_POST['nom']); // htmlentities() convertit des caractères "spéciaux" en équivalent HTML
$email = htmlentities($_POST['email']);
$message = htmlentities($_POST['message']);

// Variables concernant l'email

$destinataire = '***@live.fr'; // Adresse email du webmaster (à personnaliser)
$sujet = 'Titre du message'; // Titre de l'email
$contenu = '<html><head><title>Titre du message</title></head><body>';
$contenu .= '<p>Bonjour, vous avez reçu un message à partir de votre site web.</p>';
$contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
$contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
$contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
$contenu .= '</body></html>'; // Contenu du message de l'email (en XHTML)

// Pour envoyer un email HTML, l'en-tête Content-type doit être défini
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";

// Envoyer l'email
mail($destinataire, $sujet, $contenu, $headers); // Fonction principale qui envoi l'email
echo '<h2>Message envoyé!</h2>'; // Afficher un message pour indiquer que le message a été envoyé
// (2) Fin du code pour traiter l'envoi de l'email
}
?>
<?php
// S'il y des données de postées
if ($_SERVER['REQUEST_METHOD']=='POST') {
// Code PHP pour traiter l'envoi de l'email

$nombreErreur = 0; // Variable qui compte le nombre d'erreur
// Définit toutes les erreurs possibles
if (!isset($_POST['email'])) { // Si la variable "email" du formulaire n'existe pas (il y a un problème)
$nombreErreur++; // On incrémente la variable qui compte les erreurs
$erreur1 = '<p>Il y a un problème avec la variable "email".</p>';
} else { // Sinon, cela signifie que la variable existe (c'est normal)
if (empty($_POST['email'])) { // Si la variable est vide
$nombreErreur++; // On incrémente la variable qui compte les erreurs
$erreur2 = '<p>Vous avez oublié de donner votre email.</p>';
} else {
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$nombreErreur++; // On incrémente la variable qui compte les erreurs
$erreur3 = '<p>Cet email ne ressemble pas un email.</p>';
}
}
}

if (!isset($_POST['message'])) {
$nombreErreur++;
$erreur4 = '<p>Il y a un problème avec la variable "message".</p>';
} else {
if (empty($_POST['message'])) {
$nombreErreur++;
$erreur5 = '<p>Vous avez oublié de donner un message.</p>';
}
} // (3) Ici, il sera possible d'ajouter plus tard un code pour vérifier un captcha anti-spam.

if ($nombreErreur==0) { // S'il n'y a pas d'erreur
// Ici il faut ajouter tout le code pour envoyer l'email.
// Dans le code présenté au chapitre précédent, cela signifie au code entre les commentaires (1) et (2).
} else { // S'il y a un moins une erreur
echo '<div style="border:1px solid #ff0000; padding:5px;">';
echo '<p style="color:#ff0000;">Désolé, il y a eu '.$nombreErreur.' erreur(s). Voici le détail des erreurs:</p>';
if (isset($erreur1)) echo '<p>'.$erreur1.'</p>';
if (isset($erreur2)) echo '<p>'.$erreur2.'</p>';
if (isset($erreur3)) echo '<p>'.$erreur3.'</p>';
if (isset($erreur4)) echo '<p>'.$erreur4.'</p>';
if (isset($erreur5)) echo '<p>'.$erreur5.'</p>';
// (4) Ici, il sera possible d'ajouter un code d'erreur supplémentaire si un captcha anti-spam est erroné.
echo '</div>';
}
}
?>
<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
<p>Votre nom et prénom: <input type="text" name="nom" size="30" /></p>
<p>Votre email: <span style="color:#ff0000;">*</span>: <input type="text" name="email" size="30" /></p>
<p>Message <span style="color:#ff0000;">*</span>:</p>
<textarea name="message" cols="60" rows="10"></textarea>
<!-- Ici pourra être ajouté un captcha anti-spam (plus tard) -->
<p><input type="submit" name="submit" value="Envoyer" /></p>
</form>
</body>
</html>



Configuration: Windows 7 / Firefox 19.0
A voir également:

8 réponses

Bonsoir

Merci énormément pour cette aide :)

On dirait que tout fonctionne très bien à présent.

C'est un grand service, merci encore :)

Juste une dernière question : comment pourrait-on faire pour rendre la case du nom et prénom obligatoire ?

D'avance, merci pour votre aide.
2
charcom Messages postés 61 Date d'inscription jeudi 24 janvier 2013 Statut Membre Dernière intervention 3 novembre 2022 5
21 mars 2013 à 22:30
Après :

$erreur5 = '<p>Vous avez oublié de donner un message.</p>';
    }


Tu ajoutes les lignes :

if (empty($_POST['nom'])) {
    $nombreErreur++;
    $erreur6 = '<p>Vous avez oublié de préciser votre nom.</p>';
    }


et après :

if (isset($erreur5)) echo '<p>'.$erreur5.'</p>';


tu ajoutes la ligne :

if (isset($erreur6)) echo '<p>'.$erreur6.'</p>';
0
titacmoii Messages postés 6 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 13 novembre 2013
Modifié par titacmoii le 8/11/2013 à 18:35
Bonjour alex5978,

stp tu peux me dire comment tu as fais ??? j 'ai eu même problème ,et je trouve pas la solution
0
charcom Messages postés 61 Date d'inscription jeudi 24 janvier 2013 Statut Membre Dernière intervention 3 novembre 2022 5
21 mars 2013 à 17:03
Je pense que tu as mis toute la partie (1) au mauvais endroit, dans ton script, du coup, il envoie l'email avant de le vérifier.

La partie (1) devrait visiblement être là où il y a la ligne : // Ici il faut ajouter tout le code pour envoyer l'email.
0
merci !!!!
0
Bonjour
ou on doit mettre le code php?
et on doit enregister la page sous .html ou bien .php
0
Bonsoir

Merci, c'est simplement génial :)

Tout fonctionne à présent, comme je le souhaitais.

Merci encore pour tout le temps accordé :)

Bien cordialement,
0
astuces72 Messages postés 7762 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 15 novembre 2024 1 639
Modifié le 26 nov. 2019 à 16:14
slt

il se passe quoi en cas d'erreur ? et bien ça efface tout !
Tu devrais faire les tests de champs vide avant l'envois, et en javascript !
Moi en tant qu'utilisateur du web, quand je me tape un message de 3 km et que je suis obliger de le retaper, ça gonfle :)


En cas d'erreur de saisis, il colore les champs en bleus, en cas d'erreur dans l'adresse email il y a aussi une erreur.


je te donne un code, remplace ton code complet par ça:

<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>Contacter le webmaster</h1>

<script language="JavaScript">
<!--
function couleur_rec(obj) {
obj.style.backgroundColor = "#FFFFFF";
}
function check_ann() {
var msg = "";
if (document.form_contact.nom.value == "") {
msg += "Veuillez noter votre nom ! \n";
document.form_contact.nom.style.backgroundColor = "#5b7fb3";
}
if (document.form_contact.email.value != "") {
indexAroba = document.form_contact.email.value.indexOf('@');
indexPoint = document.form_contact.email.value.indexOf('.');
if ((indexAroba < 0) || (indexPoint < 0)) {
document.form_contact.email.style.backgroundColor = "#5b7fb3";
msg += "L'adresse e-mail est incorrect !\n";
}
}
else {
msg += "Veuillez saisir votre message.\n";
document.form_contact.email.style.backgroundColor = "#5b7fb3";
}

if (document.form_contact.message.value == "") {
msg += "Veuillez noter votre message ! \n";
document.form_contact.message.style.backgroundColor = "#5b7fb3";
}


if (msg == "") return(true);
else {
alert(msg);
return(false);
}
}
// -->
</script>

<form name="form_contact" method="post" action="" onSubmit="return check_ann();">
<p>Votre nom et prénom: <input type="text" name="nom" size="30" onkeyup="javascript:couleur_rec(this);"/></p>
<p>Votre email: <span style="color:#ff0000;">*</span>: <input type="text" name="email" size="30" onkeyup="javascript:couleur_rec(this);"/></p>
<p>Message <span style="color:#ff0000;">*</span>:</p>
<textarea name="message" cols="60" rows="10" onkeyup="javascript:couleur_rec(this);"></textarea>
<!-- Ici pourra être ajouté un captcha anti-spam (plus tard) -->
<p><input type="submit" name="_BTN_envoyer" value="Envoyer" /></p>
</form>

<?php
if (isset($_POST['_BTN_envoyer']))
{
// Récupération des variables et sécurisation des données
$nom = htmlentities($_POST['nom']); // htmlentities() convertit des caractères "spéciaux" en équivalent HTML
$email = htmlentities($_POST['email']);
$message = htmlentities($_POST['message']);

// Variables concernant l'email

$destinataire = '***@live.fr'; // Adresse email du webmaster (à personnaliser)
$sujet = 'Titre du message'; // Titre de l'email
$contenu = '<html><head><title>Titre du message</title></head><body>';
$contenu .= '<p>Bonjour, vous avez reçu un message à partir de votre site web.</p>';
$contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
$contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
$contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
$contenu .= '</body></html>'; // Contenu du message de l'email (en XHTML)

// Pour envoyer un email HTML, l'en-tête Content-type doit être défini
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";

// Envoyer l'email
mail($destinataire, $sujet, $contenu, $headers); // Fonction principale qui envoi l'email
echo '<h2>Message envoyé!</h2>'; // Afficher un message pour indiquer que le message a été envoyé
// (2) Fin du code pour traiter l'envoi de l'email
}
?>
</body>
</html>



Voilà, c'est tout, tu fais comme tu veux, mais essaye :)
0
charcom Messages postés 61 Date d'inscription jeudi 24 janvier 2013 Statut Membre Dernière intervention 3 novembre 2022 5
23 mars 2013 à 11:01
1. Il y a des méthodes en PHP, aussi, pour éviter d'avoir à tout retaper en cas d'erreur.
2. Remplacer un script par un autre n'est pas une aide
3. Pourquoi les aficionados du Javascript (qui comporte souvent des problèmes de fonctionnement en fonction des navigateurs) veulent toujours à tout prix imposer leurs méthodes là où on leur parle d'autre chose, c'est dingue.....
0
Bonjour à tous

Merci à chacun pour l'aide apportée.

Je suis preneur de tout autre formulaire, par curiosité.

Mais astuces72 m'a vraiment bien débloqué.

Merci encore à lui et à ce forum.


++++++++++++++++++++++++++++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut

Merci encore, c'est beaucoup plus que je n'attendais.

Je viens de tester. Tout est OK, impeccablement.

Ce formulaire est vraiment au top pour mes besoins :)

Merci encore
0
astuces72 Messages postés 7762 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 15 novembre 2024 1 639
Modifié par astuces72 le 23/03/2013 à 06:21
ba de rien :)

il faut passer le sujet en résolu :)
0
Merci encore pour tout :)

Je ne trouve pas comment passer en résolu.

Si un modérateur peut le faire, ce serait super.

Autrement, si j'en ai la possibilité, je le ferai de suite, si vous pouvez me mentionner où cliquer.

Merci encore pour ce super formulaire:) :) :)


+++++++++++++++++
0
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017
1 juin 2016 à 12:06
j'ai essayer ce tuto, depuis le temps que je cherche un formulaire de contact simple pour mon site
a l'envoie j'ai ce message d'erreur

Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\EasyPHP-12.1\www\Nouveau dossier (2)\formulairenew.php on line 38

 ligne 38  mail($destinataire, $sujet, $contenu, $headers); // Fonction principale qui envoi l'email


pourtant j'ai bien recopier le code par copier coller sans rien changer sauf le destinataire
s'il marche ailleurs pourquoi pas avec moi?
Merci d'avance si quelqu'un a la réponse
0
astuces72 Messages postés 7762 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 15 novembre 2024 1 639
Modifié par astuces72 le 23/06/2016 à 07:34
slt

il n'y a aucun problème sur le formulaire, regarde du coté d'apache.
Tes paramètres de compte mail sont correct ?
0