PHP : PhpMyAdmin : Pb session et/ou cookies
Fermé
gollumeries
Messages postés
13
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2009
-
19 janv. 2007 à 15:06
foufou - 27 avril 2007 à 18:16
foufou - 27 avril 2007 à 18:16
7 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
19 janv. 2007 à 15:21
19 janv. 2007 à 15:21
Bonjour,
En fait, il y a de très fortes chances pour que les alertes aient déjà été présentes sous Linux, mais n'aient pas été affichées du fait des paramètres du serveur php (c'est, en effet, configurable au niveau du serveur...)
Le problème que tu décris vient de la structure du message http.
Quand le serveur web renvoie des informations au navigateur, il envoie d'abord un "header", qui contient notamment les cookies et d'autres informations sur la page elle-même.
Ensuite, le corps du message http contient le code html de la page.
Le serveur Apache envoit tout ça sans qu'on le lui demande explicitement, en général.
Toutefois, certaines fonctions Php impliquent une modification de ce header. C'est le cas de la mise en place d'un cookie, d'une session (puisqu'elles sont identifiées par un cookie), mais aussi de la fonction headers() qui permet de les modifier explicitement.
Toutefois, dans ta page php, suppose que tu aies, en haut de page, un "<html>" , ou un "echo $truc;".
Que va faire le serveur : il va voir qu'il faut envoyer ces informations au client. Seulement pour les envoyer, il faut commencer par envoyer le header de la réponse !
Donc il génère un header "par défaut", et l'envoie au client avec le début du code html demandé.
Si, ensuite, dans ta page, tu appelles méthode qui demande de modifier les headers, tu obtiens le message d'erreur que tu nous montres : "Warning: session_start(): Cannot send session cookie - headers already sent by... "
Voilà, j'espère que mes explications t'ont permises de comprendre le problème. Evidemment, la solution est donc de faire ton session_start() avant toute autre chose sur ta page, y compris avant le <html> !
Bon courage pour la suite,
Xavier
En fait, il y a de très fortes chances pour que les alertes aient déjà été présentes sous Linux, mais n'aient pas été affichées du fait des paramètres du serveur php (c'est, en effet, configurable au niveau du serveur...)
Le problème que tu décris vient de la structure du message http.
Quand le serveur web renvoie des informations au navigateur, il envoie d'abord un "header", qui contient notamment les cookies et d'autres informations sur la page elle-même.
Ensuite, le corps du message http contient le code html de la page.
Le serveur Apache envoit tout ça sans qu'on le lui demande explicitement, en général.
Toutefois, certaines fonctions Php impliquent une modification de ce header. C'est le cas de la mise en place d'un cookie, d'une session (puisqu'elles sont identifiées par un cookie), mais aussi de la fonction headers() qui permet de les modifier explicitement.
Toutefois, dans ta page php, suppose que tu aies, en haut de page, un "<html>" , ou un "echo $truc;".
Que va faire le serveur : il va voir qu'il faut envoyer ces informations au client. Seulement pour les envoyer, il faut commencer par envoyer le header de la réponse !
Donc il génère un header "par défaut", et l'envoie au client avec le début du code html demandé.
Si, ensuite, dans ta page, tu appelles méthode qui demande de modifier les headers, tu obtiens le message d'erreur que tu nous montres : "Warning: session_start(): Cannot send session cookie - headers already sent by... "
Voilà, j'espère que mes explications t'ont permises de comprendre le problème. Evidemment, la solution est donc de faire ton session_start() avant toute autre chose sur ta page, y compris avant le <html> !
Bon courage pour la suite,
Xavier
gollumeries
Messages postés
13
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2009
19 janv. 2007 à 15:34
19 janv. 2007 à 15:34
Merci beaucoup, pb résolu. Pourtant j'avais déjà essayé cette manipulation.
Pour des personnes qui auraient le même pb : ATTENTION : Php ne concède AUCUN ESPACE NI CARACTERE AVANT LE <? session_start() ?>
Merci encore.
Fréd
Pour des personnes qui auraient le même pb : ATTENTION : Php ne concède AUCUN ESPACE NI CARACTERE AVANT LE <? session_start() ?>
Merci encore.
Fréd
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
19 janv. 2007 à 16:04
19 janv. 2007 à 16:04
Tu peux nous donner le code de ta page s'il te plait ?
gollumeries
Messages postés
13
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2009
23 janv. 2007 à 14:48
23 janv. 2007 à 14:48
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<? session_start(); ?>
<html>
<head>
<title>Test Site Ardéchoise</title>
<meta name="GENERATOR" content="Quanta Plus">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body background="image/degard.jpg" bgcolor="white">
<DIV
style="PADDING-BOTTOM: 5px; WIDTH: 100%; LINE-HEIGHT: 1em; PADDING-TOP: 3px; TEXT-ALIGN: center">
<table border="0" align="center"><tr><td width="15%"><IMG SRC="./image/logoard.png"></td><td width="60%"><IMG SRC="./image/lardechoise.png"></td><td width="15%"><IMG SRC="./image/logoard.png"></td></tr></table>
</DIV>
<?
echo '<table border="0" align="center"><tr><td align ="left" width=100%> Vous êtes connecté en tant que : ' .$_SESSION["login"].'</td><td align="right" width=100%><a href = "index.php"> Déconnexion </a></table><br />';
?>
<? session_start(); ?>
<html>
<head>
<title>Test Site Ardéchoise</title>
<meta name="GENERATOR" content="Quanta Plus">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body background="image/degard.jpg" bgcolor="white">
<DIV
style="PADDING-BOTTOM: 5px; WIDTH: 100%; LINE-HEIGHT: 1em; PADDING-TOP: 3px; TEXT-ALIGN: center">
<table border="0" align="center"><tr><td width="15%"><IMG SRC="./image/logoard.png"></td><td width="60%"><IMG SRC="./image/lardechoise.png"></td><td width="15%"><IMG SRC="./image/logoard.png"></td></tr></table>
</DIV>
<?
echo '<table border="0" align="center"><tr><td align ="left" width=100%> Vous êtes connecté en tant que : ' .$_SESSION["login"].'</td><td align="right" width=100%><a href = "index.php"> Déconnexion </a></table><br />';
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
c'est tout bete ton probleme que tu as.
Tu viens de passer sous windows ? Je te conseille alors de mettre "short_open_tag = On" car dans ton code , tu ouvre les balises php de cette manière "<?" (pas génial en +, vaut mieux utiliser "<?php")
tcho
c'est tout bete ton probleme que tu as.
Tu viens de passer sous windows ? Je te conseille alors de mettre "short_open_tag = On" car dans ton code , tu ouvre les balises php de cette manière "<?" (pas génial en +, vaut mieux utiliser "<?php")
tcho
salut,
merci dejà pour votre aide car je suis restée des heures en essayant de comprendre d'où venait le mesage d'erreur, mais là j'ai un autre problème, mon script permet de passer les informations du web vers un format excel, mais quand je l'ouvre avec internet explorer il m'affiche le tableau en html et quand je l'ouvre avec mozilla il m'ouvre un fichier excel avec une taille assez importante mais les cases sont vides.
mon script est le suivant:
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=toto.xls");
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("application") or die(mysql_error());
$result=@mysql_query("select * from Sites ") or die(mysql_error());
while($row=mysql_fetch_array($result)) {
$txt1=$row['Nom_sites'];
$txt2=$row['Nom_siteA'];
$txt3=$row['Nom_siteB'];
$txt4=$row['Configuration'];
$txt5=$row['Securite'];
$txt6=$row['Capacite'];
$txt7=$row['DR'];
$txt8=$row['ZEM'];
$txt9=$row['Diametre_antenne'];
$txt10=$row['Longeur_du_bond'];
$txt11=$row['Reception_par_chef_de_centre'];
$txt12=$row['Date_recep_chef_centre'];
$txt13=$row['Reception_par_division_de_controle'];
$txt14=$row['Date_recep_division_controle'];
$txt15=$row['Annule'];
$txt16=$row['Date_fin_traveaux'];
$txt17=$row['Remis_en_service'];
$txt18=$row['Date_remise_en_service'];
$txt19=$row['Survey'];
$txt20=$row['Statut_installation'];
$txt21=$row['Client'];
}
if (@mysql_numrows($result) ==0)
{ // si elle est vide, on en informe l'utilisateur à l'aide d'un Javascript
print "<script> alert('La requête n\'a pas abouti !')</script>";
}
// construction du tableau HTML
print '<table border=1>
<!-- impression des titres de colonnes -->
<TR><TD>Nom site</TD><TD>Nom site A</TD><TD>Nom site B</TD><TD>Configuration</TD><TD>Sécurité</TD><TD>Capacité</TD>
<TD>DR</TD><TD>ZEM</TD><TD>Diametre antenne</TD><TD>Longeur du bond</TD><TD>Reception par chef de centre</TD>
<TD>Date de récéption</TD><TD>Récéption par division de controle</TD><TD>Date de récéption</TD><TD>Annulé</TD>
<TD>Date fin traveaux</TD><TD>Remis en service</TD><TD>Date de remise</TD><TD>Survey</TD><TD>Statut installation</TD>
<TD>Client</TD></TR>';
// lecture du contenu de la requête avec 2 boucles imbriquées; par ligne et par colonne
for ($ligne=0 ; $ligne<@mysql_numrows($result);$ligne++)
{
for ($colonne = 0;$colonne < 21 ; $colonne++)
{
print '<TD>' .mysql_result($result , $ligne,$colonne). '</TD>';
}
print '</TR>';
}
print '</TABLE>';
mysql_close();
// on informe l'utilisateur de la réussite
if (@mysql_numrows($result) >0)
{
print "<script> alert('La table est bien mise à jour !')</script>";
}
?>
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
</body>
</html>
aidez moi je vous en supplie :(
merci dejà pour votre aide car je suis restée des heures en essayant de comprendre d'où venait le mesage d'erreur, mais là j'ai un autre problème, mon script permet de passer les informations du web vers un format excel, mais quand je l'ouvre avec internet explorer il m'affiche le tableau en html et quand je l'ouvre avec mozilla il m'ouvre un fichier excel avec une taille assez importante mais les cases sont vides.
mon script est le suivant:
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=toto.xls");
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("application") or die(mysql_error());
$result=@mysql_query("select * from Sites ") or die(mysql_error());
while($row=mysql_fetch_array($result)) {
$txt1=$row['Nom_sites'];
$txt2=$row['Nom_siteA'];
$txt3=$row['Nom_siteB'];
$txt4=$row['Configuration'];
$txt5=$row['Securite'];
$txt6=$row['Capacite'];
$txt7=$row['DR'];
$txt8=$row['ZEM'];
$txt9=$row['Diametre_antenne'];
$txt10=$row['Longeur_du_bond'];
$txt11=$row['Reception_par_chef_de_centre'];
$txt12=$row['Date_recep_chef_centre'];
$txt13=$row['Reception_par_division_de_controle'];
$txt14=$row['Date_recep_division_controle'];
$txt15=$row['Annule'];
$txt16=$row['Date_fin_traveaux'];
$txt17=$row['Remis_en_service'];
$txt18=$row['Date_remise_en_service'];
$txt19=$row['Survey'];
$txt20=$row['Statut_installation'];
$txt21=$row['Client'];
}
if (@mysql_numrows($result) ==0)
{ // si elle est vide, on en informe l'utilisateur à l'aide d'un Javascript
print "<script> alert('La requête n\'a pas abouti !')</script>";
}
// construction du tableau HTML
print '<table border=1>
<!-- impression des titres de colonnes -->
<TR><TD>Nom site</TD><TD>Nom site A</TD><TD>Nom site B</TD><TD>Configuration</TD><TD>Sécurité</TD><TD>Capacité</TD>
<TD>DR</TD><TD>ZEM</TD><TD>Diametre antenne</TD><TD>Longeur du bond</TD><TD>Reception par chef de centre</TD>
<TD>Date de récéption</TD><TD>Récéption par division de controle</TD><TD>Date de récéption</TD><TD>Annulé</TD>
<TD>Date fin traveaux</TD><TD>Remis en service</TD><TD>Date de remise</TD><TD>Survey</TD><TD>Statut installation</TD>
<TD>Client</TD></TR>';
// lecture du contenu de la requête avec 2 boucles imbriquées; par ligne et par colonne
for ($ligne=0 ; $ligne<@mysql_numrows($result);$ligne++)
{
for ($colonne = 0;$colonne < 21 ; $colonne++)
{
print '<TD>' .mysql_result($result , $ligne,$colonne). '</TD>';
}
print '</TR>';
}
print '</TABLE>';
mysql_close();
// on informe l'utilisateur de la réussite
if (@mysql_numrows($result) >0)
{
print "<script> alert('La table est bien mise à jour !')</script>";
}
?>
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
</body>
</html>
aidez moi je vous en supplie :(
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
26 avril 2007 à 08:32
26 avril 2007 à 08:32
Bonjour,
Le seul truc que je voie qui ne va pas, c'est ça :
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
</body>
</html>
Tu déclares la structure de ton document html après avoir affiché ta table !
Il faut en mettre le début :
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
avant ton print ('<table...
La fin peut rester ou elle est.
Le seul truc que je voie qui ne va pas, c'est ça :
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
</body>
</html>
Tu déclares la structure de ton document html après avoir affiché ta table !
Il faut en mettre le début :
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
avant ton print ('<table...
La fin peut rester ou elle est.