Créer une variable de session si elle n'existe pas

Créer une variable de session si elle n'existe pas - PHP - Programmation

Marsh Posté le 07-05-2011 à 22:28:24    

Bonsoir,
 
J'ai un petit soucis sur lequel je planche depuis des heures sans en trouver la solution !
 
Pour un système de panier j'ai besoin de (pré)stocker en session les frais de port de chaque produit.
 
Pour être concret, je souhaite faire la chose suivante:
 
Ma variable $_SESSION['ship'] doit retourner un array() avec id du produit en KEY et le montant des frais de port en VALUE.
 
Si $_SESSION['ship'][id du produit] n'existe pas == on crée cette variable
Si $_SESSION['ship'][id du produit] existe == rien à faire
 
Voici mon code actuel qui fonctionne à qui me retourne une erreur  
 

Code :
  1. for ($i=0, $n=sizeof($products); $i<$n; $i++) {
  2. $id = $products[$i]['id'];
  3. $shippingCost = getShippingCost($id); // calcul le montant des frais de port du produit
  4.         $shippingMethods = getShippingMethods($id); // récupère les modes de livraison valables pour ce produit
  5. $methods = explode(";", $shippingMethods); // retourne "spu" pour Sur Place et "flat" pour Colissimo  
  6. if( $_SESSION['ship'] && (!in_array($id, array_keys($_SESSION['ship'])))  ) { // je pense que l'erreur vient d'ici !?
  7.  if( (in_array('flat', $methods)) && (in_array('spu', $methods)) ) {
  8.   $_SESSION['ship'][$id] = $shippingCost;
  9.  } elseif( (!in_array('flat', $methods)) && (in_array('spu', $methods)) )  {
  10.   $_SESSION['ship'][$id] = 0;
  11.  } elseif( (in_array('flat', $methods)) && (!in_array('spu', $methods)) )  {
  12.   $_SESSION['ship'][$id] = $shippingCost;
  13.  } else {          
  14.   $_SESSION['ship'][$id] = 0;
  15.  }
  16. }


 
Merci par avance !

Reply

Marsh Posté le 07-05-2011 à 22:28:24   

Reply

Marsh Posté le 08-05-2011 à 00:15:44    

Salut,
 
if($variable) ne teste pas si la propriété existe, mais simplement si sa valeur est équivalente à false ou non.
 
Pour vérifier si une propriété existe, c'est isset($variable) (renvoi true ou false).

Reply

Marsh Posté le 09-05-2011 à 17:45:39    

Effectivement !
 
Merci beaucoup !

Reply

Sujets relatifs:

Leave a Replay

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