Menu

Pb Php array [Résolu/Fermé]

nab13 54 Messages postés dimanche 23 mars 2008Date d'inscription 18 juillet 2016 Dernière intervention - 15 sept. 2008 à 16:06 - Dernière réponse : nab13 54 Messages postés dimanche 23 mars 2008Date d'inscription 18 juillet 2016 Dernière intervention
- 15 sept. 2008 à 16:56
Bonjour à tous;

Je suis en train d'essayer de construire un panier virtuel qui est presque fini mais le pb est que je n'arrive pas à stocker plus de 5 articles dedans...
Je récupère les infos des articles via un formulaire dans une autre page et je les stocke dans une variable de session.
Voici le code :

<?
SESSION_start() ;
/* je recupere les données*/
$a=trim($_POST["prix"]);
$b=trim($_POST["qte"]);
$select = array();
$select["ref"]=$_POST["ref"];
$select["des"]=$_POST["des"];
$select["prix"]=$_POST["prix"];
$select["qte"]=$_POST["qte"];
$select["total"]=$a*$b;

/* Si la variable de session qui sert à stocker les articles n'est pas crée*/

if (!isset($_SESSION["panier"]))
{
$_SESSION["panier"] = array();

$_SESSION["panier"]["reference"] = array();
$_SESSION["panier"]["description"] = array();
$_SESSION["panier"]["prix"] = array();
$_SESSION["panier"]["qte"] = array();
$_SESSION["panier"]["total"] = array();

array_push($_SESSION["panier"]["reference"],$select["ref"]);
array_push($_SESSION["panier"]["description"],$select["des"]);
array_push($_SESSION["panier"]["prix"],$select["prix"]);
array_push($_SESSION["panier"]["qte"],$select["qte"]);
array_push($_SESSION["panier"]["total"],$select["total"]);
header ("location:mapage.php");
}
/* sinon je rajoute les données à la fin du tableau*/
else
{
array_push($_SESSION["panier"]["reference"],$select["ref"]);
array_push($_SESSION["panier"]["description"],$select["des"]);
array_push($_SESSION["panier"]["prix"],$select["prix"]);
array_push($_SESSION["panier"]["qte"],$select["qte"]);
array_push($_SESSION["panier"]["total"],$select["total"]);


header ("mapage.php");
}
?>


Pour afficher toutes les données du panier j'ai fais ce script (c'est juste pour tester je sais que c'est pas beau)

<?
SESSION_start() ;

if (isset($_SESSION["panier"]))
{
$result = sizeof($_SESSION["panier"]);
For ($i=0;$i < $result;$i++)
{
echo $_SESSION["panier"]["reference"] [$i];
echo "<br /> <br/>";
echo $_SESSION["panier"]["description"] [$i];
echo "<br /> <br/>";
echo $_SESSION["panier"]["prix"] [$i];
echo "<br /> <br/>";
echo $_SESSION["panier"]["qte"] [$i];
echo "<br /> <br/>";
echo $_SESSION["panier"]["total"] [$i];
echo "<br /> <br/>";
echo "<br /> <br/>";
}
}

else
{
header("location:mapage.php");
}


En résumé en cliquant sur ajouter au panier, les 5 premiers éléments s'ajoutent mais pas le reste.
Voila si quelqu'un avait une idée cela serait formidable
Merci d'avance
Afficher la suite 

2 réponses

kij_82 4100 Messages postés jeudi 7 avril 2005Date d'inscriptionContributeurStatut 2 septembre 2013 Dernière intervention - 15 sept. 2008 à 16:24
+3
Utile
Bonjour,

Ton résultat est due à une petite erreur (d'inattention généralement), regarde bien l'entier que tu récupère ici :

$result = sizeof($_SESSION["panier"]); 


A quoi correspond-t-il ? -> à la taille de ta variable "panier" qui est en fait un tableau avec 5 éléments (reference, description, prix, qte et total)

Si tu souhaites récupérer le nombre d'éléments stockés, il faut faire :

$result = sizeof($_SESSION["panier"]["reference"]); 


Sinon, plutot que de stocker 5 tableaux contenant les informations pour chaque article, pourquoi ne fais-tu pas plutôt une liste des articles tout simplement (liste de tableau), représentée de la manière suivante :

 $_SESSION["panier"] = {
    reference => article { reference, description, prix, qte et total },
    reference => article { reference, description, prix, qte et total },
    ... etc ...
 }


Un stockage de cette façon te permettra de compter le nombre d'élément stocké bien plus facilement, mais aussi de controle si un élément n'a pas déjà été ajouté au panier et de supprimer un élément en ayant sa référence.

Ton code pour ajouter un article à ton panier serait le suivant :
if ( !empty($_SESSION['panier']) ){
   if( ! in_array($select["ref"], $_SESSION['panier'] ) )
	$_SESSION['panier'][$select["ref"]] = $select;
}
else{
	$_SESSION['panier'][$select["ref"]] = $select;
}


Et le code pour supprimer un article via la référence :
if ( !empty($_SESSION['panier']) ){

	unset($_SESSION['panier'][$select["ref"]]);
	// --- re-index session array
	array_values($_SESSION['panier']);

}

Cette réponse vous a-t-elle aidé ?  
nab13 54 Messages postés dimanche 23 mars 2008Date d'inscription 18 juillet 2016 Dernière intervention - 15 sept. 2008 à 16:56
+1
Utile
En effet c'était tout bête !

Merci beaucoup pour ton aide et ta rapidité..célérité même !