Problème headers

Merlin62 Messages postés 9 Statut Membre -  
Merlin62 Messages postés 9 Statut Membre -
Bonjour,

Je sais que vous êtes déjà en train de vous dire encore un problème de headers et il n'a pas lu les post précédents!
Et bien si et j'ai fait tout ce qui était dit dans les post mais rien n'y fait!

Donc j'ai ce fameux message :
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\...\main.php:184) in C:\...\stock.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\...\main.php:184) in C:\...\stock.php on line 2


J'ai vérifié qu'il n'y avait pas de parasite, je l'ai encodé en ANSI, en utf-8, utf-8 sans BOM et à chaque fois la même erreur

Je l'ai écrit avec et sans espace, avec et sans saut de ligne, collé à <?php et pas collé à <?php et là pareil rien ne change...

Voici le début mon code:

<?php
session_start();
if (isset($_SESSION['connect']))//On vérifie que le variable existe
{
        $connect=$_SESSION['connect'];
		$nom_contact=$_SESSION['nom'];
		$prenom_contact=$_SESSION['prenom'];//On récupère la valeur de la variable de session
}
else
{
        $connect=0;//Si $_SESSION['connect'] n'existe pas, on donne la valeur "0"
}
       
if ($connect == "1") // Si le visiteur s'est identifié
{// On affiche la page cachée.
?>


main.php, page principale et stock est la page appelée dans main.php.
Ma page main.php est faites sous avec des <div>, c'est d'ailleurs depuis que j'ai mis des <div> à la place d'un tableau que j'ai ce problème...

Merci

17 réponses

Yorundr Messages postés 315 Statut Membre 44
 
Salut,

mais un @ devant ton session_start, et le s messages d'erreur disparaitrons
0
le père
 
Bonjour

Le code que tu montres et bien celui de stock.php;, non ?
Or tu as déjà envoyé quelque chose à la ligne 184 du fichier main.php, c'est écrit en clair dans le message.

Peux-tu montrer le code de main.php, avec ta ligne 184 qui envoie quelque chose et on include stock.php qui vient après ?

Et il ne faut surtout pas cacher les erreurs avec @, il faut les corriger quand elles viennent de toi comme c'est le cas ici.
0
Yorundr Messages postés 315 Statut Membre 44
 
Salut ,

ce ne sont que des warning, probablement parce qu'il a redéclaré plusieurs session_start.

Dans la logique c'est vrai que c'est mieu de corriger le probleme, mais bon...
0
le père
 
S'il y a plusieurs session_start, il faut supprimer ceux qui ne servent à rien, ça n'est pas plus compliqué que de mettre un @ devant. S'il n'y en a qu'un, ses sessions ne marcheront jamais comme ça.
"Une erreur que tu ne comprends pas ? Cache-la !" me semble être le pire conseil à donner à quelqu'un qui essaye de comprendre.
0

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

Posez votre question
Yorundr Messages postés 315 Statut Membre 44
 
Re,

Si tu peut acceder a ta page, en "l'incluant" ou directement, la il te faut bien un session_start sur les deux, et la tu aura l'erreur.

Tu a raison, j'aurais peut etre du commencer par expliquer pk mettre un @ et a quoi ca sert.
0
Merlin62 Messages postés 9 Statut Membre
 
Bonjour,

Tout d'abord merci pour vos réponse rapides!^^

Le code que je montre est bien celui de stock.php

Il n'y a qu'un seul session_start dans toute la page.

Je veux bien vous montrer la ligne 184 de main.php mais c'est une ligne qui appartient à une fonction menu, c'est la fonction qui permet d'afficher mon menu.

Je vous mets la fonction entière du coup:

function menu()
{
	global $menu_cli;
	global $smenu_cli;
	global $menu_so;
	global $smenu_so;
	global $menu_pro;
	global $smenu_pro;
	$i=0;$k=0;$m=0;
	echo "<table>
		<tr>
			<th align=left bgcolor='#A1011D'>
				<a href='accueil.php'>
				Accueil
				</a>
			</th>
		</tr>";
	
	while ($menu_so[$i][0]!="end-menu_so")
	{		
		echo "<tr>
				<th>"
					. $menu_so[$i][0] . 
				"</th>
			</tr>";
		$j=0;
		while ($smenu_so[$i][$j][0]!="end-menu_so")
		{
			echo"<tr>";
			echo "<td onmouseout=\"this.style.background='#E6EBEE';\" onmouseover=\"this.style.background='#A1011D';\" bgcolor='#E6EBEE'>
					<a onmouseout=\"this.style.color='#0D3D6D';\" onmouseover=\"this.style.color='white';\" href='main.php?page=". $smenu_so[$i][$j][1] . "'>"
					. $smenu_so[$i][$j++][0] . 
					"</a>
					</td>";
			echo"</tr>";
		}	
	$i++;
	}
	while ($menu_pro[$k][0]!="end-menu_pro")
	{
		echo"<tr>";
		echo"<th align=left bgcolor='#A1011D' style='font-size: small;padding: 2px 0px 2px 2px;'>" . $menu_pro[$k][0] . "</th></tr>";
		$l=0;
		while ($smenu_pro[$k][$l][0]!="end-menu_pro")
		{
			echo"<tr>";
			echo "<td onmouseout=\"this.style.background='#E6EBEE';\" onmouseover=\"this.style.background='#A1011D';\" bgcolor='#E6EBEE'>
					<a onmouseout=\"this.style.color='#0D3D6D';\" onmouseover=\"this.style.color='white';\" href='main.php?page=". $smenu_pro[$k][$l][1] . "'>"
					. $smenu_pro[$k][$l++][0] . 
					"</a>
					</td>"; //---> LIGNE 184
			echo"</tr>";
		}
	$k++;
	}
	while ($menu_cli[$m][0]!="end-menu_cli")
	{
		echo"<tr><th align=left bgcolor='#A1011D' style='font-size: small;padding: 2px 0px 2px 2px;'>" . $menu_cli[$m][0] . "</th></tr>";
		$n=0;
		while ($smenu_cli[$m][$n][0]!="end-menu_cli")
		{
			echo"<tr>";
			echo "<td bgcolor='#E6EBEE' onmouseout=\"this.style.background='#E6EBEE';\" onmouseover=\"this.style.background='#A1011D';\"><a onmouseout=\"this.style.color='#0D3D6D';\" onmouseover=\"this.style.color='white';\" href='main.php?page=" . $smenu_cli[$m][$n][1] . "'>" . $smenu_cli[$m][$n++][0] . "</a></td>";			
			echo"</tr>";
		}
	$m++;
	}echo "</table>";
};


Voilà
0
le père
 
La ligne include "stock.php"; est bien APRÈS l'appel à menu ? Tu ne l'as pas montré
0
Merlin62 Messages postés 9 Statut Membre
 
Désolé, un oubli.

Oui oui elle est bien après

	<div id="navigation">
	<?php menu();?>
	</div><!-- #navigation -->
	
	<div id="contenu">
				<?php	if ($tampon[1]!="php") 
						{
						echo $body;
						} 
					else
					{	
						include $pageInclude;
					}	?>
	</div><!-- #contenu -->


$tampon vérifie l'extension du fichier
$pageinclude est le chemin du fichier à afficher donc ici stock.php
0
le père
 
Donc tu fais exactement ce qui est interdit comme expliqué dans tous les posts que tu as lus ;)
Quand tu appelles la fonction menu, tu envoies des chose à afficher au client (<table><tr> etc..)
Puis, PLUS TARD, tu appelles le session_start(), mais là c'est interdit.
Ça n'est pas interdit pour le plaisir d'embêter le monde, mais parce que les sessions (comme les cookies, les redirections avec Location: etc....) sont dans les en-têtes du protocole HTTP ( rien à voir avec <header> html) et que les en-têtes doivent être envoyées avant les données.
Une seule solution : enlever le session_start d'où il est pour le remettre AVANT tout envoi de données au client.

