8721 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai créé un script pour le comptage des visites (via les cookies), et j'ai un problème... j'ai beau rafraîchir ma page maintes fois, la valeur reste à 1.
Pourtant on est dans la première partie de la condition, mon cookie est bien identifié comme existant sur mon ordinateur, suivant le message que je reçois : "Cookie existant (true) : Vous êtes venu 1 fois."

Je ne comprends pas mon erreur.
Pouvez vous m'aider?

<?php
if (isset($_COOKIE['nbVisites'])) {
    $nbVisites = intval($_COOKIE['nbVisites']);
    $nbVisites++;
    $valeurCookie2 = 'Vous êtes venu ' . $nbVisites . ' fois.';
    echo 'Cookie existant (true) : '.$valeurCookie2;
} else {
    $nbVisites = 1;
    $valeurCookie2 = 'Vous êtes venu ' . $nbVisites . ' fois.';
    echo 'Cookie inexistant (false) :'.$valeurCookie2;
    setcookie('nbVisites', $valeurCookie2);
}
?>


J'ai tenté de comprendre mon erreur en prenant connaissance de ce sujet-ci, mais je ne suis pas sûre que les problèmes rencontrés soient à 100% similaires.

Merci.
Modifié par Reka (15 Nov 2013 - 23:32)
J'ai essayé de débugger encore un peu :

<?php
if (isset($_COOKIE['nbVisites'])) {
    
    $nbVisites = intval($_COOKIE['nbVisites']);
[b]    echo 'Avant incrémentation : '.$nbVisites.'<br>';[/b]
    $nbVisites++;
[b]    echo 'Après incrémentation : '.$nbVisites.'<br>';[/b]
    $valeurCookie2 = 'Vous êtes venu ' . $nbVisites . ' fois.';
    echo 'Cas cookie existant (true) : '.$valeurCookie2;
    
} else {
    
    $nbVisites = 1;
    $valeurCookie2 = 'Vous êtes venu ' . $nbVisites . ' fois.';
    echo 'Cas cookie inexistant (false) :'.$valeurCookie2;
    setcookie('nbVisites', $valeurCookie2);
    
}
?


Donne lorsque le code est interprété :

Avant incrémentation : 0
Après incrémentation : 1
Cas cookie existant (true) : Vous êtes venu 1 fois.


Mais pourquoi la valeur du cookie est-elle réinitialisée à 0?! Smiley sweatdrop
Modérateur
bonsoir.

La première fois le cookie est initialisé avec la valeur $valeurCookie2 qui vaut 'Vous êtes venu 1 fois.'
Ensuite intval( 'Vous êtes venu 1 fois.') donne bien 0.
Il aurait fallu mettre setcookie('nbVisites', $nbVisites) plutôt…
Ha mais bien sûr ! ...
Mille mercis !

Edit :
Oui mais, non...
Quelque chose continue de m'échapper :
pourquoi il me remet mon truc à 0

Si je prends ce code :
$test='2 voitures';
$int=intval($test);
echo $int; 


Il me ressort bien 2.
Alors, pourquoi ma valeur revient-elle à zéro, il y a quelque chose qui m'échappe...
Modifié par Reka (16 Nov 2013 - 22:23)
Modérateur
C'est dû à la manière dont php convertit les chaînes en nombre:

php a écrit :
Si la chaîne de caractères commence par une donnée numérique valide, ce sera la valeur utilisée. Sinon, la valeur sera de 0 (zéro).


En gros il prend les premier caractères de la chaîne tant que ça correspond à un nombre, dès qu'il trouve autre chose il arrête et si il ne trouve rien de valide dès le début le résultat vaudra 0.
Pour le détail c'est par ici: http://www.php.net/manual/fr/language.types.string.php#language.types.string.conversion

donc:


print intval('2 voitures'); // résultat 2
print intval('Vous êtes venu 1 fois.'); // résultat 0 car la chaîne commence par V et qu'il ne peut rien en faire.

Merci beaucoup, kustolovic.
J'avais retenu que PHP reprenait l'unique chiffre de la chaine, où qu'il soit et je découvre que je me suis trompée (à moins qu'il y ait une fonction qui permette d'accomplir pareille prouesse?).

La pièce vient donc de tomber pour de bon, cette fois...
Encore merci à toi, et à bzh pour avoir aussi participé à la résolution de mon problème.

Bonne nuit ! Smiley smile