Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2007, 21h31   #1
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 86
Points : 17
Points : 17
Par défaut Sessions à plusieurs niveaux pour un caddie

J'avoue que les tableaux /sessions ne sont pas mon fort mais j'ai développé un caddie qui fonctionne bien en utilisant une session qui concatène tous les paramètres dont j'ai besoin : id_produit, id_option (éventuelle, pour un produit donné), id_ref (pour une option donnée), quantité...
Mais je voudrais reprogrammer de manière plus "propre" en utilisant les sessions
comme pour
http://jcrozier.developpez.com/articles/web/panier/

Mis dans mon cas un produit peut (ou pas) avoir une (ou plusieurs) options avec une (ou plusieurs) références. exemple : un casque de moto (produit) peut être de plusieurs couleurs(option) rouge, vert...(les références) pour un même prix.

donc mon caddie nécessite un id_produit, un id_option et un id_reference; ces 2 derniers je pense étant dépendant d'un type de produit. Donc j'en suis arrivé à créer ma structure de panier comme suit :

Code :
1
2
3
$_SESSION['panier']['produit'] = $id_prod;
$_SESSION['panier']['produit']['option'] = $id_option;
$_SESSION['panier']['produit']['reference'] = $id_ref;
Le souci que j'ai c'est que je ne maitrise pas suffisamment les tableaux pour par exmple vérifier que un élément du caddie (produit, option, ref) donné est déjà enregistré par exemple.
Si je fais un test du type
Code :
1
2
3
4
if (array_search($id_article,$_SESSION['panier']['produit']) !== false) &&
array_search($id_option,$_SESSION['panier']['produit']['option']) !== false) &&
array_search($id_ref,$_SESSION['panier']['produit']['reference']) !== false))
 echo "déjà enregistré";
Ne fonctionne pas, car je fais les test "séparément". mon introduction était longue mais ma question est : comment faire dans un tel cas pour savoir si un produit AVEC une option ET une référence donnée est déjà enregistré.

Merci d'avance.
beyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 00h38   #2
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Je pense que dans ton système, tes sessions ne peuvent contenir qu'un seul produit au maximum.
Car avec :

Code :
1
2
3
$_SESSION['panier']['produit'] = $id_prod;
$_SESSION['panier']['produit']['option'] = $id_option;
$_SESSION['panier']['produit']['reference'] = $id_ref;
Tu n'auras toujours qu'un $_SESSION['panier']['produit'] possible.

Donc à mon avis déjà, il ya un problème à ce niveau, tu devrais plutot utiliser des tableaux dans tes sessions pour gérer des produits multiples. IL est tard alors je dis peut etre une mage anerie (et je te prie de m'en excuser si c'est le cas).
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 09h20   #3
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
Citation:
Envoyé par Raideman Voir le message
Je pense que dans ton système, tes sessions ne peuvent contenir qu'un seul produit au maximum.
Car avec :

Code :
1
2
3
$_SESSION['panier']['produit'] = $id_prod;
$_SESSION['panier']['produit']['option'] = $id_option;
$_SESSION['panier']['produit']['reference'] = $id_ref;
Tu n'auras toujours qu'un $_SESSION['panier']['produit'] possible.

Donc à mon avis déjà, il ya un problème à ce niveau, tu devrais plutot utiliser des tableaux dans tes sessions pour gérer des produits multiples.
Exact ! Il faut inserer tes produits via la fonction array_push() qui va ajouter des entrées a la suite dans ton tableau , dans un premier temps sinon effecivement tu n'auras qu'une seule valeur dans tout les cas !

Ensuite pour eviter les doublons dans ton cas je te conseille de faire la verif a l'ajout du genre :

Code :
1
2
3
4
5
6
7
8
9
$id = array_search($id_article,$_SESSION['panier']['produit']) ;
if ($id !== false && $_SESSION['panier']['produit']['option'][$id] !== $id_option && $_SESSION['panier']['produit']['reference'][$i] !==$id_ref)
{
//Ajouter l'article car soit il n'existe pas soit il n'a pas les memes options que celui deja dans le panier
}
else
{
echo "Ce produit existe déjà" ;
}
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 12h18   #4
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 86
Points : 17
Points : 17
Merci pour les conseils, effectivement la construction à laquelle j'avais pensé est bancale.

RideKick, je vais regarder is ton code peut convenir à mon projet.
De mon côté j'ai un peu cherché aussi et j'ai trouvé aussi une solution je pense :
avec une construction du type

Code :
1
2
3
4
5
6
7
$_SESSION['panier'][0]['produit']="casque";
$_SESSION['panier'][0]['option']="couleur";
$_SESSION['panier'][0]['reference']="rouge";
 
$_SESSION['panier'][1]['produit']="casque";
$_SESSION['panier'][1]['option']="couleur";
$_SESSION['panier'][1]['reference']="vert";
qui permet d'avoir un produit avec une option et une réf par "case"
Le seul souci c'est que je dois chercher maintenant comment accéder à l'indice "du milieu" une fois que j'ai trouvé par exemple le produit avec un array_keys() et modifier ma session (ajouter ou oter le produit par exemple)
beyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h24.


 
 
 
 
Partenaires

Hébergement Web