Page 1 sur 1

question de cookie

Posté : 30 déc. 2010, 12:41
par tintin
Bonjour à tous (et à toutes ...)

Débutant en php, je veux incrémenter le compteur de visites compteur.txt si le cookie TOTO n'existe pas.
Mon code php est le suivant :
<?php
echo 'Le cookie vaut '.$_COOKIE['TOTO'];
if (!isset($_COOKIE[" TOTO"]))
	{
	echo '..';
	setcookie("TOTO","OK",time()+600); // Cookie inexistant donc création
	$fp = fopen("compteur.txt","r+");
	$visiteurs=fgets($fp,10);
	$visiteurs++;
	fseek($fp,0);
	fputs($fp,$visiteurs);
	fclose($fp);
	
	}
else
	{echo '.....';
	}
?>
J'ai une erreur car le message 'le cookie vaut Ok ..' s'affiche ce qui semble pour moi incompatible. En effet, la valeur Ok du cookie TOTO s'affiche suivie des 2 points ce qui veut dire que le cookie TOTO n'existe pas.
Pourriez-vous éclairer ma lanterne ?
Merci d'avance

Re: question de cookie

Posté : 30 déc. 2010, 12:44
par CMBP_Xavier
Bonjour,

le test est fait sur le cookie " TOTO" (espaceTOTO), qui n'existe pas (et n'existera jamais).

je pense que c'est l'origine du problème.

Bien cordialement,

Xavier

Re: question de cookie

Posté : 30 déc. 2010, 12:48
par telnes
hello

ne met pas de echo/print ... avant l'utilisation de cookie.
<?php

if (!isset($_COOKIE["TOTO"])) //cmbp
        {
        setcookie("TOTO","OK",time()+600); // Cookie inexistant donc création
        $fp = fopen("compteur.txt","r+");
        $visiteurs=fgets($fp,10);
        $visiteurs++;
        fseek($fp,0);
        fputs($fp,$visiteurs);
        fclose($fp);
        
        }
else
        {echo '.....';
        }
echo 'Le cookie vaut '.$_COOKIE['TOTO'];
?>
ca donne quoi ?

++

Re: question de cookie

Posté : 30 déc. 2010, 13:04
par tintin
Quand je disais que j'étais débutant ... quelle erreur!
Merci Xavier, ça marche effectivement mieux ainsi ;-)
Tintin

Re: question de cookie

Posté : 30 déc. 2010, 13:25
par CMBP_Xavier
Avec plaisir.

Ceci dit, la remarque de Telnes est correcte sur le fond : de façon générale il faut éviter d'envoyer des données à l'affichage (echo etc.) avant de faire un setcookie (ce sera idem pour les sessions et les redirections, qui manipulent également les entêtes de réponse http).

Dans ce cas précis, cela ne produisait pas d'erreur (qui aurait été du genre "cannot modify header information..."), car le serveur est probablement règlé en output_buffering = on (en gros, la page est envoyée d'un coup, après exécution du script), ce qui évite ce problème.

On peut aussi utiliser ob_start pour le même résultat (et rester indépendant du règlage serveur).

Bien cordialement,

Xavier