Cannot modify header information - headers already sent - PHP - Programmation
Marsh Posté le 09-12-2012 à 12:11:32
A priori il y a des appels à session_start() qui sont fait alors que du contenu a déjà été envoyé au navigateur.
cf manuel :
Citation : Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant d'afficher quoi que ce soit dans le navigateur. |
Il faudrait vérifier, il ne faut rien qu'il y ait avant le session_start(). Même un retour à la ligne avant le <?php suffit à afficher cette erreur.
Donc en gros, il faut que le fichier commence par <?php (pas d'espace, pas de retour à la ligne), et que session_start() soit appellé avant le ?> et toute fonction qui affiche du contenu du style echo.
Marsh Posté le 09-12-2012 à 12:31:14
voici le début de mon index.php
Citation : <?php |
Marsh Posté le 09-12-2012 à 15:10:50
j'ai bien vérifié les espaces et retour à la ligne mais tjrs le message d'erreur
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homepages/37/d141117866/htdocs/BER/contact.php:5) in /homepages/37/d141117866/htdocs/BER/for/index.php on line 2
Marsh Posté le 11-12-2012 à 21:52:43
merci pour cette précision mais dans contact.php j'ai mon <head> de la ligne 3 à 14, donc ligne 5 rien ne peut envoyer du contenu...
Marsh Posté le 12-12-2012 à 08:47:34
Eh bien ton <head>, c'est du contenu, si tu inclus la page index.php après c'est donc normal.
Ca serait plus simple si on avait aussi le contenu de contact.php (au moins les premières lignes)
Marsh Posté le 12-12-2012 à 17:44:45
Ah oui j'ai un include avec mon index dedans bien plus bas
Mais si je le déplace il ne sera plus au bon endroit sur ma page web?
comment faire pour mettre l'include avant le head?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<meta name="keywords" content="lavaur, béchade, soudure, mécano, issoire, chaudronnerie" />
<meta name="description" content="une dizaine de mots différent sur chaque page" />
<link href="style.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" type="image/x-icon" href="/img/favicon.ico" /><!-- pour IE -->
<link rel="icon" type="image/gif" href="/img/favicon.gif" /><!-- pour les navigateurs standards -->
<style type="text/css">
</style>
<link rel="stylesheet" type="text/css" href="for/contact.css" />
</head>
<body>
<div id="all">
<div class="ban">
<div class="B" style="height: 185px; width: 172px">
<object type="application/x-shockwave-flash" data="img/B.swf" style="width: 177px; height: 198px">
<param name="movie" value="img/B.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<p>Installez le plugin Flash pour voir l'animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le télécharger</a></p>
</object>
</div>
<div class="ergheaud">
<object type="application/x-shockwave-flash" data="img/ergheaud.swf" width="339" height="121">
<param name="movie" value="img/ergheaud.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<p>Installez le plugin Flash pour voir l'animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le télécharger</a></p>
</object>
</div>
</div>
<div class="bandroite">
<div id="citation">
<object type="application/x-shockwave-flash" data="img/stars.swf" width="330" height="134">
<param name="movie" value="img/stars.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<p>Installez le plugin Flash pour voir l'animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le télécharger</a></p>
</object>
</div>
<div id="flag">
<div id="drfr"><a href="contact.php"> <img alt="Francais" src="img/img-transparent.gif" width="50" height="25" /></a></div>
<div id="dral"><a href="contact.php"> <img alt="Allemand" src="img/img-transparent.gif" width="50" height="25" /></a></div>
<div id="dren"><a href="contact.php"> <img alt="Anglais" src="img/img-transparent.gif" width="50" height="25" /></a></div>
</div></div>
<div class="nav">
<div class="navcontenu">
<div class="B1"><div class="txtbtnnormalbk"><a href="chaudronnerie.html">Chaudronnerie</a></div>
<a href="chaudronnerie.html"><img alt="Chaudronnerie" src="img/chaudronnerie2130.JPG" width="130" height="90" class="bordureimage" /></a><br/>
<a href="chaudronnerie.html"><img alt="chaudronnerie" src="img/boutonmenu.png" width="130" height="35" class="bordureimage" /></a></div>
<div class="B2"><div class="txtbtnnormalbk"><a href="mecano-soudure.html">Mécano-soudure</a></div><img alt="mécano-soudure" src="img/mecano-soudure-1130.jpg" width="130" height="90" class="bordureimage" /><br/><img alt="Mécano Soudure" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
<div class="B3"><div class="txtbtnnormalbk"><a href="usinage.html">Usinage</a></div><img alt="Usinage" src="img/usinage-1130.jpg" width="130" height="90" class="bordureimage" /><br/><img alt="chaudronnerie" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
<div class="B4"><div class="txtbtnnormalbk"><a href="equilibrage.html">Equilibrage</a></div><img alt="Equilibreuse Schenk" src="img/Equilibreuse-Schenk-130.JPG" width="130" height="90" class="bordureimage" /><br/><img alt="chaudronnerie" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
<div class="B5"><div class="txtbtnrebk"><span lang="fr">
<a href="remise-en-etat-d-equipements.html">Remise en état d'équipements</a></span></div><img alt="Remise en état" src="img/remise-en-etat-3130.jpg" width="130" height="90" class="bordureimage" /><br/><img alt="chaudronnerie" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
<br />
</div>
</div>
<div class="txt">
<div class="index"><a href="index.html">
<img alt="accueil" src="img/accueil.png" width="23" height="90" /></a>
</div>
<div class="plaquette">
<object type="application/x-shockwave-flash" data="img/plaquette.swf" width="139" height="229">
<param name="movie" value="img/plaquette.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<p>Installez le plugin Flash pour voir l'animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le télécharger</a></p>
</object>
</div>
<div class="contenucontact">
<div class="contact">
<p class="txtactivites">
<?php
include( 'for/index.php' );
?>
</p>
</div>
<div class="droite">
<h1><br />
Contactez nous</h1>
<p>Vous pouvez remplir ce formulaire <br />
ou utiliser notre adresse mail :<br />
..........
etc...
Marsh Posté le 12-12-2012 à 18:02:20
Tout dépend de ce que fait index.php en fait.
Si comme je le pense il se contente de traiter la validation du formulaire, il ne devrait pas y avoir de problème. Cette fois, ça dépend du contenu de for/index.php
Le plus simple c'est de tester non?
Marsh Posté le 12-12-2012 à 18:24:25
titi63 a écrit : Ah oui j'ai un include avec mon index dedans bien plus bas |
ton include est une fonction php. Et ton session_start() est dans le fichier inclus c'est bien ça ?
Si c'est le cas tu as la solution à ton problème. Tu as du code PHP avant ton session_start
Marsh Posté le 12-12-2012 à 20:37:29
Si je modifie la position de l'include de mon contact.php, ça me change le formulaire de place, donc ce n'est pas bon
Tester quoi?
voici le contenu de mon index.php :
<?php if(session_id()=='') { session_start(); }
$cryptogramme = TRUE;
$format = 'html';
$foncmail = 'mail';
$hostsmtp = '';
$portsmtp = '25';
$authsmtp = true;
$usersmtp = '';
$passmtp = '';
$included_files = get_included_files();
require(dirname(__FILE__).'/include/fonctions.php');
if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Formulaire de contact</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="revisit-after" content="1">
<meta name="description" content="EXmail 1.2">
<meta name="keywords" content="exmail">
<meta name="robots" content="ALL">
<meta name="distribution" content="Global">
<meta name="rating" content="General">
<meta name="copyright" content="Steuf">
<meta name="author" content="Steuf">
<link rel="stylesheet" type="text/css" href="contact.css">
</head>
<body>
<?php
}
if (isset($_POST['submit'])){
$to = 'xxx@free.fr' ;
$subject = 'Demande depuis www.xxx.fr' ;
if(!CheckEmail($_POST['email'])){
$error[] = '<p class="erreur">Votre adresse Email n\'est pas valide !</p>';
}
if((empty($_POST['cryptogramme']) or $_POST['cryptogramme'] !== $_SESSION['captcha-control']) and $cryptogramme === TRUE){
$error[] = '<p class="erreur">Cryptogramme invalide !</p>';
}
if(empty($_POST['tel'])){
$error[] = '<p class="erreur">Vous n\'avez pas mis votre numéro de téléphone !</p>';
}
if(isset( $_FILES['upload_localfile']['tmp_name']) and is_uploaded_file($_FILES['upload_localfile']['tmp_name'])){
$destination = dirname(__FILE__).'/upload/'.$_FILES['upload_localfile']['name'];
if(move_uploaded_file($_FILES['upload_localfile']['tmp_name'], $destination)){
$uploadinfo = '<p class="erreur">Upload Réussi</p>';
}
}
else {
$uploadinfo = '<p class="erreur"><p>';
}
if(!isset($error) or empty ($error)) {
$reqclass = dirname(__FILE__).'/include/class.phpmailer.php';
require_once ( $reqclass );
$mail = new PHPmailer();
if($foncmail === 'mail'){
$mail->IsMail();
}
elseif($foncmail === 'smtp'){
$mail->IsSMTP();
$mail->Host = $hostsmtp;
$mail->Port = $portsmtp;
$mail->SMTPAuth = $authsmtp;
$mail->Username = $usersmtp;
$mail->Password = $passmtp;
}
if($format === 'html'){
$mail->IsHTML(true);
}
elseif($format === 'texte'){
$mail->IsHTML(false);
}
$mail->From = $_POST['email'];
$mail->FromName = $_POST['nom'];
$mail->AddAddress( $to );
$mail->Subject = $subject ;
$mail->Body = stripslashes( $body );
if(isset($destination)){
$mail->AddAttachment( $destination );
}
if(!$mail->Send()){
echo '<p class="erreur">Erreur fonction mail() :</p>';
echo $mail->ErrorInfo;
}
else{
echo $uploadinfo;
echo '<p class="erreur"> </p><p class="erreur">Formulaire envoyé !</p><p class="erreur">Merci de votre message!</p><p class="erreur">Vous allez recevoir une réponse très prochainement.</p></p>';
}
unset($mail);
}
else {
foreach($error as $errormsg){
echo $errormsg;
}
echo '<p class="erreur">Le Formulaire n\'a pas été envoyé</p>
<p class="erreur">Veuillez recommencer !</p>';
}
if (isset($destination)){
unlink($destination);
}
}
if (((isset($error) or !empty ($error)) and isset($_POST['submit'])) or !isset($_POST['submit'])){
include(dirname(__FILE__).'/formulaire.php');
}
if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
$body = '<html>
<head>
<title>Recontacter cette personne</title>
</head>
<body>
<br>Texte :'.$_POST['comment'].'
<br>téléphone :'.$_POST['tel'].'
<br><br><br>Cliquer sur "répondre" pour donner une réponse par mail
</body>
</html>';
?>
</body>
</html>
<?php }
Marsh Posté le 12-12-2012 à 20:49:45
essaye alors de placer
Citation : <?php if(session_id()=='') { session_start(); } ?> |
tout au début de ta page contact.php (même pas un retour à la ligne ou un espace avant), sans rien changer d'autre
Marsh Posté le 12-12-2012 à 21:01:52
egege a écrit :
|
oui c'est bien cela
ça veux dire qu'il faut que je déplace mon session_start dans mon fichier contact.php ?
j'ai essayé mais cela me donne
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homepages/37/d141117866/htdocs/BER/contact.php:7) in /homepages/37/d141117866/htdocs/BER/contact.php on line 93
et j'ai toujours mon head avant mon include
Marsh Posté le 12-12-2012 à 21:47:37
x1fr a écrit : essaye alors de placer
|
Jackpot, c'est bien ça
Merci à vous d'avoir consacré un peu de votre temps à me répondre
Marsh Posté le 09-12-2012 à 11:48:45
Bonjour à tous
je suis chez 1&1 pour l"hébergement de mes sites, suite a un upgrade de services chez eux, j'ai un message d'erreur sur tous mes formulaires de contact.
http://www.gite-la-tronchere.fr/cont...e-puy-dome.php
http://www.planete-sports.fr/inscrip...ultisports.php
http://www.bergheaud.fr/contact.php
et il y en a d'autres...
avez vous une idée pour régler ce PB qui semble être identique sur chacun de mes site car j'ai une bonne dizaine de formulaires dans ce cas!
merci de votre aide