Message de remerciements après soumission d'un formulaire [Résolu]

Signaler
-
 Ndrea -
Bonsoir,

Je galère depuis des jours sur une fonction qui me semble toute simple. Je suis un pur débutant ; j'essaie de me faire la main sur mon futur site internet afin de pouvoir l'administrer un minimum correctement lorsqu'il sera publié.

J'ai créé un formulaire HTML. La vérification des champs se fait côté serveur, le process qui traite l'envoi est sur un fichier envoi-mail.php.

Les vérifications et l'envoi se passent à merveille.

J'ai mis actuellement un message de succès d'envoi sous le formulaire HTML. Je préférerais cacher le formulaire lorsque l'envoi s'est bien fait (et uniquement dans ce cas-là) et insérer à la place un message de remerciements, et tout cela sans recharger la page.

Il semblerait que passer par du jQuery serait une bonne idée. La librairie est d'ores et déjà chargée sur ma page, ce ne serait donc pas un problème. Mon formulaire étant traité sous PHP, je ne comprends pas comment conjuguer les deux?

Le script

document.getElementById('id_demonformulaire').style.display = 'none';

inséré sur la même page que mon <form> et sous lui cache bien le formulaire. Il me manque de pouvoir le déclencher uniquement lorsque envoi-mail.php a fait le boulot et puis d'ajouter ma fameuse phrase de remerciements.

Une piste à me suggérer?

Toute aide est la bienvenue. D'ores et déjà merci pour votre soutien et pour votre indulgence.

Ndrea

5 réponses

Messages postés
29781
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 859
Bonjour

Un simple if/else en php te suffirait pour choisir d'afficher ou non le formulaire et/ou le message de remerciement
Bonsoir jordane45,

Merci d'avoir pris le temps de me répondre.

J'avais essayé, juste avant le formulaire, d'insérer un bout de code php;

<?php
$DisplayForm = True;
if(isset($_POST['envoi'])){
$DisplayForm = False;
echo 'Message envoyé.';
}
if ($DisplayForm){
?>
<!--Mon formulaire>-->
<?php
}
?>


envoi étant l'id de mon bouton de soumission.

Le formulaire se cache effectivement quand j'appuis sur mon bouton (bien qu'il réaparraisse après quelques secondes, mais c'est un autre problème/sujet), mais les vérifications de mon envoi-mail.php ne sont pas faites. Le déclencheur est uniquement le clic sur le bouton.

Il va de soi que mon envoi-mail.php est correctement appelé sur ma page (sans cela je ne pourrais pas envoyer de mails ou vérifier les champs). Il est ainsi appelé, en en-tête;

<?php include './PHPmailer/envoi-mail.php';?>


Le formulaire s'ouvre ainsi ;

<form id='form' method="post" action="<?=$_SERVER['PHP_SELF'];?>">


Et voici le genre d'input, qui grâce à envoi-mail.php, est soumis à vérification;

<input id="nom" type="text" name="nom" value="<?= $nom ?>" required class="validate">
                            <label for="nom" class="control-label">Nom</label>
                            <span class="error"><?= $nom_error ?></span>


Je dois être complètement à côté de la plaque, mais il est vrai que je n'arrive pas à saisir comment utiliser un if/else, où dans le if, je ne dirais non pas ; quand je clique sur le bouton, mais quand le message a bien été envoyé par mon envoi-mail.php alors, etc...

Merci encore à toi et une belle soirée!
Messages postés
29781
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 859
Colle nous ton code complet
Messages postés
29781
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 859
Enfin bon.. ton code devrait ressembler à ça
<?php
//-----------------------------------------------------------//
//affichage des erreurs PHP:
//-----------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//-----------------------------------------------------------//
//include du phpMailer
//-----------------------------------------------------------//
require_once './PHPmailer/envoi-mail.php';?

//-----------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//-----------------------------------------------------------//
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;
$nom_error = $nom ? "" : " Vous devez indiquer votre nom ";

$prenom = !empty($_POST['prenom']) ? $_POST['prenom'] : NULL;
$prenom_error = $prenom ? "" : " Vous devez indiquer votre prenom ";

//initialisation des autres variables
$error = "";
$DisplayForm = true;

