Menu

Afficher un message de validation dans un formulaire ? [Résolu/Fermé]

-
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.


EDIT : Ajout des balises de code.
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.
Afficher la suite 

5 réponses

Messages postés
25949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
1710
0
Merci
Bonjour,

1 - Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

2 -
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>



Cordialement,
Jordane
Tout d'abord un grand grand merci pour avoir répondu ! :)

La prochaine fois je ferai attention à mettre mon code en couleur, sans faute c'est promis.

Je vais essayer de corriger mes erreurs et je vous tiens au courant.
Messages postés
1064
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
102
0
Merci
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

Cordialement
Je pense avoir compris votre explication et je vais de ce pas me replonger dans mon code pour y apporter les modifications nécessaires.

Franchement merci mille fois :)
Messages postés
236
Date d'inscription
vendredi 30 mai 2014
Statut
Membre
Dernière intervention
27 juin 2016
29
0
Merci
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";

on suis par ceci
<head>
<link rel="stylesheet" href="css/style.css">
  <script type="text/javascript" src="ver.js"></script>
</head>


Enfin le FORMULAIRE
<body>

 <form method="post" action="." class="login" onsubmit="return ver()">
  <p>
   <label for="login">Login:</label>
   <input type="text" name='Login'>
  </p>
  <p>
   <label for="password">Password : </label>
   <input type="password" name='Password' >
  </p>
                 <p>
   <label for="email">Email : </label>
   <input type="text" name='Mail' id='mail'>
  </p>
  <p class="login-submit">
   <button type="submit" class="login-button">Se connecter'</button>
  </p>
 </form>
</body>
</html>


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 ;) !


EDIT : Ajout du langage dans les balises de code.
Bonjour,

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.
0
Merci
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 !?
> Thorak83
Messages postés
1064
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
-
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 :)
jordane45
Messages postés
25949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
1710 -
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
> jordane45
Messages postés
25949
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
-
Bonjour,

Je n'ai pas totalement fini mais rassurez-vous je n'oublierai pas de clôturer le sujet.
Thorak83
Messages postés
1064
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
102 -
oui bien sur,
suffit de mettre
<input type="submit" value="Envoyer" /><?php if (isset($msg)) echo $msg; else ""; ?>
Thorak83
Messages postés
1064
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
102 -
ou en version plus courte
<input type="submit" value="Envoyer" /><?php (isset($msg))?$msg:"";  ?>
0
Merci
Génial !

@Thorak83: Je te remercierai jamais assez, ça fonctionne parfaitement :)

Bon je vais pas vous embêtez plus que ça, toutes mes questions ont trouvé leur réponse. Aussi, je vais clôturer le sujet dans la bonne humeur.

Un grand/gros/immense MERCI à tous pour votre aide :)