Ame-perdue
-
Modifié par jordane45 le 9/04/2015 à 16:29
Ame-perdue -
10 avril 2015 à 11:46
Bonjour,
Je suis en train de créer une page de contact pour un site web.
J'essaye d'afficher en vain mon message de validation ("message envoyé") dans ma page contact.
Mais je n'y arrive pas. Effectivement lorsque je clique sur envoyer je suis redirigé vers une page blanche et le message s'y affiche. Mon email est bien arrivé !
Je voudrais que tout se passe sur la page contact et que lorsque je clique sur envoyer les champs se vident et un petit "message envoyé" s'affiche en-dessous du formulaire.
Voici mon code:
<?php
if(isset($_POST['email']) and isset($_POST['sujet']) and isset($_POST['message']))
{
$destinataire = '***@***';
$email = htmlentities($_POST['email']);
if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{| }~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{
|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&','&',$email)))
{
$sujet = 'Contact: '.stripslashes($_POST['sujet']);
$message = stripslashes($_POST['message']);
$headers = "From: <".$email.">\n";
$headers .= "Reply-To: ".$email."\n";
$headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"";
if(mail($destinataire,$sujet,$message,$headers))
{
echo "<strong>Votre message a bien été envoyé.</strong>";
}
else
{
echo "<strong style=\"color:#ff0000;\">Une erreur s'est produite lors de l'envois du message.</strong>";
}
}
else
{
echo "<strong style=\"color:#ff0000;\">L'email que vous avez entré est invalide.</strong>";
}
}
else
{
?>
<form action="Contact.php" method="post">
<legend>Formulaire de contact</legend>
<label for="email" style="display:inline-block;width:100px;"><strong>Votre Email:</strong></label> <input type="text" name="email" id="email" /><br />
<label for="sujet" style="display:inline-block;width:100px;"><strong>Sujet:</strong></label> <input type="text" name="sujet" id="sujet" /><br />
<label for="message"><strong>Message:</strong></label><br />
<textarea cols="70" rows="4" name="message" id="message"></textarea><br />
<input type="submit" value="Envoyer" />
</form>
<?php
}
?>
Merci d'avance ! Je n'ai plus aucune idée et je cherche depuis 2 jours sans résultats. Il va sans dire que je débute en php.
jordane45
Messages postés38346Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention16 décembre 20244 718 Modifié par jordane45 le 9/04/2015 à 16:35
Effectivement lorsque je clique sur envoyer je suis redirigé vers une page blanche et le message s'y affiche. Mon email est bien arrivé !
Je pense que dans ton HTML .. dans ta balise FORM .. tu as spécifié en ACTION .. le nom de ton fichier PHP de traitement....
Pour rester dans la même page... il faut laisse l'attribut ACTION à vide .. et placer ton code PHP DIRECTEMENT dans ta page....
3 - Tu un ELSE en trop.
<?php
//---------------------------------------------------------------------------//
// Traitement
//---------------------------------------------------------------------------//
if(isset($_POST['email']) and isset($_POST['sujet']) and isset($_POST['message'])){
$destinataire = '***@***';
$email = htmlentities($_POST['email']);
if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{| }~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{
|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&','&',$email))) {
$sujet = 'Contact: '.stripslashes($_POST['sujet']);
$message = stripslashes($_POST['message']);
$headers = "From: <".$email.">\n";
$headers .= "Reply-To: ".$email."\n";
$headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"";
if(mail($destinataire,$sujet,$message,$headers)) {
echo "<strong>Votre message a bien été envoyé.</strong>";
} else {
echo "<strong style=\"color:#ff0000;\">Une erreur s'est produite lors de l'envois du message.</strong>";
}
}else {
echo "<strong style=\"color:#ff0000;\">L'email que vous avez entré est invalide.</strong>";
}
}
?>
<!-- Formulaire -->
<form action="" method="post">
<legend>Formulaire de contact</legend>
<label for="email" style="display:inline-block;width:100px;"><strong>Votre Email:</strong></label> <input type="text" name="email" id="email" /><br />
<label for="sujet" style="display:inline-block;width:100px;"><strong>Sujet:</strong></label> <input type="text" name="sujet" id="sujet" /><br />
<label for="message"><strong>Message:</strong></label><br />
<textarea cols="70" rows="4" name="message" id="message"></textarea><br />
<input type="submit" value="Envoyer" />
</form>
Bonjour,
Au vu de votre code, la page blanche est normale. je vous explique pourquoi. Voici ce que vous faites :
if(isset($_POST['email']) and isset($_POST['sujet']) and isset($_POST['message']))
{
- traitement donnée
- envoi mail ou pas
- affichage "Votre message a bien été envoyé" ou "erreur"
}
else
{
Affichage du formulaire
}
Donc après avoir valider le formulaire, le script se retrouve dans le test if (isset....) qui ne fait qu'afficher le message et c'est tout
Voila comment faire:
Affichage du formulaire
if(isset($_POST['email']) and isset($_POST['sujet']) and isset($_POST['message']))
{
- traitement donnée
- envoi mail ou pas
- affichage "Votre message a bien été envoyé" ou "erreur"
}
C'est un exemple. Dans ce cas le formulaire sera toujours afficher et en dessous le traitement avec les message
Je te propose de faire ça autrement car là ça se vois vraiment que tu débute en PHP ^^ c'est un peu le boxon ^^ et je comprend pourquoi tu ne comprend pas trop tes erreurs.
Je te fournis un formulaire type en $_POST il suffit de mettre en action="." pour rester sur la même page ou tout simplement de la rappeller ainsi tu recharges ta page mais vide cette fois.
Onsubmit permet de récupérer le résultat de ta page javascript qui va tester ton mail. l'id dans l'input type du mail permet de récupérer la valeur de ton mail afin de voir s'il est valide.
On commence par le test de si tes champs sont remplis ou non ect
à toi de completer à ta guise
if(!empty($_POST['Login']) && !empty($_POST['Email'] && ... ))
{
$_POST['Login'] = htmlentities($_POST['Login'],ENT_QUOTES);
// pareil pour les deux autres ou toute autre champs que tu rajoutes.
// si tu as une Base de donnée tu peux crypté le mot de passe en md5
}
else
echo "Champs non remplis";
les labels, classes, ect sont des sources pour le Css afin de mettre en forme .
pour tester tes champs tu peux soit faire comme tu fais soit faire appel à une fonction javascript qui fait ce que tu fais mais ainsi c'est plus propre.
enfin javascript, ici je testais le log pour qu'on ne mette pas de majuscule je t'en fait cadeau ;) décidément je suis gentil ;) ..
function verif()
{
var mailSend = document.getElementById("mail").value;
var LogSend = document.getElementById("log").value;
var REXPmail = new RegExp("^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_-]{2,}[.][a-zA-Z]{2,3}$","i");
var REXPLog = new RegExp("^[^A-Z]*$");
if(REXPmail.test(mailSend) == false)
{
document.getElementById("alerte").innerHTML="<span class=\"error\"><b>Email invalide</b></span>";
return false;
}
if(REXPLog.test(LogSend) == false)
{
document.getElementById("alerte").innerHTML="<span class=\"error\"><b>Login invalide, que des minuscules svp !</b></span>";
return false;
}
else
{
return true;
}
}
Si tu as des questions je suis dispo mais bon j'ai déjà fait presque toute ta mise au point ;) !
Je vois que je ne peux vous cacher le fait que je débute. En tout cas, c'est sympa d'apporter de l'aide à un débutant merci beaucoup.
Concernant le code il a l'air vraiment pas mal, même si je vais devoir l'adapter parce-qu'il ressemble à une page de connexion. Or, je suis en train de coder une page de contact mais je suppose que je n'ai qu'à modifier le code...
Encore merci pour ton aide, je vais essayer de perfectionner mon algorithme.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Vous êtes super sympa j'ai réussi à faire ce que je voulais, encore merci !
Voici mon code qui fonctionne:
if(isset($_POST['email']) and isset($_POST['sujet']) and isset($_POST['message']))
{
$destinataire = '***@***';
$email = htmlentities($_POST['email']);
if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&','&',$email))) {
$sujet = 'Contact: '.stripslashes($_POST['sujet']);
$message = stripslashes($_POST['message']);
$headers = "From: <".$email.">\n";
$headers .= "Reply-To: ".$email."\n";
$headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"";
if(mail($destinataire,$sujet,$message,$headers)) {
echo "<strong>Votre message a bien été envoyé.</strong>";
}else{
echo "<strong style=\"color:#ff0000;\">Une erreur s'est produite lors de l'envois du message.</strong>";
}
}else{
echo "<strong style=\"color:#ff0000;\">L'email que vous avez entré est invalide.</strong>";
}
}
?>
<form action="" method="post">
<legend>Formulaire de contact</legend>
<label for="email" style="display:inline-block;width:100px;"><strong>Votre Email:</strong></label> <input type="text" name="email" id="email" /><br />
<label for="sujet" style="display:inline-block;width:100px;"><strong>Sujet:</strong></label> <input type="text" name="sujet" id="sujet" /><br />
<label for="message"><strong>Message:</strong></label><br />
<textarea cols="70" rows="4" name="message" id="message"></textarea><br />
<input type="submit" value="Envoyer" />
</form>
Je ne veux pas abuser de votre gentillesse car vous m'avez déjà beaucoup aider et c'est inestimable pour moi. Mais j'aimerais un dernier coup de pouce si ce n'est pas trop vous demandez, est-il possible d'afficher mon petit message de confirmation ("message envoyé") à côté de mon bouton "envoyer" ou alors juste en dessous du formulaire. En effet, le message s'affiche en haut de la page et ça n'est pas très idéal.
Est-ce qu'on peut atteindre une balise HTML en PHP pour lui insérer un texte ? Aucune idée !?
jordane45
Messages postés38346Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention16 décembre 20244 718 9 avril 2015 à 18:12
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)
Cordialement,
Jordane
Ame-perdue
>
Thorak83
Messages postés1051Date d'inscriptionjeudi 20 juin 2013StatutMembreDernière intervention22 décembre 2017 10 avril 2015 à 09:43
Bonjour Thorak83,
Alors j'ai essayé cette solution mais ça ne fonctionne pas. Je reçois un message d'erreur selon lequel la variable "$msg" n'est pas définie:
"Notice: Undefined variable: msg in C:\xampp\htdocs\SendMailTest\Contact.php on line 36"
Merci pour ton aide :)
Ame-perdue
>
jordane45
Messages postés38346Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention16 décembre 2024 10 avril 2015 à 09:50
Bonjour,
Je n'ai pas totalement fini mais rassurez-vous je n'oublierai pas de clôturer le sujet.
Thorak83
Messages postés1051Date d'inscriptionjeudi 20 juin 2013StatutMembreDernière intervention22 décembre 2017156 10 avril 2015 à 11:03