Au passage, c'est curieux que ta page commence par <table>. Tu devrais au moins avoir la structure<html> avec header et body..
0
Merlin62 Messages postés 9 Statut Membre
 
Non elle ne commence pas par table, je t'ai juste mis les lignes concernées^^

Ce que je ne comprends pas c'est qu'au début ma page main.php était faite sur une base de tableau, mais je me suis rendu compte que ça ne passait pas avec IE donc c'est là que j'ai vu qu'il fallait passer par des <div>.
Donc c'est ce que j'ai fait, et c'est depuis ce temps que j'ai ce problème, avant tout fonctionnait très bien...

Comment ça se fait? T'as une idée?
0
le père
 
Non, je n'ai pas d'idée. Il doit y avoir autre chose que tu as touché aussi, et je ne peux pas te dire quoi sans avoir l'ancien code à côté du nouveau.
0
Merlin62 Messages postés 9 Statut Membre
 
Ce qui a changé c'est qu'à la place des balises <table> c'est des <div> donc qui fonctionne avec des feuilles de styles appelées dans le <head>, donc au début je pensais que c'était dû à ça sans grande conviction et sans connaissances assez grandes.
0
Yorundr Messages postés 315 Statut Membre 44
 
Tu a bien mit le session_start tout en haut de ta page avant meme la balise html ?

et sinon avec un @ ca donne koi ?
0
Merlin62 Messages postés 9 Statut Membre
 
Oui il est tout en haut du haut sans espace.
Avec le @ il n'y a plus rien...
0
le père
 
Oui il est tout en haut du haut
Tout en haut de main.php ou du fichier inclus stock ?
0
Yorundr Messages postés 315 Statut Membre 44
 
main.php
0
Merlin62 Messages postés 9 Statut Membre
 
Tout en haut de stock.php. Je sais maintenant qu'à cause de la fonction menu c'est pas là qu'il devrait être mais stock.php c'est la page où je dois restreindre l'accès aux utilisateurs et vérifier qu'ils sont loggé.
J'ai enlevé ma fonction d'affichage du menu et j'ai directement mis le tableau
0