Pb Php array

[Résolu/Fermé]
Signaler
Messages postés
54
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
18 juillet 2016
-
Messages postés
54
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
18 juillet 2016
-
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

2 réponses

Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
54
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
18 juillet 2016
12
En effet c'était tout bête !

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