Pb Php array

Résolu/Fermé
nab13 Messages postés 54 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 18 juillet 2016 - 15 sept. 2008 à 16:06
nab13 Messages postés 54 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 18 juillet 2016 - 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
A voir également:

2 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 sept. 2008 à 16:24
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']);

}

3
nab13 Messages postés 54 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 18 juillet 2016 12
15 sept. 2008 à 16:56
En effet c'était tout bête !

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