redirection vers page accueil après envoi formulaire mail

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : redirection vers page accueil après envoi formulaire mail

Re: redirection vers page accueil après envoi formulaire mail

par Ryle » 12 oct. 2015, 11:26

Au lieu d'une redirection en javascript, il peut être préférable d'utiliser la balise meta refresh dans le header de ta page

Redirection vers index.php après 2 secondes :
<meta http-equiv="refresh" content="2; url=index.php">

Re: redirection vers page accueil après envoi formulaire mail

par solate » 10 oct. 2015, 13:13

enlève juste les balises "noscript" et ça marche :
<p>Votre email a bien &eacute;t&eacute; envoy&eacute;. Merci. Vous allez &ecirc;tre redirig&eacute; vers la page principale automatiquement.
<script language="JavaScript">setTimeout(location="index.html",500);></script>
<a href="index.html">Cliquez ici pour retourner à la page principale.</a></p>

Re: redirection vers page accueil après envoi formulaire mai

par Joho » 01 mars 2013, 14:29

Je ne poste peut etre pas dans la bonne rubrique remarque...
De plus la fonction mail chez Free semble très capricieuse et ne fonctionne pas tout le temps, je pense que je vais abdiquer l'idée...
Merci encore.

Re: redirection vers page accueil après envoi formulaire mai

par Joho » 01 mars 2013, 10:51

Bonjour et merci de ta réponse.

Voilà donc les modifs que j'ai faite :

Code : Tout sélectionner

// Envoi du mail if (mail($cible, $objet, $message, $headers)) { echo '<p>'.$message_envoye.'</p>';
et
// Messages de confirmation du mail

Code : Tout sélectionner

$message_envoye = "Votre email a bien &eacute;t&eacute; envoy&eacute;. Merci. Vous allez &ecirc;tre redirig&eacute; vers la page principale automatiquement. <script language=\"JavaScript\">setTimeout('window.location=\"index.php\"',2000);></script><noscript><a href=\"index.php\">Cliquez ici pour retourner à la page principale.</a></noscript>";
mais ça ne fonctionne pas...

Voici ce qu'affiche la page :
Votre email a bien été envoyé. Merci. Vous allez être redirigé vers la page principale automatiquement.

et le code source :

Code : Tout sélectionner

<p>Votre email a bien &eacute;t&eacute; envoy&eacute;. Merci. Vous allez &ecirc;tre redirig&eacute; vers la page principale automatiquement. <script language="JavaScript">setTimeout('window.location="index.php"',2000);></script><noscript><a href="index.php">Cliquez ici pour retourner à la page principale.</a></noscript></p>
Qu'est-ce qui ne va pas ?
Merci.

Re: redirection vers page accueil après envoi formulaire mai

par moogli » 01 mars 2013, 09:50

Salut,

Le message est logique : pourquoi faire une redirection serveur alors que tu as affiché quelque chose ?
Le message indique que la redirection utilise l'entête et qu'elle a déjà était envoyé. C'est le cas elle est envoyée des que l'on affiche quelque chose (même un espace ou une ligne vide). Ce problème est vrai des que tu utilise la fonction header.

Si tu souhaite faire la même chose qu'ici quand tu as posté un message oriente toi vers du Javascript.
C'est très simple et fait globalement la même chose.

Le script JS redirige la page (document.location.href) après un certain temps (set_timeout).
Je te laisse cherche un peu sur Google pour le reste ;) (regarder le source du forum quand tu poste un message XD ).

Ton lien de retour ne peu pas fonctionne il faut que tu indique la page index.php dans le href ;)

@+

redirection vers page accueil après envoi formulaire mail

par Joho » 01 mars 2013, 01:01

Bonjour à tous,
Je sèche depuis plusieurs jours sur un petit soucis...

J'ai mis en place un formulaire pour la fonction mail, mais le code étant sur la même page, il revient sur lui même, et après l'envoi du mail, ne se redirige pas automatiquement vers la page d'accueil (mon site n'a que deux pages, index.php et contact.php).

Voici mon code :

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 = 'non'; // Action du formulaire (si votre page a des paramètres dans l'URL) // si cette page est index.php?page=contact alors mettez index.php?page=contact // sinon, laissez vide $form_action = ''; // Messages de confirmation du mail $message_envoye = "Votre message nous est bien parvenu ! <a href=\"/\">Retour &agrave; la page principale</a>"; $message_non_envoye = "<br /> <br />L'envoi du mail a échoué, veuillez réessayer SVP."; // Message d'erreur du formulaire $message_formulaire_invalide = "<br /> <br />Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; /* ******************************************************************************************** FIN DE LA CONFIGURATION ******************************************************************************************** */ /* * 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 = "Contact depuis xxxxxxxxxxxxx.fr"; $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é $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin if (isset($_POST['envoi'])) { if (($nom != '') && ($email != '') && ($objet != '') && ($message != '')) { // les 4 variables sont remplies, on génère puis envoie le mail $headers = 'From:'.$nom.' <'.$email.'>' . "\r\n"; //$headers .= 'Reply-To: '.$email. "\r\n" ; //$headers .= '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)) { header("location:index.php"); } else { echo '<p>'.$message_non_envoye.'</p>'; }; } else { // une des variables est vide ... echo '<p>'.$message_formulaire_invalide.'</p>'; $err_formulaire = true; }; }; // fin du if (!isset($_POST['envoi'])) if (($err_formulaire) || (!isset($_POST['envoi']))) { // afficher le formulaire echo ' <form id="contact" method="post" action="'.$form_action.'"> <fieldset><legend>Formulaire de contact</legend> <p class="left"><label for="nom">Nom </label><input type="text" id="nom" name="nom" value="'.stripslashes($nom).'" tabindex="1" /></p> <p class="left"><label for="email">Email </label><input type="text" id="email" name="email" value="'.stripslashes($email).'" tabindex="2" /></p> <p class="left"><label for="message">Message :</label><textarea id="message" name="message" tabindex="4" cols="30" rows="8">'.stripslashes($message).'</textarea></p> </fieldset> <div style="text-align:center;"><input type="submit" name="envoi" value="Envoyer le formulaire !" /></div> </form>'; }; ?>
J'ai mis un header location vers la fin du code, mais le navigateur me renvoi ceci :
Warning: Cannot modify header information - headers already sent by (output started at /mnt/171/sda/1/d/monsite/contact.php:4) in /mnt/171/sda/1/d/monsite/contact.php on line 119

Merci de votre aide