[PHP] Mise a jour d un cookie

Mise a jour d un cookie [PHP] - PHP - Programmation

Marsh Posté le 12-10-2002 à 17:16:27    

Je réalise un caddie d un site de commerce electronique, je met mes cookies a jour en début de page, cette meme page devant par la suite recuperer les valeurs du cookies pour mettre a jour le caddie. Je suis confronté au pb suivant:

Citation :

Bien que mettant mes cookies a jour en début de page, la page récupere les anciennes valeurs du cookie, aussi pour avoir accés a mes nouvelles valeurs je dois faire un refresh de ma page... Je pense que j ai du foiré qqch dans ma programmation mais je vois pas quoi :/ ... Qqn a une idée


 
Ci-joint le code en début de page qui met a jour mon cookie
(index.php ligne 1->29)

Code :
  1. <?
  2. if ($recalculer)
  3. {
  4. $i=0;
  5. $arr2 = array();     //Declaration d un tableau
  6. $arr = explode ("&",$caddie); //Recup des produits caddie
  7. foreach ($arr as $k=>$elem)
  8. {
  9.  $i++;
  10.  if ($i%2 == 1)
  11.  {
  12.   $j=($i+1)/2;
  13.   $var="quantite"."$j";
  14.   $var2=${$var};
  15.   if ($var2 > 0)
  16.   {
  17.    array_push($arr2,"$elem" );
  18.    array_push($arr2,"$var2" );
  19.   }
  20.  }
  21.  if ($i%2 == 0)
  22.  {
  23.  }
  24.  ${"c_$k"} = $elem;
  25. }
  26. $val = implode("&",$arr2);
  27. setcookie ("caddie","$val", time()+144000);
  28. }


et le code qui affiche les valeurs du cookie dans cette meme page(index.php ligne ... trés loin)

Code :
  1. if ($caddie)
  2. {
  3.  $valeur=0;
  4.  $fdp=0;
  5.  $poids=0;
  6.  $i=0;
  7.  $arr = explode ("&",$caddie);
  8.  $nbre = sizeof($arr) / 2;
  9.  ?><form method="post" name="commander" action="<? echo $PHP_SELF."?".SID ?>"><?
  10.  foreach ($arr as $k=>$elem)
  11.  {
  12.   $i++;
  13.   if ($i%2 == 1)
  14.   {
  15.    $p = $elem;
  16.   }
  17.   if ($i%2 == 0)
  18.   {
  19.    $prixresult = @mysql_query ("SELECT * FROM produit WHERE num_pro='$p'" );
  20.    $prt = mysql_fetch_array($prixresult);
  21.    //Calcul du total de la cmd
  22.    $valeur+=$elem*$prt[prix];
  23.    //Calcul des fdp de la cmd
  24.    if ($prt[num_livraison])
  25.    {
  26.     $livresult = @mysql_query ("SELECT * FROM livraison WHERE num_livr='$prt[num_livraison]'" );
  27.     $lvr = @mysql_fetch_array($livresult);
  28.     $fdp+=$lvr[prix_livr]*$elem;
  29.    }
  30.    else
  31.    {
  32.     $poids+=$prt[poids]*$elem;
  33.    }
  34.    ?><tr class=produit><td><? print replace($prt[nom_pro]); ?></td><td align="right"><input type=text name="quantite<?print replace($i/2); ?>" style="width:30px" value="<? print replace($elem); ?>" maxlength="3"></td><td align="right"><? print replace($prt[prix]); ?> ?</td><td align="right"><? print replace($prt[prix]*$elem); ?> ?</td></tr><?
  35.   }
  36.   ${"c_$k"} = $elem;
  37.  }
  38.  // Calcul de la livraison poids
  39.  $livresult = @mysql_query ("SELECT * FROM livraison WHERE poidmin<'$poids' AND poidmax>'$poids' ORDER BY prix_livr ASC" );
  40.  $lvr = @mysql_fetch_array($livresult);
  41.  $fdp += $lvr[prix_livr];
  42.  $valeur +=$fdp;
  43. }

Reply

Marsh Posté le 12-10-2002 à 17:16:27   

Reply

Marsh Posté le 16-10-2002 à 17:26:38    

Je n'ai pas trop compris le script que tu as posé mais je vais juste te donner une info!
si tu creer un cookie et que tu l'appelle sur le meme temps de vie que ton script il ne la verras pas car tu lui demande de recuperer un cookie qui n'est meme pas encore envoyer au client donc il faut attendre qu'il le recoive et apres tu pourras lire ça nouvelle valeur!


---------------
Si je suis près de toi c'est soit pour t'embrasser ou te croquer, alors à ce moment là rappelle toi de ce que tu m'as fait. du bien ou du mal?
Reply

Marsh Posté le 16-10-2002 à 17:58:01    

j'ai pas lu tout non plus en détail (pas le temps)... donc, je ne situe pas bien le problème ;)
 
qq conseils :
1. utilises serialize, unserialize au lieu de t'amuser à exploder manuellement (void www.php.net)
2. les cookies pour un caddie c'est pas trop conseillé
3. un exemple d'algo :

Code :
  1. //prendre les valeurs actuelles
  2. $cadie= unserialize($HTTP_COOKIE_VARS['cadie']);
  3. if (is_array($caddie)){
  4.   echo 'quantité de l'article : '. $caddie['nom_article'];
  5. }
  6. //mettre à jour
  7. $caddie['nouvel_article']=2;
  8. setcookie('caddie', serialize($caddie), time()+3600);


---------------
...oups kernel error...
Reply

Marsh Posté le 16-10-2002 à 18:37:34    

je complète la réponse de berceker, après un setcookie, rien de mieux qu'un header(), sinon ça va pas.
 
 
pour un caddie rien de tel que des sessions...


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed