Redirection avec La fonction header()

Résolu/Fermé
sunev - 6 juin 2016 à 15:46
 sunev - 8 juin 2016 à 10:50
bonjours a tous
dans le code php ci-dessous d'un formulaire de contact j'aimerais rediriger le visiteur sur une page web de mon site avec le code

header('Location: http://www.monsite.com/finformulaire.html');
exit();


plutôt que
echo '<h2 align="center">Message envoyé! Merci</h2>'; 


mais ça ne fonctionne pas, j'ai un message d'erreur a la place qui s'affiche bien que le mail est été envoyé
( ça fonctionne très bien avec echo '<h2 align="center">Message envoyé! Merci</h2>';)

<?php
if ($_SERVER['REQUEST_METHOD']=='POST') {

$nom = htmlentities($_POST['nom']);
$destinataire = '***@***';
$email = htmlentities($_POST['email']);
$message = htmlentities($_POST['message']);
$sujet = 'Titre du message';

$contenu = '<html><head><title>Titre du message</title></head><body>';
$contenu .= '<p>Bonjour, vous avez reçu un message </p>';
$contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
$contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
$contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
$contenu .= '</body></html>';

$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";

mail($destinataire, $sujet, $contenu, $headers);
echo '<h2 align="center">Message envoyé! Merci</h2><br/><p> </p>';
}
?>


Quelqu'un pourrait t'il me dire comment faire pour que après avoir cliquer sur envoyer le visiteur soit redirigé sur une page html

Merci
A voir également:

6 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
6 juin 2016 à 16:50
Salut,

Quel est le message d'erreur ?

Si dans la configuration de php l'option output_buffering est désactivée, alors aucun contenu (echo, code html, ligne vide avant la première balise php, message d'erreur php, etc...) de doit être envoyé à l'utilisateur avant l'appel de la fonction header.

Puisque tu as un message d'erreur, le non fonctionnement de la redirection peut venir de là. La correction de cette erreur devrait donc permettre le bon fonctionnement de la redirection, d'où la question de savoir quel est ce message.

Bonne journée,
0
Utilisateur anonyme
6 juin 2016 à 16:50
Salut mon ptit poulet :-) lol je te propose un code dis moi ce que tu en pense

voici un fichier que tu pourrais nommer mailMaGueule.php
<?php
    function sendMailPlease($datasArrayForMail){
       
       $nom     = htmlentities($datasArrayForMail['nom']); 
       $destinataire = "nomAdresseMail@maGueule.com";
       $email   = htmlentities($datasArrayForMail['email']);
       $message = htmlentities($datasArrayForMail['message']);
       $sujet =  htmlentities($datasArrayForMail['sujet']);


       $contenu = '<html><head><title>Titre du message</title></head><body>';
       $contenu .= '<p>Bonjour, vous avez reçu un message </p>';
       $contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
       $contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
       $contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
       $contenu .= '</body></html>'; 
	  
       $headers = 'MIME-Version: 1.0'."\r\n";    
       $headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
     
       if(mail($destinataire, $sujet, $contenu, $headers)){
            $response = array['true','message envoyé'];
            return $response;
       }else{
            $response = array['false','message pas envoyé'];
            return $response;
       }
        
    }
?>


dans ton code php tu fait une inclusion de ton fichier mailMaGueule.php avant ton code html

<?php
    include('http://tonSiteDeMalade.com/fichier_php/mailMaGueule.php');
    $errors = "";
    $nom = "";
    $mail = "";
    $sujet = "";
    $message = "";
    if(isset($_POST['action'])){
        if($_POST['action']=="mail"){
        //si il existe une variable message (ton formulaire est poster)
        $response = sendMailPlease($_POST);
        if($response['0']==='true'){
            header('location:endOfContact.php');
        }else{
            $errors = response['1'];
            $nom = $_POST['nom'];
            $nom = $_POST['message'];
        }
        }
    }
?>
<html>
    <head>
        ....

par contre ton formulaire je le vois comme ca :
<?php if($errors != ""){ echo '<h2 class="error">'.$errors.'</h2>'; } ?>
<form action="" method="POST">
    <input type="text" name="nom" value="<?php echo $nom; ?>" placeholder="Votre nom :"/>
    <input type="text" name="email" value="<?php echo $email; ?>" placeholder="Votre Mail :"/>
    <input type="text" name="sujet" value="<?php echo $sujet; ?>" placeholder="Objet de votre message : "/>
    <textarea name="message" placeholder="Votre message : "><?php echo $message; ?><textarea/>
    <input type="hidden" value="mail" name="action"/>
    <input type="submit" value="Envoyer ma gueule"/>
</form>


voila en gros tu as ta fonction que tu peux améliorer et surtout securiser.. Tu as un formulaire avec une gestion d'érreur

En gros si tu post des variable en post notament "action" si une variable action est poster (donc que ton form est submit), que la variable est "mail". Alors, il appelle la fonction sensMailPlease(avec les POST); la fonction te retourne un tableau avec 2 indexes : ['0']=>qui corespond a résultat de l'envoi de mail (true ou false -> boolean). ['1'] => qui corespond au message d'eereur

