Soucis de récupération de cookies dans une boucle while


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:01

Bonjour,

J'essaye en vint de récupérer une liste de cookies dont les valeurs correspondent à des identifiants enregistrer en bd pour les comparer et afficher un texte différent si présent ou non sur le pc du client.

Voici donc 2 codes différents m'affichant le même résultat :
Code: Tout sélectionner
<?php
//Version 1
if (isset($_COOKIE['moncookie'])) {
   foreach ($_COOKIE['moncookie'] as $nom => $valeur) {
      echo "$nom : $valeur <br/>";
   }
}

//Version 2
if (isset($moncookie)){
   while(list($nom, $valeur) = each($moncookie)) {
      echo "$nom : $valeur<br/>";
   }
}
?>


Ce qui me donne pour les 2 codes :
149 : 149
148 : 148
147 : 147
150 : 150
129 : 129


Ici ma boucle while en version simplifiée ou je compare les valeur des cookies aux identifiants en bd :
Code: Tout sélectionner
<?php
while($teste = mysql_fetch_array($query))
{
   //on affiche les infos
   if($valeur == $teste['id'])
   {
      echo 'Cookie présent<br/>';
   }
   else
   {
      echo 'cookie absent<br/>';
   }
   //on ferme la boucle
}
?>


Mon soucis est que quelle que soit l'intégration que je fais du code "version 1" ou "version 2" au niveau de ma boucle while ... ça merde tout le temps et je ne comprend pas pourquoi :?

Un petit coup de pouce ne serait pas de refus.

Merci


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:07

Tu as vérifié que tu n'avais pas, dans un cas ou dans l'autre, de caractères parasites (genre un espace en trop) qui viendrait biaiser ton test d'égalité ?


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:19

Qu'entend tu par caractères parasites?
Sinon, je ne sais plus sur "quelle pied danser" pour intégrer la boucle des cookies dans mon while..une suggestion ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:21

Bein du genre un espace ou un caractère invisible quelconque.

Si tu fais :

Code: Tout sélectionner
echo $nom." : v."$valeur."v <br/>";


Les deux v sont bien collés à ta chaîne de caractères ?


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:28

Ce ne serait pas plus simple si tu enregistrais les données du cookie avec serialize ?
http://php.net/manual/fr/function.serialize.php
Sauvegarde du cookie: serialize() (sauvegarde de l'array avec les id)
Lecture du cookie: unserialize()


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:43

Non, tout semble correcte, pas d'espace, rien 8O !
Par contre, je viens de me rendre compte que si je supprimais le "else" dans la version suivante, je n'avais plus de bugs mais je n'ai pas mon autre autre message "cookie absent". A l'origine, les messages sont en réalités des images (2 étoiles de différentes couleurs). Si cookies présent->étoile rouge, si absent->étoile verte d'ou le besoin du "else".
Code: Tout sélectionner
   
<?php
while($teste = mysql_fetch_array($query))
{
//Version 1
if (isset($_COOKIE['moncookie'])) {
   foreach ($_COOKIE['moncookie'] as $nom => $valeur) {
   if($valeur == $teste['id'])
   {
      echo 'Cookie présent<br/>';
   }
   }
}
}
?>


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:45

@spout: je ne connaissais pas cette méthode et j'ai dailleurs du mal à comprendre comment ça fonctionne.


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 14:51

http://fr.wikipedia.org/wiki/S%C3%A9rialisation
En bref, ça transforme des variables en une chaine de caractères, pour pouvoir les sauvegarder facilement (base de données ou cookies)

Un exemple tout simple: http://codepad.org/JdyayahZ


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 15:09

J'ai vraiment du mal :(

J'ai repris l'exemple :
Code: Tout sélectionner
echo '<pre>';
print_r($_COOKIE['moncookie']);
echo '</pre>';
$ids = serialize($_COOKIE['moncookie']);
echo $ids.'<br />';

$ids = unserialize($ids);
echo '<pre>';
print_r($ids);
echo '</pre>';

Qui me donne :
Array
(
[149] => 149
[148] => 148
[147] => 147
[150] => 150
[129] => 129
)

a:5:{i:149;s:3:"149";i:148;s:3:"148";i:147;s:3:"147";i:150;s:3:"150";i:129;s:3:"129";}

Array
(
[149] => 149
[148] => 148
[147] => 147
[150] => 150
[129] => 129
)

..mais je ne pige toujours pas comment comparer mes id avec les valeurs du tableau :?:


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 15:14

Tu n'es pas obligé de parcourir tes deux tableaux. Tu peux en parcourir un et vérifier, à chaque tour, si une valeur équivalente existe dans l'autre array avec in_array().


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 15:36

hargggggggggg :evil: quelque soit la façon que j'utilise et à partir du moment ou je retourne un "else", ça me fou la merde.
Pour faire simple, que ce soit mes 2 codes ou avec serialize, si quelque part dans mon code je fais:
Code: Tout sélectionner
if($id_en_bd==$valeur_du_tableau){
echo 'oui';
}
else{
echo'non';
}

Je me retrouve avec une succession de :"ouinonnonnonnonnon" par id.
Si je supprime le "else", mes "oui" correspondent bien aux cookies enregistrés mais j'ai également besoin du "else".

PHP m'énerve toujours autant :mrgreen: !


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 15:51

Rmplace ton test sur l'égalité par un test avec un in_array() :

Code: Tout sélectionner
if(in_array($id_en_bd,$tableau_complet)){
echo 'oui';
}


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 16:42

Avec votre aide (merci ;)), je suis enfin parvenu à un truc "viable" :D ..du moins je pense :
Code: Tout sélectionner
<?php
while($teste = mysql_fetch_array($query))
{
if(isset($_COOKIE['moncookie']) AND in_array($teste[id_en_bd],$_COOKIE['moncookie'])){
echo 'cookie oui';
}
else {
echo 'cookie non';
}
}
?>

A vous de me dire si ça vous semble correcte.

Sinon et dans mes testes, "cookie oui" et "cookie non" sont de petites étoiles cliquables permettant de "sauvegarder" temporairement (par le biais des cookies) des annonces. En fonction de la présence des cookies ou pas sur le pc du client, l'étoile change de couleur. L'inconvénient, est qu'il faut recharger la page pour que le ou les cookies soient pris en considérations. Existe t'il un autre moyen sans recharger la page ?

Merci


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 16:45

Oui en passant par de l'Ajax.


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis de récupération de cookies dans une boucle while

Message le Mer Jan 05, 2011 16:59

ARGGGG ... ajax ... je n'ai vraiment pas de bol ^^

Soucis de récupération de cookies dans une boucle while

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: enams90 et 0 invités