Page 1 sur 1

Redirection formulaire de contact PHP

Posté : 22 avr. 2015, 13:44
par yinnas
Bonjour,
J'utilise un formulaire de contact PHP trouvé . J'aimerais que, une fois le formulaire rempli, l'utilisateur soit redirigé vers une page. Dans le script original, un simple message s'affiche :

Code : Tout sélectionner

// 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.";
Pouvez vous m'aider à remplacer ce message par une redirection ?

Merci d'avance !

Re: Redirection formulaire de contact PHP

Posté : 22 avr. 2015, 21:09
par Loxort
Bonjour,

En php, header permet de faire une redirection.

Re: Redirection formulaire de contact PHP

Posté : 23 avr. 2015, 14:52
par yinnas
Mais comment puis-je l'intégrer au code ?

Re: Redirection formulaire de contact PHP

Posté : 23 avr. 2015, 16:35
par Ryle
Dans ton script, après le traitement gérant ton mail, quand tu estimes que la redirection doit avoir lieu, tu ajoutes l'appel à la fonction header() en précisant vers quelle page l'utilisateur doit être redirigé.

Il est en général recommandé d'ajouter un appel à exit() après le header() pour que php arrête l'exécution du script (puisque l'utilisateur doit être redirigé, il n'est généralement pas nécessaire de poursuivre l'exécution au delà).

Enfin, pour que la redirection via header fonctionne, le serveur ne doit strictement rien envoyer au navigateur au préalable. il ne faut pas qu'il y ait d'echo ou de print, de code html, ou quoi que ce soit en dehors des balises <?php et ?> avant l'appel au header.

Re: Redirection formulaire de contact PHP

Posté : 24 avr. 2015, 16:56
par yinnas
En fait, quand j'insère le header, la page est directement redirigée, avant même d'etre chargée, vers la page à rediriger plus tard... L'utilisateur n'a même pas le temps de remplir le formulaire de contact que déjà il est dirigé vers la page qu'il est censé trouver après l'avoir envoyé. Que faire ?

J'ai placé le header comme suit (portion de code, mon script est beaucoup plus long évidemment...) :

Code : Tout sélectionner

$message_envoye = "header('Location: index.php'); exit;";
Qu'ai-je mal fait ?

Re: Redirection formulaire de contact PHP

Posté : 24 avr. 2015, 18:28
par tof73
il faut le mettre au bon endroit, que quand c'est nécessaire.

Re: Redirection formulaire de contact PHP

Posté : 24 avr. 2015, 21:35
par yinnas
Mais où dois-je justement le placer ? Voici mon code complet :

Code : Tout sélectionner

<?php /* ******************************************************************************************** CONFIGURATION ******************************************************************************************** */ // destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule $destinataire = '[email protected]'; // copie ? (envoie une copie au visiteur) $copie = 'oui'; // 'oui' ou 'non' // 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 <a href=\"contact.html\">envoyer le formulaire</a>."; $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; /* ******************************************************************************************** FIN DE LA CONFIGURATION ******************************************************************************************** */ // 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']) : ''; $email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; $objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : ''; $message = (isset($_POST['message'])) ? Rec($_POST['message']) : ''; // 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 != '') && ($objet != '') && ($message != '')) { // 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; }; // Remplacement de certains caractères spéciaux $message = str_replace("'","'",$message); $message = str_replace("&#8217;","'",$message); $message = str_replace(""",'"',$message); $message = str_replace('<br>','',$message); $message = str_replace('<br />','',$message); $message = str_replace("<","<",$message); $message = str_replace(">",">",$message); $message = str_replace("&","&",$message); // Envoi du mail if (mail($cible, $objet, $message, $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'])) ?>

Re: Redirection formulaire de contact PHP

Posté : 25 avr. 2015, 12:38
par yinnas
Personne ? :(

Re: Redirection formulaire de contact PHP

Posté : 25 avr. 2015, 18:27
par Ryle
Si tu veux rediriger l'utilisateur une fois le traitement accompli avec succès, la logique voudrait que tu insères ton code de redirection après le traitement, lorsque celui-ci a été réalisé avec succès...

Actuellement, en cas de succès tu afficher le message stocké dans la variable $message_envoye. Au lieu de faire un echo pour afficher cette information, fais ta redirection à ce moment là et le tour sera joué :)

Re: [RESOLU] Redirection formulaire de contact PHP

Posté : 26 avr. 2015, 00:06
par yinnas
Super, merci ! C'est sympa d'aider simplement donner la réponse, mais en l'expliquant en plus :).

Re: [RESOLU] Redirection formulaire de contact PHP

Posté : 22 janv. 2019, 11:24
par ato-mike
Bonjour, désolé de déterrer ce sujet mais je suis dans le même cas. j'utilise le même script et je ne trouve pas ou mettre cette fonction header ?
J'aimerais bien garder la fonction qui affiche sur la page blanche comme quoi le mail est bien envoyé mais qu'elle soit redirigé au bout de 3 secondes.
Merci

Re: [RESOLU] Redirection formulaire de contact PHP

Posté : 22 janv. 2019, 11:56
par @rthur
Si c'est une redirection au bout de 3 secondes, alors il ne faut pas la faire en PHP (qui s'exécute côté serveur) mais du côté du navigateur et donc en javascript.
La fonction JS à utiliser est window.setTimeout()
https://developer.mozilla.org/en-US/doc ... setTimeout

Un truc du genre :

Code : Tout sélectionner

<script> window.setTimeout("window.location.href = 'https://www.phpfrance.com';", 3000); // Ici on indique 3000ms = 3 secondes </script>

Re: [RESOLU] Redirection formulaire de contact PHP

Posté : 22 janv. 2019, 12:50
par ato-mike
merci mais je viens de trouver la solution en fait il faut mettre ceci à la fin du formulaire.php....
echo '<script type="text/javascript">setTimeout(function(){window.top.location="index.hml"} , 2000);</script>';

comme ceci :

// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="index-6.html">Retour au formulaire</a></p>'."\n";
};
echo '<script type="text/javascript">setTimeout(function(){window.top.location="index.html"} , 2000);</script>';
}; // fin du if (!isset($_POST['envoi']))
?>