bref si le message est bien partis avant de continuer le chargement (c'est pour ca que le code php doit etre en premier dans ta page PHP) on redirige notre internaute vers une autre page.

Sinon si il y a eut un soucis il re remplis le formulaire de base avec les valeurs qui ont été postés. avec le message d'erreur dans un h2 de classe error

bref ya surement des fautes de frappes mais tu as ta base désolé j'ai taper ca en 2 seconde

bon courage !!
0
le message d'erreur est le suivant

Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sda/0/c/siteartpeinture/traitement.php:1) in /mnt/169/sda/0/c/siteartpeinture/traitement.php on line 21


pourtant en local ça fonctionne trés bien, la page appelée arrive dés que le post est envoyer,
quand je le parachute sur mon site le message part et arrive a destination mais pas de page seulement le message d'erreur
C'est pas la page sur mon pc qui s'ouvre mais bien celle sur le web
0
salut XavLeVrais cot cot

le code que tu a fait est plein de bonnes idées a exploiter mais il ne me dis pas comment a la fin du post je peut faire ouvrir la page html
En gros le visiteur clique sur "envoyer" et se retrouve ensuite devant une page avec le message "Votre message a bien été envoyer" et cette page bien sur est une page du site avec ses menus déroulants pour qu'il puisse
continuer a vagabonder a son gré et a son aise avec tout le confort qui se doit sur mon site

je t'envoie tout le code des deux fichiers, sachant qu'ils fonctionnent en local mais pas sur le web.

message d'erreur sur le web:
Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sda/0/c/siteartpeinture/traitement.php:1) in /mnt/169/sda/0/c/siteartpeinture/traitement.php on line 21



Le formulaire c'est moi qui l'ai pondu


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sans titre 1</title>
<style type="text/css">
form {
margin: 0 auto;
width: 400px;
padding: 1em;
border: 2px solid #CCC;
border-radius: 1em;
}
label {
display: inline-block;
width: 90px;
text-align: right;
}
input, textarea {
font: 1em sans-serif;
width: 300px;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px solid #999;
}
textarea {
vertical-align: top;
height: 5em;
resize: vertical;
}
.submit{
width: 25%;
height: 5%;
border-radius: 10px;
}
</style>
</head>
<body bgcolor="#94AD5F" text="#66425F" >
<div align="center">
<form method="post" action="traitement.php" >
<p><label for="nom">Nom Prenom :</label><input type="text" name="nom" id="nom" /></p>
<p><label for="email">votre Email:</label><input type="email" name="email" id="email" ></p>
<p><label for="message">Message :</label><textarea id="message" name="message" cols="30" rows="8"></textarea></p>
<br /><br />
<p ><input class="submit" type="submit" value="Envoyer" /></p>
<p ><input class="submit" type="reset" value="Reinitialisez"/></p>
</form>
<p align=center> <A href="javascript:history.back();"><IMG alt="PRECEDENTE" src="images/PRECEDENTE.gif"
width=100 height="40" align=middle border=2></A> </p>
</div>
</body>
</html>


Le fichier "traitement.php"

<?php
if ($_SERVER['REQUEST_METHOD']=='POST') {
$nom = htmlentities($_POST['nom']);
$destinataire = '***@***';
$email = htmlentities($_POST['email']);
$message = htmlentities($_POST['message']);

$sujet = 'Titre du message';
$contenu = '<html><head><title>Titre du message</title></head><body>';
$contenu .= '<p>Bonjour, vous avez reçu un message à partir de votre site web.</p>';
$contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
$contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
$contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
$contenu .= '</body></html>';

$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";

mail($destinataire, $sujet, $contenu, $headers);
header('Location: http://toutsur la ponte.free.fr /pagefinformulaire .html');
exit();
}
?>


voila il y a tout, peut être quand couvant un peu le sujet tu pourrait éventuellement faire éclore quelque chose
merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
8 juin 2016 à 03:34
Il y a du code HTML qui ce généré avant ton header...Désolé j'y ai pas pensé. Il faudrait utiliser les OBSTART() et OB_END() mais encore une fois ca risque de déconner sinon tu le fait en JS

remplace ton header(location::traitement.php) par le code suivant :

// header('Location:ton url')
echo '<script language="JavaScript"> document.location.href="nouvellepage.html" </script>'

le soucis c'est que ta redirection se fait coté client et que si le mec n'as pas js d'activer dans son navigateur ba ca marchera pas..

je vais essayer de te faire un truc vérifie dans les param de ton seerver qu'il accepte les headers et vérifie bien qu'aucun code html ne se met ligne 21 inspecte l'element avec ton navigateur.

balance moi une url pour ton serveur que j'y jette un oeil biz
0
Salut XavLeVrais

J'ai trouvé une solution toute bête qui fonctionne
j'ai carrément copié le code entier de la page html qui doit s'ouvrir avec:
echo '      tout le code  html de la page      ';

et supprimer la ligne de code header

je vais essayer avec le code js que tu m'a envoyé, si ça fonctionne ce sera mieux, parce qu’avec ma méthode ça fait beaucoup de code dans le fichier php
mon serveur c'est http://siteartpeinture.free.fr
0