Discussion:
pb avec array_push et les sessions
(trop ancien pour répondre)
clementinebis
2011-03-20 21:30:11 UTC
Permalink
Bonjour,

J'ai un souci avec mon script.

Je possède un panier. Je souhaite récupérer via un formulaire le produit et la
quantité demandée de ce produit.

Exemple :
Si pour le produit Voiture1 le client saisie comme quantité "1" puis valide je
souhaite avoir dans mon tableau [panier][Voiture1]=>1.

Si ce client saisie tout de suite après 2 quantités de cette même voiture puis
valide je souhaite que cette quantité s'ajoute à la précédente. Donc je devrais
avoir [panier][Voiture1]=>3.

Problème
1. Je créé mon tableau
$_SESSION['panier'][$_POST['nom_produit']]= array() ;

2. Pour ajouter la quantité je souhaite utiliser array_push :
array_push($_SESSION['panier'][$_POST['nom_produit']], $_POST['qte']);
=> Ca ne fonctionne pas, voici le message d'erreur :
Warning: array_push() expects parameter 1 to be array, string given in (chemin
C:/....)


Lorsque je le fait de la façon suivante cela fonctionne :
$_SESSION['panier'][$_POST['nom_produit']]= $_POST['qte'];

Le problème c'est que ma nouvelle valeur va remplacé l'ancienne au lieu de
s'ajouter, d'où le fait que je souhaite utiliser array_push.


Quelqu'un saurait-il comment faire ?
Merci d'avance
Mickael Wolff
2011-03-21 10:20:06 UTC
Permalink
Post by clementinebis
Quelqu'un saurait-il comment faire ?
Merci d'avance
Peux-tu fournir un code complet, qui s'exécute et reproduit le problème ?
Olivier Miakinen
2011-03-21 18:45:01 UTC
Permalink
Bonjour,
Post by clementinebis
J'ai un souci avec mon script.
Je possède un panier. Je souhaite récupérer via un formulaire le produit et la
quantité demandée de ce produit.
Si pour le produit Voiture1 le client saisie comme quantité "1" puis valide je
souhaite avoir dans mon tableau [panier][Voiture1]=>1.
Si ce client saisie tout de suite après 2 quantités de cette même voiture puis
valide je souhaite que cette quantité s'ajoute à la précédente. Donc je devrais
avoir [panier][Voiture1]=>3.
Ok.
Post by clementinebis
Problème
1. Je créé mon tableau
$_SESSION['panier'][$_POST['nom_produit']]= array() ;
Juste une question : as-tu vérifié avant d'utiliser le contenu de
$_POST['nom_produit'] que c'était l'un des noms de produits que tu
as prévus ? Ce n'est pas pour répondre à ta question que je demande
ça, mais juste parce que, souvent, on passe d'une variable « issue
de l'extérieur » à une variable interne au moment de la vérification
des valeurs permises ; il n'y a rien d'obligatoire, mais ça me semble
plus facile pour s'assurer qu'on n'a oublié aucune vérification.

Par ailleurs, c'est peut-être $_SESSION['panier'] qu'il faudrait
initialiser à un tableau avant toute autre chose ?
Post by clementinebis
array_push($_SESSION['panier'][$_POST['nom_produit']], $_POST['qte']);
Warning: array_push() expects parameter 1 to be array, string given in (chemin
C:/....)
C'est bizarre si $_SESSION['panier'][$_POST['nom_produit']] est bien un
tableau. Peut-être que la sérialisation + désérialisation d'un tableau
vide ne fonctionne pas -- à supposer que l'initialisation soit faite
dans un script précédent ?

Note quand même ce qu'il est dit dans la doc :
<cit. http://fr2.php.net/array_push>
Note: array_push() émettra une alerte si le premier argument n'est pas
un tableau. Ceci diffère du comportement de $var[] où un nouveau tableau
est créé.
</cit.>

Du coup, la solution est peut-être tout simplement :
$_SESSION['panier'][$_POST['nom_produit']][] = $_POST['qte'];

... mais voir plus loin.
Post by clementinebis
$_SESSION['panier'][$_POST['nom_produit']]= $_POST['qte'];
Oui. Et l'initialisation que tu faisais au départ, qui ne correspondait
pas à ce que tu semblais vouloir (initialisation à un tableau et non à
un entier), ne sert à rien.
Post by clementinebis
Le problème c'est que ma nouvelle valeur va remplacé l'ancienne au lieu de
s'ajouter, d'où le fait que je souhaite utiliser array_push.
Pour moi, ajouter des entiers se fait avec « + » plutôt qu'avec
« array_push ». ;-)
Post by clementinebis
Quelqu'un saurait-il comment faire ?
Je te suggère la chose suivante.

1. Initialisation
$_SESSION['panier'][$_POST['nom_produit']] = 0;

2. Ajout d'une quantité
$_SESSION['panier'][$_POST['nom_produit']] += $_POST['qte'];


Cordialement,
--
Olivier Miakinen
Pascal Poncet
2011-03-21 19:40:54 UTC
Permalink
Post by clementinebis
Bonjour,
Bonsoir,
Post by clementinebis
Si ce client saisie tout de suite après 2 quantités de cette même voiture puis
valide je souhaite que cette quantité s'ajoute à la précédente. Donc je devrais
avoir [panier][Voiture1]=>3.
Question bête, si je peux me permettre, avant d'aller plus loin :

Il me semble que le classique de la gestion de panier consiste à
représenter le panier courant avec les quantités déjà choisies,
assorties de la possibilité de les changer directement, plutôt que d'en
ajouter ou en retrancher par ailleurs.

Pourquoi devoir faire autrement, et donc plus compliqué ?
--
Cordialement,
Pascal
Continuer la lecture sur narkive:
Loading...