Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb avec array_push et les sessions

3 réponses
Avatar
clementinebis
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

3 réponses

Avatar
Mickael Wolff
On 20/03/11 21:30, clementinebis wrote:

Quelqu'un saurait-il comment faire ?
Merci d'avance


Peux-tu fournir un code complet, qui s'exécute et reproduit le problème ?
Avatar
Olivier Miakinen
Bonjour,

Le 20/03/2011 22:30, clementinebis a écrit :

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.



Ok.

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 ?

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:/....)



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.

Lorsque je le fait de la façon suivante cela fonctionne :
$_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.

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 ». ;-)

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
Avatar
Pascal Poncet
Le 20/03/2011 22:30, clementinebis a écrit :
Bonjour,



Bonsoir,

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