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 qui ne passe pas dans une seule page


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Points : 51
    Points
    51
    Par défaut Header qui ne passe pas dans une seule page
    Bonsoir,

    Je viens poster un message ici avant de me retrouver complètement chauve!

    Sur une de mes pages de mon site, et seulement celle-là, mes header(....) ne fonctionnement pas et me donnent une belle erreur :
    Warning: Cannot modify header information - headers already sent by (output started at /home/lafolied/public_html/envoi_mail_annonce.php:26) in /home/lafolied/public_html/centre/formulaire_mail_annonce.php on line 38
    Voici le code:

    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
    <?php
    	require("php/connexion_base.php");
     
    	if(isset($_GET['id'])){
    		$id_annonce = $_GET['id'];
    		$_SESSION['id_annonce_mail'] = $_GET['id'];
    	}else{
    		$adresse="affiche_annonce_visu.php?id=".$_SESSION['id_annonce_mail'];
    		if((!isset($_POST['nom']) || $_POST['nom'] == "") || (!isset($_POST['mail']) || $_POST['mail'] == "") || (!isset($_POST['message']) || $_POST['message'] == "") ){
    			$_SESSION['envoi_mail'] = false;
    			header("location:".$adresse);
    		}else{
    			$id_annonce = $_POST['id'];
    			$titre = $_POST['titre'];
    			$nom = $_POST['nom'];
    			$mail = $_POST['mail'];
    			$mail_troqueur = $_POST['mail_troqueur'];
    			$tel = $_POST['tel'];
    			$msg = $_POST['message'];
     
    			$headers ="From: ......\r\n";
    			$headers.="Reply-To: ".$mail."\r\n";
    			$headers.="Content-Type: text/html; charset='UTF-8'\r\n";
    			$headers.="Content-Transfer-Encoding: 8bit\r\n";
     
    			$message ="Bonjour,<br/><br/>";
    			$message.=$nom." vous a envoyé le message suivi concernant votre annonce \"".$titre."\":<br/>";
    			$message.="<br/><br/>";
    			$message.=$msg."<br/><br/>";
    			$message.=$nom." ne connaîtra votre adresse e-mail uniquement si vous répondez à son message."."<br/>";
    			$message.="Merci pour votre confiance.<br/><br/>";
     
    			if(mail($mail_troqueur, "Message concernant votre annonce : \"".$titre."\" sur ......", $message, $headers)){
    				$_SESSION['envoi_mail'] = true;
    				header("location:".$adresse);
    			}else{
    				$_SESSION['envoi_mail'] = false;
    				header("location:".$adresse);
    			}
    		}
    	}
     
    	$req = "select titre, identifiant, mail from troqueurs 
    	inner join annonces on annonces.id_troqueur = troqueurs.num_id
    	where num_annonce = ".$id_annonce;
    	$result = mysql_query($req) or die("Impossible de récupérer les infos troqueur");
     
    	while($data = mysql_fetch_array($result)){
    		$titre = $data['titre'];
    		$identifiant = $data['identifiant'];
    		$mail = $data['mail'];
    	}
    ?>
    Vous souhaitez envoyer un message à <?php echo $identifiant; ?> à propos de l'annonce "<?php echo $titre; ?>"<br/><br/>
    <form method="POST" action="envoi_mail_annonce.php" >
    	<p>Votre nom* : <input type="text" name="nom" <?php if(isset($_SESSION["ident"])){echo"value='".$_SESSION["ident"]."'";} ?>/></p>
    	<p>Votre mail* : <input type="text" name="mail" <?php if(isset($_SESSION["mail"])){echo"value='".$_SESSION["mail"]."'";} ?>/></p> 
    	<p>Votre numéro de téléphone : <input type="text" name="tel" <?php if(isset($_SESSION["tel"])){echo"value='".$_SESSION["tel"]."'";} ?>/></p>
    	<p><textarea name="message" cols=60 rows=10></textarea>*</p>
    	<input type="hidden" name="id" value= <?php echo $id_annonce; ?> />
    	<input type="hidden" name="titre" value= <?php echo $titre; ?> />
    	<input type="hidden" name="mail_troqueur" value= <?php echo $mail; ?> />
    	<p><input type="submit" value="Envoyer" /></p>
    </form>
    Le mail part bien mais c'est tout...
    J'ai d'autres header dans d'autres pages et je n'ai pas de souci alors que l'encodage est le même pour toutes les pages. Doit y avoir une erreur ici c'est sûr mais impossible de la trouver.
    J'ai vérifié les éventuels espaces qu'il pourrait y avoir sur les balises <?php et ?> de la page contenant ce morceau mais j'ai rien trouvé.
    Je ne sais plus où chercher.

    L'un de vous a t'il une idée? merci d'avance!

    PS : j'ai oublié de préciser que mon site est hébergé chez planethoster si ça peut aider... Sous wamp je n'avais pas tous ces problèmes

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    vérifier que :
    • la page est encodée en "utf-8 SANS BOM"
    • c'est "la bonne" ligne 38 (montrée dans ce code)


    Quelques petites améliorations du code :
    1/ Remplacer
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    		if((!isset($_POST['nom']) || $_POST['nom'] == "") || (!isset($_POST['mail']) || $_POST['mail'] == "") || (!isset($_POST['message']) || $_POST['message'] == "") ){
    par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    		if((empty($_POST['nom']) (empty($_POST['mail']) || (empty($_POST['message']) ){
    N.B. C'est similaire ICI, mais pas identique -> voir l'utilisation de empty() (notamment : "0" est considéré comme empty)

    2/ Remplacer
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			if(mail($mail_troqueur, "Message concernant votre annonce : \"".$titre."\" sur ......", $message, $headers)){
    				$_SESSION['envoi_mail'] = true;
    				header("location:".$adresse);
    			}else{
    				$_SESSION['envoi_mail'] = false;
    				header("location:".$adresse);
    			}
    par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			$_SESSION['envoi_mail'] = mail($mail_troqueur, "Message concernant votre annonce : \"".$titre."\" sur ......", $message, $headers); // true ou false
    			header("location:".$adresse);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Points : 51
    Points
    51
    Par défaut
    Merci jreaux62 pour ta réponse et tes conseils.

    Ma page est bien encodée en "utf-8 SANS BOM" et la ligne indiquée correspondant bien au header après le $_SESSION['envoi_mail']=......
    La page qui appelle ce contenu est également encodée en utf-8 sans BOM.

    Je te mets son contenu au cas où...

    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
     
    <?php
    	session_start();
    ?>
    <html>
     
    <head>
    	<title>...</title>
    	<meta name="description" content="website description" />
    	<meta name="keywords" content="website keywords, website keywords" />
    	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    	<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Tangerine&amp;v1" />
    	<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz" />
    	<link rel="stylesheet" type="text/css" href="style.css" />
    	<script type="text/javascript" src="js/js_form.js"></script>
    	<script type="text/javascript" src="js/js_ajax.js"></script>
    	<script type="text/javascript" src="js/prototype.js"></script>
    </head>
     
    <body>
      <div id="main">
        <div id="header">
          <div id="logo">
            <h1><a href="index.php">....</a></h1>
          </div>
          <?php require("parties/menu.php"); ?>
        </div>
        <div id="site_content">
    		<div id="sidebar_container">
    			<?php 
    				require("parties/identification.php");
    				require("parties/top_annonces.php"); 
    			?>
    		</div>
    		<div id="content">
    			<?php
    				include("centre/formulaire_mail_annonce.php");
    			?>
    		</div>
        </div>
        <div id="footer">
            <?php require("parties/footer.php"); ?>
        </div>
      </div>
    </body>
    </html>

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 099
    Points : 4 444
    Points
    4 444
    Par défaut
    une ligne blanche en tout début de fichier ne te dérange pas ? et si je comprend bien tu affiches tout ce code html avant ?
    Pas un seul caractère ne doit être envoyé avant header() !
    $moi= ( !== ) ? : ;

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Points : 51
    Points
    51
    Par défaut
    Si si papajoker ça me dérange.
    C'est d'ailleurs pour ça qu'il n'y en a pas dans mes fichiers. J'ai dû sauter une ligne dans code /code
    Et j'ai des header dans d'autres pages à peu près au même endroit mais je n'ai pas ce message

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		<div id="content">
    			<?php
    				include("centre/formulaire_mail_annonce.php");
    			?>
    		</div>
    Tu as en effet du code HTML avant !

    Et si les autres header(...) ne donnent pas de message d'erreur, c'est peut-être que tu ne "passes" simplement pas "dedans" (if...else...).

    Il faut revoir la conception des pages : faire le traitement AVANT tout envoi de code HTML. Soit : juste après le session_start();

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 099
    Points : 4 444
    Points
    4 444
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Il faut revoir la conception des pages
    Pour toi , ce serait de faire pointer ton formulaire directement vers ta page php d'envoi email qui, elle ne fait que 2 redirections bon ou mauvais et n'affiche rien.
    $moi= ( !== ) ? : ;

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Points : 51
    Points
    51
    Par défaut
    Merci beaucoup à vous 2!

    J'ai déplacé le traitement du mail dans une page sans HTML et plus de problème.
    PS: mes autres header étaient aussi dans des fichiers sans HTML, j'avais pas fait le rapprochement.

    Encore merci en tous cas et bonne fin de journée à vous!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/09/2007, 09h23
  2. Réponses: 6
    Dernier message: 22/05/2007, 09h55
  3. Réponses: 1
    Dernier message: 21/12/2006, 11h17
  4. Réponses: 10
    Dernier message: 15/12/2006, 07h34
  5. Ctrl -] ne passe pas dans une console avec vim
    Par Celelibi dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 10/03/2006, 13h35

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