Problème de cookie

WRInaute impliqué
Salut tout le monde, je galère depuis un moment avec ces histoires de cookie:

$sql0="SELECT url FROM annuaire WHERE id='$id'";
$res0=mysql_query($sql0, $db);
if ($_COOKIE["clic_out"]!=$id)
{
$name = "clic_out[".$id."]";
setcookie($name, 1, time()+3600*24);
$sql1="SELECT clics_sortants FROM annuaire WHERE id='$id'";
$res1=mysql_query($sql1, $db);
while ($ligne = mysql_fetch_object ($res1))
{
$clics_sortants = $ligne->clics_sortants;
}
$clics_sortants = $clics_sortants + 1;
$sql2="UPDATE annuaire SET clics_sortants='$clics_sortants' where id='$id'";
$res2=mysql_query($sql2, $db);
}
while ($ligne1 = mysql_fetch_object ($res0))
{
echo "<script language='JavaScript'> document.location.replace('$ligne1->url'); </script>";
}

Le compteur en cause ne devrait s'incrementer que si le cookie n'existe pas or non seulement il s'incremente à chaque clic mais en plus le cookie ne se crée pas: Warning: Cannot modify header information - headers already sent by (output started at /home/capsizun/www/stats_clics.php:2) in /home/capsizun/www/stats_clics.php on line 12

Loïc.
 
WRInaute occasionnel
cleden a dit:
Le compteur en cause ne devrait s'incrementer que si le cookie n'existe pas or non seulement il s'incremente à chaque clic mais en plus le cookie ne se crée pas: Warning: Cannot modify header information - headers already sent by (output started at /home/capsizun/www/stats_clics.php:2) in /home/capsizun/www/stats_clics.php on line 12

Salut,

Les cookies sont envoyés dans le header HTTP. Il faut donc que ton instruction setcookie() ( au même titre que header() ) soient executée avant que tu n'affiches du texte ( du code HTML )

Souvent, il arrive que texte affiché qui génère l'erreur soit juste un espace/ retour chariot avant <?php
Si par contre le texte envoyé est le début de ta page HTML tu peux regarder du coté des Output Control Functions pour bufferiser ce texte avant l'envoie du header HTTP.

Mirgolth
 
WRInaute discret
j'ajouterais : dans la mesure où tu mets :

while ($ligne1 = mysql_fetch_object ($res0))
{
echo "<script language='JavaScript'> document.location.replace('$ligne1->url'); </script>";
}
ca veut dire que tu as déjà envoyé du code (au moins <html> <head>, etc...)
et donc ton cookie ne peut etre envoyé, comme explicité sus-ditement.
 
WRInaute impliqué
Ok, merci je vais essayer de voir ça... mais je ne vois pas trop comment resoudre le problème.
 
Discussions similaires
Haut