Besoin d'aide sur un formulaire de contact svp
Résolu/Fermé
myriam_marmotte
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
-
29 juil. 2014 à 16:22
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015 - 6 août 2014 à 11:13
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015 - 6 août 2014 à 11:13
A voir également:
- Besoin d'aide sur un formulaire de contact svp
- Formulaire de réclamation facebook - Guide
- Créer un groupe whatsapp sans contact - Guide
- Bloquer un contact sur whatsapp - Guide
- Retrouver un contact supprimé android - Accueil - Android
- Formulaire de reclamation instagram - Guide
10 réponses
Nhay
Messages postés
838
Date d'inscription
vendredi 2 novembre 2012
Statut
Membre
Dernière intervention
17 décembre 2015
126
3 août 2014 à 20:11
3 août 2014 à 20:11
Bonjour !
Ton fichier php ce nomme bien traitement_formulaire.php ? Car c'est vers la que ton formulaire pointe.
Sinon, ton script php test la présence d'un champ nommé "envoi", celui-ci n'existe pas dans ton formulaire et la condition n'est donc jamais rempli.
Rajoute un name='envoi' à ton <input type='submit'>
Ton fichier php ce nomme bien traitement_formulaire.php ? Car c'est vers la que ton formulaire pointe.
Sinon, ton script php test la présence d'un champ nommé "envoi", celui-ci n'existe pas dans ton formulaire et la condition n'est donc jamais rempli.
Rajoute un name='envoi' à ton <input type='submit'>
myriam_marmotte
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
5 août 2014 à 11:16
5 août 2014 à 11:16
Bonjour,
Oui , mon fichier .php et le formulaire ont bien le même nom, c'est la 1ère vérif que j'ai faite ^^.
j'ai ajouté le champ name="envoi"... merci de m'avoir corrigé :)
j'ai ajouté aussi un
print_r($_POST)
Après avoir testé mon form, j'ai ce message en retour :
print_r($_POST)
Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur. Retour au formulaire
Une idée ?
Merci d'avance
Oui , mon fichier .php et le formulaire ont bien le même nom, c'est la 1ère vérif que j'ai faite ^^.
j'ai ajouté le champ name="envoi"... merci de m'avoir corrigé :)
j'ai ajouté aussi un
print_r($_POST)
Après avoir testé mon form, j'ai ce message en retour :
print_r($_POST)
Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur. Retour au formulaire
Une idée ?
Merci d'avance
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
5 août 2014 à 11:28
5 août 2014 à 11:28
Salut,
Tu as une erreur de syntaxe sur la déclaration des variables $objet et $copie : il manque le point-virgule à la fin de l'instruction :
Je n'ai regardé plus loin si il y en a d'autres. Avec un IDE les erreurs de syntaxe sont mises en avant, tu peux alors les corriger plus facilement.
Bonne journée
Tu as une erreur de syntaxe sur la déclaration des variables $objet et $copie : il manque le point-virgule à la fin de l'instruction :
$destinataire = 'dest@dest.fr'; $objet = 'contact depuis le site web'; $copie = 'oui';
Je n'ai regardé plus loin si il y en a d'autres. Avec un IDE les erreurs de syntaxe sont mises en avant, tu peux alors les corriger plus facilement.
Bonne journée
myriam_marmotte
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
5 août 2014 à 11:35
5 août 2014 à 11:35
Bonjour Pitet :)
Merci de t'être penché sur mon cas.
Oui je les avais remarqué depuis mon premier post...
Du coup je remet ici mon code corrigé :
Merci de t'être penché sur mon cas.
Oui je les avais remarqué depuis mon premier post...
Du coup je remet ici mon code corrigé :
<form id="contact" method="post" action="traitement_formulaire.php">
<p><i>Complétez le formulaire. Les champs marqué par </i><em>*</em> sont <em>obligatoires</em></p>
<fieldset>
<legend>Contact</legend>
<label for="nom">Nom <em>*</em></label>
<!--placeholder: indication grisée
required: il faut renseigner le champs sinon la validation est bloquée
//autofocus: le curseur est positionné dans cette case au chargement de la page-->
<input id="nom" placeholder="Nom Prénom" autofocus required=""><br>
<label for="ste">Société </label>
<input id="ste" placeholder="Société"><br>
<label for="telephone">Téléphone</label>
<!--type="tel": bascule le clavier sur un smartphone
// pattern: expression régulière à vérifier pour pouvoir valider-->
<input id="telephone" type="tel" placeholder="exemple: 01xxxxxxxx" ><br>
<label for="email">Email <em>*</em></label>
<input id="email" type="email" placeholder="prenom.nom@domaine.fr" required="" ><br>
<label for="adresse">Adresse</label>
<!-- type="number": bascule le clavier sur un smartphone-->
<input id="adresse" type="text" placeholder="exemple : 10 rue de Rome" ><br>
</select> <label for="ville">Ville</label>
<input id="ville" type="text" ><br>
</select> <label for="cp">Code Postal</label>
<input id="cp" type="text" placeholder="xxxxx" ><br>
<label for="pays">Pays</label>
<select id="pays">
<option value="F" name="pays">France</option>
<option value="B" name="pays">Belgique</option>
<option value="S" name="pays">Suisse</option>
<option value="A" name="pays">Autre</option>
</select> <label for="autre_pays">Précisez</label>
<input id="autre_pays" type="text" ><br>
<label for="comments">Votre message <em>*</em></label>
<textarea id="comments" required=""></textarea><br>
</fieldset>
<fieldset>
<legend>Recevoir notre newsletter </legend>
<label for="news_oui"><input id="oui" type="checkbox" name="news" value="oui"> Oui</label>
<label for="news_non"><input id="non" type="checkbox" name="news" value="non"> Non</label>
</fieldset>
<p><input type="submit" name="envoi" value="Soumettre"></p>
</form>
print_r($_POST)
<?php
$destinataire = 'test@test.fr';
$objet = 'contact depuis le site web' ;
$copie = 'oui' ;
// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu." ;
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
// Messages d'erreur du formulaire
$message_erreur_formulaire = "Vous devez d'abord envoyer le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
{
// formulaire non envoyé
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = htmlspecialchars(trim($text), ENT_QUOTES);
if (1 === get_magic_quotes_gpc())
{
$text = stripslashes($text);
}
$text = nl2br($text);
return $text;
};
/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
return (($value === 0) || ($value === false)) ? false : true;
}
// formulaire envoyé, on récupère tous les champs.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
$ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : '';
$cp = (isset($_POST['cp'])) ? Rec($_POST['cp']) : '';
$pays = (isset($_POST['pays'])) ? Rec($_POST['pays']) : '';
$autre_pays = (isset($_POST['autre_pays'])) ? Rec($_POST['autre_pays']) : '';
$comments = (isset($_POST['comments'])) ? Rec($_POST['comments']) : '';
$news = (isset($_POST['news'])) ? Rec($_POST['news']) : '';
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
if (($nom != '') && ($email != '') && ($comments != ''))
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
'Reply-To:'.$email. "\r\n" .
'X-Mailer:PHP/'.phpversion();
// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
// Envoi du mail
if (mail($cible, $objet, $comments, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
5 août 2014 à 11:58
5 août 2014 à 11:58
Plusieurs remarques sur ton code :
- rassemble tes fonctions au début ou à la fin de ton code (code plus lisible)
- attention à l'indentation (code plus lisible)
- pas de point-virgule après une accolade
- (facultatif) pour vérifier le mail, tu pourrais remplacer ta regex par la fonction filter_var() avec le paramètre FILTER_VALIDATE_EMAIL (si tu as php >= 5.2) : https://www.w3schools.com/php/filter_validate_email.asp
Voici donc une version corrigé et formaté de ton code php :
Si tu vois le message formulaire invalide, c'est que tes données ne sont pas correctement validée.
Avec le print_r($_POST) tu pourras remarquer que le nom n'est pas envoyé quand tu soumet ton formulaire car la balise input n'as pas d'attribut name.
C'est l'attribut name qui définit le nom du paramètre envoyé à php :
A vérifier pour les autres champs.
Bonne journée
- rassemble tes fonctions au début ou à la fin de ton code (code plus lisible)
- attention à l'indentation (code plus lisible)
- pas de point-virgule après une accolade
- (facultatif) pour vérifier le mail, tu pourrais remplacer ta regex par la fonction filter_var() avec le paramètre FILTER_VALIDATE_EMAIL (si tu as php >= 5.2) : https://www.w3schools.com/php/filter_validate_email.asp
Voici donc une version corrigé et formaté de ton code php :
<?php // print_r dans le php si tu veux voir ce qui est envoyé par ton formulaire print_r($_POST); $destinataire = 'test@test.fr'; $objet = 'contact depuis le site web'; $copie = 'oui'; // Messages de confirmation du mail $message_envoye = "Votre message nous est bien parvenu." ; $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; // Messages d'erreur du formulaire $message_erreur_formulaire = "Vous devez d'abord envoyer le formulaire</a>."; $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; // on teste si le formulaire a été soumis if (!isset($_POST['envoi'])) { // formulaire non envoyé echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; } else { // formulaire envoyé, on récupère tous les champs. $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; $telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : ''; $email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; $adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : ''; $ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : ''; $cp = (isset($_POST['cp'])) ? Rec($_POST['cp']) : ''; $pays = (isset($_POST['pays'])) ? Rec($_POST['pays']) : ''; $autre_pays = (isset($_POST['autre_pays'])) ? Rec($_POST['autre_pays']) : ''; $comments = (isset($_POST['comments'])) ? Rec($_POST['comments']) : ''; $news = (isset($_POST['news'])) ? Rec($_POST['news']) : ''; // On va vérifier les variables et l'email ... $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré if (($nom != '') && ($email != '') && ($comments != '')) { // les 4 variables sont remplies, on génère puis envoie le mail $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" . 'Reply-To:'.$email. "\r\n" . 'X-Mailer:PHP/'.phpversion(); // envoyer une copie au visiteur ? if ($copie == 'oui') { $cible = $destinataire.','.$email; } else { $cible = $destinataire; } // Envoi du mail if (mail($cible, $objet, $comments, $headers)) { echo '<p>'.$message_envoye.'</p>'."\n"; } else { echo '<p>'.$message_non_envoye.'</p>'."\n"; } } else { // une des 3 variables (ou plus) est vide ... echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n"; } } // fin du if (!isset($_POST['envoi'])) /* * cette fonction sert à nettoyer et enregistrer un texte */ function Rec($text) { $text = htmlspecialchars(trim($text), ENT_QUOTES); if (1 === get_magic_quotes_gpc()) { $text = stripslashes($text); } $text = nl2br($text); return $text; } /* * Cette fonction sert à vérifier la syntaxe d'un email */ function IsEmail($email) { $value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email); return (($value === 0) || ($value === false)) ? false : true; } ?>
Si tu vois le message formulaire invalide, c'est que tes données ne sont pas correctement validée.
Avec le print_r($_POST) tu pourras remarquer que le nom n'est pas envoyé quand tu soumet ton formulaire car la balise input n'as pas d'attribut name.
C'est l'attribut name qui définit le nom du paramètre envoyé à php :
<input id="nom" name="nom" placeholder="Nom Prénom" autofocus required="">
A vérifier pour les autres champs.
Bonne journée
myriam_marmotte
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
5 août 2014 à 15:01
5 août 2014 à 15:01
Un grand merci pour ton aide !!!
Je reçois enfin quelque chose dans ma boite mail :)
Effectivement, avec un name="" ça fonctionne mieux...
Désolée de t'embêter encore, j'apprends certes, mais tout doucement...
ce que je ne comprends pas cette fois, c'est que lorsque je reçois l'email, je n'ai que le message, mais ça ne me renvoie pas les autres champs...
pourtant avec mon print_r($_POST), j'ai ceci :
Array ( [nom] => moi [ste] => arc en ciel [telephone] => [email] => trabucco@wanadoo.fr [ville] => monchy [cp] => 76260 [autre_pays] => [comments] => test [news] => oui [envoi] => Soumettre )
Votre message nous est bien parvenu.
Je reçois enfin quelque chose dans ma boite mail :)
Effectivement, avec un name="" ça fonctionne mieux...
Désolée de t'embêter encore, j'apprends certes, mais tout doucement...
ce que je ne comprends pas cette fois, c'est que lorsque je reçois l'email, je n'ai que le message, mais ça ne me renvoie pas les autres champs...
pourtant avec mon print_r($_POST), j'ai ceci :
Array ( [nom] => moi [ste] => arc en ciel [telephone] => [email] => trabucco@wanadoo.fr [ville] => monchy [cp] => 76260 [autre_pays] => [comments] => test [news] => oui [envoi] => Soumettre )
Votre message nous est bien parvenu.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié par Pitet le 5/08/2014 à 15:10
Modifié par Pitet le 5/08/2014 à 15:10
Le message envoyé dans l'email correspond au troisième paramètre de la fonction mail, or pour l'instant tu lui transmet effectivement que le commentaire :
Tu peux donc créer une nouvelle variable, $contenuMail par exemple, dans laquelle tu vas concaténer toutes les infos que tu veux faire apparaitre :
mail($cible, $objet, $comments, $headers)
Tu peux donc créer une nouvelle variable, $contenuMail par exemple, dans laquelle tu vas concaténer toutes les infos que tu veux faire apparaitre :
// on crée le contenu du mail $contenuMail = ''; $contenuMail .= 'Message de ' . $nom . "\r\n"; $contenuMail .= 'Téléphone : ' . $telephone . "\r\n"; $contenuMail .= 'Email : ' . $email . "\r\n"; $contenuMail .= 'Message : ' . $comments . "\r\n"; /* ... etc ... */ // Envoi du mail if (mail($cible, $objet, $contenuMail , $headers)) { echo '<p>'.$message_envoye.'</p>'."\n"; } else { echo '<p>'.$message_non_envoye.'</p>'."\n"; }
myriam_marmotte
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
5 août 2014 à 16:06
5 août 2014 à 16:06
Youhou ça marche !! (il m'en faut peu pour être heureuse ^^)
Une fois encore un grand merci pour le temps que tu m'as accordé !!
si je peux me permettre une dernière question, une fois mon formulaire envoyé, je voudrais que la page contact réapparaisse avec le message "Votre message nous est bien parvenu." Or là c'est une page blanche qui s'affiche avec ce message...
Je pourrais tenter, je pense, un "refresh", mais j'y perdrais en ergonomie. Il doit bien y avoir un moyen d'intégrer ça dans mon php non ?
Une fois encore un grand merci pour le temps que tu m'as accordé !!
si je peux me permettre une dernière question, une fois mon formulaire envoyé, je voudrais que la page contact réapparaisse avec le message "Votre message nous est bien parvenu." Or là c'est une page blanche qui s'affiche avec ce message...
Je pourrais tenter, je pense, un "refresh", mais j'y perdrais en ergonomie. Il doit bien y avoir un moyen d'intégrer ça dans mon php non ?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié par Pitet le 5/08/2014 à 16:46
Modifié par Pitet le 5/08/2014 à 16:46
Une solution rapide est de faire une redirection vers une page de remerciement :
Attention, il ne doit y avoir aucun affichage (echo, ligne vide, message d'erreur php...) avant l'appel à la fonction header pour que la redirection fonctionne (sauf si l'option output_buffering est activée). On ajoute aussi l'instruction exit() après la redirection pour arrêter le script ici et laisser le navigateur changer de page.
Si tu veux revenir sur la même page avec un message de remerciement, tu peux effectuer la redirection vers la page contact avec un paramètre pour indiquer que le mail est bien envoyé.
Donc à l'envoie du mail, on redirige avec un paramètre :
Dans le code html, au dessus du formulaire :
if (mail($cible, $objet, $comments, $headers)) { header('Location: page-remerciement.php'); exit(); } else { echo '<p>'.$message_non_envoye.'</p>'."\n"; }
Attention, il ne doit y avoir aucun affichage (echo, ligne vide, message d'erreur php...) avant l'appel à la fonction header pour que la redirection fonctionne (sauf si l'option output_buffering est activée). On ajoute aussi l'instruction exit() après la redirection pour arrêter le script ici et laisser le navigateur changer de page.
Si tu veux revenir sur la même page avec un message de remerciement, tu peux effectuer la redirection vers la page contact avec un paramètre pour indiquer que le mail est bien envoyé.
Donc à l'envoie du mail, on redirige avec un paramètre :
if (mail($cible, $objet, $comments, $headers)) { header('Location: page-contact.php?send=true'); exit(); } else { echo '<p>'.$message_non_envoye.'</p>'."\n"; }
Dans le code html, au dessus du formulaire :
<?php // si le paramètre existe if (isset($_GET['send'])) { // on affiche un message de remerciement echo '<p>Merci pour votre message !</p>'; } ?> <form id="contact" etc...
myriam_marmotte
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
6 août 2014 à 11:13
6 août 2014 à 11:13
Bonjour ^^
Un énorme merci pour ton aide, tout fonctionne parfaitement !!
En plus (c'est le principal) j'ai compris d'où venaient mes erreurs, c'est sympa d'avoir pris le temps de m'expliquer.
Un énorme merci pour ton aide, tout fonctionne parfaitement !!
En plus (c'est le principal) j'ai compris d'où venaient mes erreurs, c'est sympa d'avoir pris le temps de m'expliquer.