question de cookie

tintin
Invité n'ayant pas de compte PHPfrance

30 déc. 2010, 12:41

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

Petit nouveau ! | 7 Messages

30 déc. 2010, 12:44

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

Eléphant du PHP | 422 Messages

30 déc. 2010, 12:48

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 ?

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

tintin
Invité n'ayant pas de compte PHPfrance

30 déc. 2010, 13:04

Quand je disais que j'étais débutant ... quelle erreur!
Merci Xavier, ça marche effectivement mieux ainsi ;-)
Tintin

Petit nouveau ! | 7 Messages

30 déc. 2010, 13:25

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