//-----------------------------------------------------------//
// Début du traitement et du formulaire
//-----------------------------------------------------------//
if(isset($_POST['envoi'])){
  $mail = new PHPmailer();
  //Ici tu traites l'envoi du mail
  // --- A adapter à ton script actuel ---//
  $mail->isSMTP(); // Paramétrer le Mailer pour utiliser SMTP 
  $mail->Host = 'mail.votredomaine.com'; // Spécifier le serveur SMTP
  $mail->SMTPAuth = true; // Activer authentication SMTP
  $mail->Username = '***@***'; // Votre adresse email d'envoi
  $mail->Password = 'secret'; // Le mot de passe de cette adresse email
  $mail->SMTPSecure = 'ssl'; // Accepter SSL
  $mail->Port = 465;

  $mail->setFrom('***@***', 'Mailer'); // Personnaliser l'envoyeur
  $mail->addAddress('***@***', 'Karim User'); // Ajouter le destinataire
  $mail->addAddress('***@***'); 
  $mail->addReplyTo('***@***', 'Information'); // L'adresse de réponse
  $mail->addCC('***@***');
  $mail->addBCC('***@***');

  $mail->isHTML(true); // Paramétrer le format des emails en HTML ou non

  $mail->Subject = 'Here is the subject';
  $mail->Body = 'This is the HTML message body';
  $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    
  
  //envoi du mail :
  if(!$mail->send()) {
     $error .= 'Erreur, message non envoyé.';
     $error .= 'Mailer Error: ' . $mail->ErrorInfo;
  } else {
     $DisplayForm = false;
     echo " <span>Merci ! </span>";
  }
}
?>
 
 
<?php 
 if($DisplayForm){
 ?>
  <form id='form' method="post" action="">
    <input id="nom" type="text" name="nom" value="<?php echo $nom ?>" required class="validate">
    <label for="nom" class="control-label">Nom</label>
    <span class="error"><?php echo $nom_error; ?></span>
    <!-- Les autres champs de ton formulaire -->
     <input id="prenom" type="text" name="prenom" value="<?php echo $prenom ?>" required class="validate">
    <label for="prenom" class="control-label">Prénom</label>
    <span class="error"><?php echo $prenom_error; ?></span>
    
    <input type="submit" name="envoi" value="Envoyer">
</form>
<?php
}
?>


A noter :
envoi étant l'id de mon bouton de soumission.
.. pas l' ID .. mais le NAME


Je t'invite par ailleurs, à lire ET appliquer le contenu de ce lien pour tes codes :
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code


Bonne soirée.

ReBonsoir Jordane45,

MERCI MILLE FOIS!!!

J'avais un code en effet très proche de celui que tu postes. Voici la fin telle qu'elle était avant :

        try {
        $mail = new PHPMailer(true);

        $mail->isSMTP(); // Paramétrer le Mailer pour utiliser SMTP 
        $mail->Host = 'mail.votredomaine.com'; // Spécifier le serveur SMTP
        $mail->SMTPAuth = true; // Activer authentication SMTP
        $mail->Username = '***@***'; // Votre adresse email d'envoi
        $mail->Password = 'secret'; // Le mot de passe de cette adresse email
        $mail->SMTPSecure = 'ssl'; // Accepter SSL
        $mail->Port = 465;

        $mail->setFrom('***@***', 'Mailer'); // Personnaliser l'envoyeur
        $mail->addAddress('***@***', 'Karim User'); // Ajouter le destinataire
        $mail->addAddress('***@***'); 
        $mail->addReplyTo('***@***', 'Information'); // L'adresse de réponse
        $mail->addCC('***@***');
        $mail->addBCC('***@***');

        $mail->isHTML(true); // Paramétrer le format des emails en HTML ou non

        $mail->Subject = 'Here is the subject';
        $mail->Body = 'This is the HTML message body';
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
            
        $mail->send();

        }
        catch (Exception $e) {
        echo "Message non envoyé. Mailer Error: {$mail->ErrorInfo}";
        }
        catch (\Exception $e) {
			
        echo $e->getMessage();
        }    
            
        $success = "Message envoyé.";
        $message = $nom = $de = '';                
        }   


J'ai viré le

try {


et aussi tout ce qu'il y a en dessous de

$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';


pour y coller ton code ;

  if(!$mail->send()) {
     $error .= 'Erreur, message non envoyé.';
     $error .= 'Mailer Error: ' . $mail->ErrorInfo;
  } else {
     $DisplayForm = false;
     echo " <span>Merci ! </span>";
  }


Et puis avant tout, j'ai déclaré LA variable qui me manquait
$DisplayForm = true;
.

Et puis autour de mon formulaire, j'ai tapé exactement ton code.

J'espère que la fin que j'ai virée au profit de ton code ne posera pas de souci ? Au début de mon code j'ai un

use PHPMailer\PHPMailer\Exception;


et la partie

catch (Exception $e) {
        echo "Message non envoyé. Mailer Error: {$mail->ErrorInfo}";
        }
        catch (\Exception $e) {
			
        echo $e->getMessage();
        }    


devait y répondre d'une certaine manière?... Mais tout cela m'échappe...

Dans tous les cas, ÉNORME MERCI! J'espère que ça aidera d'autres personnes qui comme moi étaient dans la détresse.

(Et merci pour le lien, mes posts ne le suggèrent peut-être pas d'entrée, mais j'espère avoir respecté quelques-unes de ces règles.)

Un tout bon dimanche, cordialement,

Ndrea

P.S.: Tout à fait pour le NAME et non l'ID ; la fatigue, pardon!
> Ndrea
Bonjour,

J'ai réussi à adapter mon code avec tes indications précieuses tout en conservant mon try et mes catch . Après minuit, je suis encore moins à mon affaire, c'était absurde de les enlever dans mon cas précis.

Belle journée et mes remerciements de fin de matinée!

Ndrea
Messages postés
12682
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 octobre 2020
704
bonjour, je pense que tu peux réaliser cela en utilisant ajax.
le formulaire sera en réalité traité par ajax, dans le navigateur. ajax contactera le php, récupérera la réponse du php, et modifiera l'affichage en conséquence.
Messages postés
29781
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 859
Autant je mets de l'ajax partout .. autant.. pour faire ce qu'elle demande.. il n'y a clairement pas besoin.
En effet, j'ai pu me passer d'ajax ! Merci pour la contribution yg_be! :)