IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

header( Location: Warning: Cannot modify header information


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 11
    Points
    11
    Par défaut header( Location: Warning: Cannot modify header information
    Bonjour

    j'utilise un script pour vérifier mon formulaire mais impossible de faire une redirection vers une page de remerciement avec header(Location:

    voici le script que j'utilise :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    $webmaster = "mail@site.com";
     
    if(isset($_POST['envoyer'])){     
        $alerte = $_POST['envoyer']; 
        $nom = htmlentities($_POST['nom'], ENT_NOQUOTES);  
        $mail = htmlspecialchars($_POST['mail'], ENT_QUOTES);  
        $tel = htmlspecialchars($_POST['tel'], ENT_QUOTES); 
        $sujet = htmlspecialchars($_POST['sujet'], ENT_QUOTES); 
        $message = htmlspecialchars($_POST['ville'], ENT_QUOTES); 	
    }
     
     
    function verif_null($var){
        if($var!=""){
         return $var;
       }
    }
     
    function verif_mail($var) 
    {
       $code_syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; 
          if(preg_match($code_syntaxe,$var)){ 
            return $var;
          }   
    }
     
    function verif_tel($var)  
    {
       $code_syntaxe='#^[0-9]{9,18}$#'; 
          if(preg_match($code_syntaxe,$var)){
            return $var;
          }
    }
    function envoi_mail($webmaster,$nom,$mail,$sujet,$tel,$message){ //fonction qui envoie le mail
           $contenu_message = "Nom : ".$nom."\nMail : ".$mail."\nSujet : ".$sujet."\nTelephone : ".$tel."\nMessage : ".$message;
    	   $entete = "From: ".$nom." <".$mail."> \nContent-Type: text/html; charset=iso-8859-1";
     
           mail($webmaster,$sujet,$contenu_message,$entete);
     
     
    }
     
     
    function verif_form($webmaster,$nom,$mail,$sujet,$tel,$message){         if(verif_null($nom)
    		&& verif_null($sujet)
    		&& verif_null($message)
    		&& verif_tel($tel)
    		&& verif_mail($mail)
    		) 
    		{ 
    		   envoi_mail($webmaster,$nom,$mail,$sujet,$tel,$message);
    		   $action = "go";
    		   echo "<font color=\"red\"  size=\"3\" face=\"Verdana, Arial, Helvetica, sans-serif\" ><strong>Tout les champs sont valider le mail est envoyé. Merci</strong></font><br>"; // Le mail est envoyé
    		   echo "<font color=\"red\"  size=\"3\" face=\"Verdana, Arial, Helvetica, sans-serif\" ><strong>".$action."</strong></font><br>";
    		   if($action == "go") { header('Location: http://www.monsite.com/'); }
    		}else{
    		   echo "<font color=\"red\" size=\"3\" face=\"Verdana, Arial, Helvetica, sans-serif\" ><strong>Veuillez saisir correctement tous les champs en rouge.</strong></font><br>"; // Une erreur dans le formulaire
    		}
    }
     
    ?>
     
    <br />
    <?php 
    if(isset($alerte)){ 
       verif_form($webmaster,$nom,$mail,$sujet,$tel,$message); 
    }
    ?>

    le script marche mais je n'arrive pas a savoir ou rajouter la redirection

    j'ai mis le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		   if($action == "go") { header('Location: http://www.monsite.com/'); }
    après la vérification d'envoi du mail.

    mais cela m'indique l'erreur suivante :

    Warning: Cannot modify header information - headers already sent by (output started at /menu.php:108) in /formulaire.php on line 120
    la ligne 120 étant la ligne avec header'Location


    et mon menu.php comprend comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $url = $_SERVER["PHP_SELF"]; 
    $path = explode('/', $url); 
    ...
    ...
    if($path[2] == 'contact') {
    	$menu .= 'class="active"';
    }
    	$menu .= '><a href="/fr/contact">
    pour mettre une classe="active" dans mon menu.

    PS : je viens de virer mo menu et cette fosi ile me met le meme message avec navigation.php (sibear de gauche) qui elle en contient pas de script juste des includes du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include ($_SERVER['DOCUMENT_ROOT'].'/navigation.php');/?>
    qui est d'ailleur sur la même sturcture que moin en-tete avec les même type d'include qui se trouve avant mon menu et qui ne met pas le message ???


    1°) le header(Location: est-il bien placé ???

    2°) que veut dire le message d'erreur
    Warning: Cannot modify header information - headers already sent by (output started at /menu.php:108) in /formulaire.php on line 120
    ???

    Merci a tous

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    il ne faut pas placer du texte avant le header, qu'as tu lignes 108 ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    merci cela fonctionne

    1°) ligne 108 j'ai une simple include
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include ($_SERVER['DOCUMENT_ROOT'].'/structure/structure_module_fin.php');?>
    y a t - il un probleme particulier (ligne 108 c'est la ligne 108 du fichier menu.php(bout de code a inclure) ou c'est la ligne 108 de la page code source)


    2°) mais comme j'ai une include de toutes mes pages vers le fichier entete.php qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
     
    <head>
    si header('Location: doit se trouver avant le code html


    cela veut dire que je vais devoir charger la vérification de mon formulaire sur toutes mes pages ????

    toutes mes pages qui n'ont pas de formulaire vont aussi verifier et charger des variables alors qu'elles n'ont pas de formulaire a vérifier ???

    je vais me retrouver avec tout cela a charger des variables qui servent a rien pour chaque page (le serveur va faire la geule ???) lol

    tout cela pour rien lol, il doit bien y avoir une solution pour alleger cela lol

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    si tu fais un header pour une redirection, t'as pas besoin d'inclure ton entete.php

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Des caractères indésirables peuvent précéder <?php sans que cela se voit. Tout dépend de l'encodage du fichier qui retourne cette erreur.

    En UTF-8 trois caractères invisibles précèdent la chaîne <?php :
    239 - 187 et 191

    En UTF-16BE 2 caractères :
    254 et 255

    En UTF-16LE 2 caractères :
    255 et 254

    Seuls les encodages UTF-8 (sans BOM) et Ansi n'envoient rien au navigateur.
    Donc quand on a l'impression d'avoir un code irréprochable, il faut commencer par vérifier sous Notepad++ le type d'encodage du fichier récalcitrant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Warning: Cannot modify header information
    Par info3licen dans le forum Langage
    Réponses: 8
    Dernier message: 13/05/2009, 16h00
  2. [Système] Warning: Cannot modify header information
    Par white_tiger dans le forum Langage
    Réponses: 14
    Dernier message: 20/02/2008, 17h16
  3. Réponses: 1
    Dernier message: 17/07/2007, 11h49
  4. Réponses: 4
    Dernier message: 16/07/2007, 13h42
  5. Warning: Cannot modify header information
    Par neXistPa dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2006, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo