Version complète: sur le forum Webmaster Hub : Supprimer session caddie si caddie vide ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
dldstyle
Salut à tous les pro PHP,

je me tourne vers vous pour m'aider à résoudre mon problème de caddie. J'ai réussi à supprimer les produits de mon caddie par contre il y a un bug quand celui ci est vide. Je ne peux plus en ajouter !

Je voudrai vérifier que le panier soit vide, qu'il n'y ait aucun produit avant de le supprimer avec un unset($_SESSION['panier']).

Mon code :
CITATION
<?php
elseif (($_GET['action'] == "del")) // on supprime le produit
{
foreach(
$_SESSION['panier'] as $key => $array)
{
if (
$array['prod'] == $_GET['id'])
{
unset(
$_SESSION['panier'][$key]);
}
}
if (!isset(
$_SESSION['panier']))
{
echo
"<p>IL EST VIDE CE PANIER B***** donc je peux faire session_unset() et session_destroy() </p>";
}
else
{
echo
"<p>Normalement il n'est pas vide</p>";
}
}

?>


Vous avez une idée please ??!! blush.gif
manmachine
Ton problème vient tu fait que tu fais des unset sur les clés du tableau

CODE
unset($_SESSION['panier'][$key]);



donc ta variable $_SESSION['panier'] est elle toujours présente .

donc lorsque tu teste sa présence
CODE
if (!isset($_SESSION['panier'])) {
  echo "<p>IL EST VIDE CE PANIER B***** donc je peux faire session_unset() et session_destroy() </p>";
} else {
  echo "<p>Normalement il n'est pas vide</p>";
}


ta variable existe bien il te répond s donc " Normalement il n'est pas vide " alors qu'il l'est peut etre .

tu dois donc tester si il sagit d'un tableau et la taille de delui ci.

CODE
if ( is_array($_SESSION['panier']) && sizeof($_SESSION['panier']) > 0  ) {
  echo "<p>Normalement il n'est pas vide</p>";  
} else {
  echo "<p>IL EST VIDE CE PANIER B***** donc je peux faire session_unset() et session_destroy() </p>";
}
captain_torche
On pourrait aussi tester avec un empty($_SESSION['panier']), qui nous ressortirait true s'il ne contient plus d'élément.
manmachine
Oui le empty peut faire l'affaire mais vu que dldstyle ne nous présente qu'un petit bout de code je ne sais pas exactement comment il traite cette variable donc je sécurise le test au mieux .


il faudrait avoir plus d'infos sur le code de dldstyle pour déterminé si un empty suffit
dldstyle
Salut à vous,

je n'ai pas encore pris le temps de tester vos solutions, étant sur un autre travail charrette smile.gif

Je vous livre mon code :

CITATION
<?php
if(isset($_GET['action']) && isset($_GET['id']))
      {
      
$panieractif=1;
      if(isset(
$_SESSION['panier']) && is_array($panier)) // le panier existe déjà
            
{
            
$nbprod = count($panier);
            if (
$_GET['action'] == "add") // on ajoute le produit
                  
{
                  
$break=0; // permet de squizzer la boucle ajout d'une quantité / ligne si +ieurs produits dans le panier
                  
foreach($_SESSION['panier'] as $key => $array)
                        {
                        if (
$array['prod'] == $_GET['id'])
                              {
                              
$newQte = ($_GET['qte'] + $array['qte']);
                              
$_SESSION['panier'][$key]['qte'] = $newQte;
                              
$ajout = 0;
                              
$break=1;
                              }
                           elseif (
$break==0)// n'existait pas, on le rajoute
                              
{
                              
$ajout = 1;
                              }
                        }
                  if (
$ajout == 1)
                        {
                        
array_push($panier,array("prod" => $_GET['id'],"qte" => $_GET['qte']));
                        }
                  }
            elseif ((
$_GET['action'] == "del")) // on supprime le produit
                  
{
                  foreach(
$_SESSION['panier'] as $key => $array)
                        {
                        if (
$array['prod'] == $_GET['id'])
                              {
                              unset(
$_SESSION['panier'][$key]);
                              }
                        }      
                  if (!isset(
$_SESSION['panier']))
                        {
                        echo
"<p>IL EST VIDE CE PANIER B***** donc je peux faire session_unset()  et session_destroy() </p>";
                        }
                  else
                        {
                        echo
"<p>Normalement il n'est pas vide</p>";      
                        }            
                  }
                        
// fin ajout de code
            
elseif ($_GET['action'] == "mod") // on modifie la quantité
                  
{
                  
$refsup = $_GET['refsup'];
                  foreach(
$_GET['refsup'] as $key => $keysup)
                        {
                        
// je ne sais pas encore comment faire
                        
}
                  }
            else
// couille dans le potage
                  
{
                  
$message = "Une erreur s'est produite, merci de renouveller votre action.";
                  }
            }
      else
// le panier n'existe pas
            
{
            
$_SESSION['panier'][] = array("prod" => $_GET['id'],"qte" => $_GET['qte']);
            }
      }
?>


Merci par avance, vous m'enlèveriez une grosse épine du pied a_thumbsup_20.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.