Pleins de questions, bugs et problèmes...

Mammouth du PHP | 19672 Messages

26 avr. 2008, 16:42

Ça m'intéresserait de savoir ce qui t'a paru compliqué à comprendre dans mon tuto.

Quoi qu'il en soit, pour l'enregistrement de tes commandes, voici sommairement comment tu pourrais structurer ton modèle :

Code : Tout sélectionner

+----------------+ +----------------------+ +----------------+ +-------------+ | article | | commande_has_article | | commande | | client | +----------------+ 1:n 1:1 +----------------------+ 1:1 1:n +----------------+ 1:1 1:n +-------------+ | art_id PK |--------------| art_id PK FK |--------------| cde_id PK |---------------| cli_id PK | | art_libelle | | cde_id PK FK | | clt_id FK | | cli_nom | | art_etc.. | | cde_qte | | cde_statut | | cli_etc... | +----------------+ +----------------------+ | cde_date | +-------------+ +----------------+
Est-ce que ce graphique te parle un peu ou pas du tout ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 50 Messages

26 avr. 2008, 17:59

Salut,

merci d'être là pour m'aider.

Je voudrais pas que tu le prennes mal, ton tuto est bien. C'est juste que quand j'ai eu l'idée d'un panier je savais que je ne voyais même pas comment ca pouvais fonctionner (enfin j'avais des notions qui me laissais imaginer quelque chose mais rien de concret) et quand je suis arriver sur ta page (1ere dans google) bien j'ai tout de suite vu que t'attaquais direct dans le gras du sujet. Je préfère, avant une petit explication grossière puis un sommaire et des parties biens distinctes (même si tu as mis des titres).J'avais l'impression d'un gros bloc. Je reconnais que c'est très bien expliqué et plus complet avec à la fin la sécurité etc. Mais tu préconise de faire un fichier de fonctions à la fin du tuto et moi ca me parait instinctivement plus simple de le faire au début, de séparer les choses les ordonner chaque truc fait son taf.
Je suis désolé de ne pas avoir pris ton tuto, j'ai juste été dérouté. Je le répète le tiens me semble quand même plus complet et c'est plus sympa d'avoir mis les commentaires dans les scripts (même si je préfère les mettre moi même pour matérialiser ce que j'ai appris et compris).
J'espère que tu ne le prends pas mal..


Pour les tables je ne vois pas trop a quoi sert la table commande_has_article? c'est la table temporaire dont vous m'avez parler?
Sinon la structure de ma base ressemble actuellement un peu à celle-ci.

Je vous met son script si ca peut vous aider:

Code : Tout sélectionner

-- -- Structure de la table `categcde` -- CREATE TABLE IF NOT EXISTS `categcde` ( `id_catcde` tinyint(4) NOT NULL auto_increment, `categorie` varchar(50) collate latin1_general_ci NOT NULL default '', PRIMARY KEY (`id_catcde`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ; CREATE TABLE IF NOT EXISTS `categcli` ( `Codecategclt` varchar(20) NOT NULL, `libcateclt` varchar(20) NOT NULL, PRIMARY KEY (`Codecategclt`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `client` ( `numcl` int(20) NOT NULL auto_increment, `nomcl` varchar(20) NOT NULL, `promcl` varchar(20) NOT NULL, `adrscl` varchar(20) NOT NULL, `cpcl` varchar(20) NOT NULL, `villecl` varchar(20) NOT NULL, `telcl` varchar(20) NOT NULL, `mailcl` varchar(20) NOT NULL, `categcl` varchar(20) NOT NULL, `typcl` varchar(20) NOT NULL default 'p', `datecreacl` date NOT NULL, PRIMARY KEY (`numcl`), KEY `categcl` (`categcl`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=411010 ; CREATE TABLE IF NOT EXISTS `commande` ( `numcdecl` int(11) NOT NULL auto_increment, `datecdecl` date NOT NULL, `numpcdecl` varchar(4) NOT NULL, `qtepcdecl` int(4) NOT NULL, `qteplivcl` int(4) NOT NULL, `numclcde` int(11) NOT NULL, PRIMARY KEY (`numcdecl`), KEY `numpcdecl` (`numpcdecl`,`numclcde`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=116 ; CREATE TABLE IF NOT EXISTS `produit` ( `nump` varchar(6) NOT NULL, `nomp` varchar(30) NOT NULL, `pvp` decimal(5,2) NOT NULL, `pap` decimal(5,2) NOT NULL, `qtestockp` int(11) NOT NULL, `qteminp` int(11) NOT NULL, `qtemaxp` int(11) NOT NULL, `id_catcdep` tinyint(4) NOT NULL default '0', PRIMARY KEY (`nump`), KEY `id_catcde` (`id_catcdep`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
J'aurais bien aimé vous le présenter sous forme de schéma mais je ne sais pas trop les faire proprement.. :S

Merci de toute votre aide. Une fois que j'aurais compris le fonctionnement et qu'on aurait réglé ce panier bin j'aurais plus grand chose à faire.

Sinon un petit HS: C'est normal que lorsqu'on fait afficher le code source dans un navigateur on ne voit pas le php? Et si on me prends mon connexion.php on pourra connaitre les infos de mon serveur non? c'est flippant :s

Merci
Bonne soirée!

Eléphant du PHP | 54 Messages

26 avr. 2008, 18:06

Oui,

Tout code PHP de parait pas....
Que le HTML ou PHP transformé en HTML aparait donc impossible de récupérer ou de voir quelle commande à tu fais etc.
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

Mammouth du PHP | 19672 Messages

26 avr. 2008, 18:44

Pour les tables je ne vois pas trop a quoi sert la table commande_has_article?
L'idée générale, c'est pour éviter d'avoir des redondances de données inutiles dans la base.

Tu auras peut-être noté des "1:n" ou "1:1" : ça représente des cardinalités. Si ce mot te semble étrange, en voici une illustration :
- Un client peut effectuer 0 à n commandes
- Une commande n'appartient qu'à un et un seul client;
Pour la table entre commande et article, c'est tout aussi logique :
- Une commande peut comprendre plusieurs articles;
- On peut trouver un même article dans 0 à n commandes :

Partant de là, on trouve logiquement la clé primaire de client dans commande, mais comment faire avec commande/article : si tu mets la clé primaire de commande dans article en clé étrangère, tu bloques une commande sur un seul article. Dans l'autre sens, c'est pas mieux, si tu mets dans commande l'identifiant de l'article, tu ne pourras mettre qu'un seul article dans ta commande, même si la quantité de cet article variera... Donc on crée une relation entre commande et article avec en clé étrangère à la fois l'identifiant de l'article et celui de la commande : ces deux formeront une clé primaire composite , ce qui fait que tu ne pourras jamais avoir de doublons.

Avec cette manière de faire, tu n'as pas besoin de stocker dans commande autre chose que par exemple son statut (en attente, payée, expédiée, etc...) ou la date à laquelle elle a été formulée et tout ce qui a trait à la commande en soi. Les articles ont déjà leur propre table, pourquoi les stocker ailleurs en double ?

Est-ce que ça te semble plus clair vu comme ça ? ?

Pour mon tuto, pas de soucis, ça peut effectivement dérouter un peu. Mais cette approche est surtout destinée à aborder un à un chaque point et en expliquer le fonctionnement. On regroupe à la fin, mais il est important de ne regrouper que si on a déjà compris chaque élément.

J'ajoute quand même un point. L'enregistrement d'un panier ne devrait pas avoir lieu avant le moment du passage en caisse. Le stocker à chaque mouvement du panier prend davantage de ressources puisqu'il faut à chaque fois accéder à la base de données. De plus, ça signifie aussi que pour pouvoir l'enregistrer, il faut que le client soit identifié : cette phase en début de navigation peut rebuter pas mal de gens. Il est normal de le faire au moment de passer en caisse, mais c'est comme dans un vrai magasin, je peux aller me promener dans les rayons, je n'ai besoin de m'identifier auprès de personne. Par contre en passant à la caisse, il est logique que lorsque je présente un chèque on me demande de m'identifier.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
AB
ViPHP | 5818 Messages

26 avr. 2008, 19:08

J'ajoute quand même un point. L'enregistrement d'un panier ne devrait pas avoir lieu avant le moment du passage en caisse. Le stocker à chaque mouvement du panier prend davantage de ressources puisqu'il faut à chaque fois accéder à la base de données. De plus, ça signifie aussi que pour pouvoir l'enregistrer, il faut que le client soit identifié : cette phase en début de navigation peut rebuter pas mal de gens. Il est normal de le faire au moment de passer en caisse, mais c'est comme dans un vrai magasin, je peux aller me promener dans les rayons, je n'ai besoin de m'identifier auprès de personne. Par contre en passant à la caisse, il est logique que lorsque je présente un chèque on me demande de m'identifier.
Pas mieux! Optimisation des ressources, une plus grande fluidité et logique d'utilisation pour le visiteur, je vois difficilement des arguments pour faire autrement :wink:

Eléphant du PHP | 50 Messages

28 avr. 2008, 13:27

Bonjour,

Désolé d'avoir été si long à répondre j'ai eu quelques petits problèmes.

J'ai saisi l'idée de cette nouvelle table et ca me rappelle que dans les modèles relationnels qu'on entudie en cours il y avait ce genre de table appellée "ligne_commande" par exemple. Sauf qu'on ne nous a jamais expliquer le fonctionnement ni comment s'en servir...Faut dire aussi que je n'ai pas eu de prof extra.. :roll: Peut-être aussi que ce n'est pas à mon programme..

Je pense avoir compris la logique mais je ne vois pas comment créer ces tables.. comment déclarer plusieures clés primaires? on fait:

Code : Tout sélectionner

PRIMARY KEY (`clé1`,`clé2`);
?

Est ce que ce schéma est correct?:

Code : Tout sélectionner

+----------------+ +----------------------+ +----------------+ +-------------+ | produit | | ligne_commande | | commande | | client | +----------------+ 1:n 1:1 +----------------------+ 1:1 1:n +----------------+ 1:1 1:n +-------------+ | nump PK |--------------| nump PK FK |--------------| numcdecl PK |---------------| numcl PK | | nomp | | numcdecl PK FK | | numclcde FK | | nomcl | | pvp | | qte | | cdestatut | | promcl | | pap | +----------------------+ | cdedate | | adrscl | | qtestockp | +----------------+ | cpcl | | qteminp | +---------------+ | villecl | | qtemaxp |1:1 1:1 | categcde | +----------------+ | telcl | | id_catcdep FK |--------------+---------------+ | categcli | | mailcl | +----------------+ | id_catcde PK | +----------------+ 1:1 1:1 | categcl FK | | categorie | | Codecategclt PK|---------------| typcl | +---------------+ | libcateclt | | datecreacl | +----------------+ +-------------+
Comment on fait pour mettre les cardinalités dans le script sql?


Pour le dernier point, dans le site actuellement peuvent déjà remplir le panier sans être loggé. En fait je pensais avoir un bouton valider en bas du panier qui envoie vers une page ou si on est pas loggé on nous demande de le faire sinon on affiche un récapitulatif de la commande et un bouton commander pour envoyer à la bdd.. Pour la partie être connecté ou pas ca va mais pour faire le récapitulatif et envoyer au serveur je sèche :(

Mon projet doit être fini pour lundi prochain et c'est mon dernier problème ce panier. Les oraux sont à la rentrée. Généralement il n'y a même pas un projet sur deux de bouclé mais moi j'y tiens sinon on peut juste dire qu'on a essayé et montrer notre réflexion et ca passe mais je serais plus à l'aise avec un truc qui fonctionne.
Merci de toute votre aide franchement ca m'a beaucoup aidé.
Après ce panier jarretterais avec toutes mes questions,promis.

Cordialement
Jerem

Mammouth du PHP | 19672 Messages

28 avr. 2008, 13:54

Sommairement : ton schéma se tient à deux petits détails près :
- Le numéro de téléphone devrait être dans une table à part, va faire un tour dans le forum FAQ et cherche un mini-tuto sur les jointures, tu vas tout de suite comprendre pourquoi je dis ça;

- ton entité catégorie client me semble erronée. Tu as différentes catégories : OK. Mais autant un client appartient à une et une seule catégorie, autant une catégorie peut comprendre 0 à n clients. CQFD, la cardinalité n'est pas bonne. Dans ton entité categcli, tu as deux colonnes, l'identifiant et le libellé, mais avec le type de relation que je décris, tu vas te retrouver avec une clé étrangère dans ton entité client.

Enfin je dirais quand même une chose : facilite-toi un peu la vie pour travailler : je préconise (ce n,est pas une règle obligatoire) de préfixer systématiquement les noms des propriétés, donc toutes les propriétés de l'entité produit devraient commencer par pro_..., pour client, cli_..., pour commande, cde_... etc... et comme ça, tu peux utiliser le même nom en clé primaire dans une entité et en clé étrangère dans une autre entité. Ça permet entre autres choses les jointures naturelles avec USING au lieu de WHERE... Enfin bon, même si tu n'utilises pas les jointures naturelles, tu vas rapidement réaliser qu'à la lecture, c'est infiniment plus facile à suivre.

On ne matérialise pas les cardinalités en SQL : ça se traduit par la présence ou non de clés étrangères dans telle ou telle table.

Et pour envoyer la commande au serveur, pas dur : ton panier est stocké dans un tableau : tu peux donc facilement construire une requête dynamique avec toutes les informations nécessaires en une seule fois, il suffit d'une boucle foreach() par exemple. Ton client une fois identifié, tu as la clé primaire du client, pour chaque article, tu as son identifiant aussi. Dans ton panier, tu dois avoir la quantité pour chaque article. Partant de là, le début de la requête est pas vraiment compliqué :
-1- Créer une nouvelle commande avec un statut "En attente" par exemple et la date du jour + l'identifiant du client. Là, tu récupère la clé primaire générée (mysql_insert_id de mémoire)
-2- Créer la requête d'insertion des articles pour la commande:

Code : Tout sélectionner

INSERT INTO commande (nump, numcdecl, qte) VALUES
À ce stade, tu vas stocker dans un tableau chaque ligne SQL correspondant à un article, chaque ligne sera :

Code : Tout sélectionner

(xyz, abc, 1)

- xyz est l'identifiant du produit que tu devrais avoir dans ton panier;
- abc est l'identifiant de la commande récupéré lors de la précédente requête;
- 1 est la quantité de l'article que tu dois trouver dans ton panier aussi.

Là dessus, un implode du tableau en mettant une virgule entre chaque élément et tu concatène le résultat au début de la requête commencée juste avant. Et tu exécutes.

Digère tout ça tranquillement, tu vas voir que tout ça n'est que logique et chronologie des évènements.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 50 Messages

28 avr. 2008, 15:42

Merci beaucoup de cette réponse.

J'ai regardé la faq et j'ai compris pour l'histoire de téléphone mais dans la mesure ou c'est pas à des fins professionnelles et pas "sérieux" je verrais si j'ai le temps de modifier ca comme il faut apres le panier.

Merci pour categcli je mettais trompé :)

Pour ceci:
-1- Créer une nouvelle commande avec un statut "En attente" par exemple et la date du jour + l'identifiant du client. Là, tu récupère la clé primaire générée (mysql_insert_id de mémoire)
on ajoute ca dans la table commande, c'est ca?
-2- Créer la requête d'insertion des articles pour la commande:

Code : Tout sélectionner

INSERT INTO commande (nump, numcdecl, qte) VALUES
À ce stade, tu vas stocker dans un tableau chaque ligne SQL correspondant à un article, chaque ligne sera :

Code : Tout sélectionner

(xyz, abc, 1)

- xyz est l'identifiant du produit que tu devrais avoir dans ton panier;
- abc est l'identifiant de la commande récupéré lors de la précédente requête;
- 1 est la quantité de l'article que tu dois trouver dans ton panier aussi.
Pourquoi mettre ca dans la table commande? c'est pas plustot dans la table ligne_commande (ou commande_has_article sur ton schéma) ??


Je suis aller voir les fonctions que tu m'as dis et je vais essayer de m'entrainer avec donc si j'ai bien compris:

foreach est pour regarder les données du tableau, donc je met le nom de mon tableau puis les données vont se mettrent dans ma variable?
Je vois pas trop interpreter ca.. si je fais:
foreach(mon_tableau as $value)
  commandes
Et que dans mon tableau j'ai en numéro de produit: je01 en quantité 3 et ch01 en quatité 2, j'aurais quoi dans $value? et une fois que c'est dans $value j'en fais quoi? :S*

et pour implode c'est pour mettre dans une variable plusieurs données qui seront séparée par des virgules?
par exemple: je01,3 ? ou je01,3,ch01,2 ?


Sinon c'est vrai que mes nom de champs sont un peu brouillon il faudrait que je refasse tout au propre..:S

Merci beaucoup de ton aide.

Mammouth du PHP | 19672 Messages

28 avr. 2008, 16:12

-2- Créer la requête d'insertion des articles pour la commande:

Code : Tout sélectionner

INSERT INTO commande (nump, numcdecl, qte) VALUES
À ce stade, tu vas stocker dans un tableau chaque ligne SQL correspondant à un article, chaque ligne sera :

Code : Tout sélectionner

(xyz, abc, 1)

- xyz est l'identifiant du produit que tu devrais avoir dans ton panier;
- abc est l'identifiant de la commande récupéré lors de la précédente requête;
- 1 est la quantité de l'article que tu dois trouver dans ton panier aussi.
Pourquoi mettre ca dans la table commande? c'est pas plustot dans la table ligne_commande (ou commande_has_article sur ton schéma) ??
Oui, tu as parfaitement raison. Et ce que j'ai décrit aboutit à une requête unique en insertion multiple, donc une requête de la forme :

Code : Tout sélectionner

INSERT INTO ligne_commande (col_x, col_y, ..., col_z) VALUES ('val_x ligne 1', 'valy ligne 1', ..., 'valz ligne 1), ('val_x ligne 2', 'valy ligne 2', ..., 'valz ligne 2), ..., ('val_x ligne n', 'valy ligne n', ..., 'valz ligne n);
Donc en fait, dans la boucle, tu vas construire un tableau qui va contenir chacune des lignes de données à insérer "('val_x ligne n', 'valy ligne n', ..., 'valz ligne n)" : si ton tableau se nomme par exemple $aInsert, tu feras un :
$sInsert = implode(',', $aInsert);
Et enfin, tu fais :
$sql = "INSERT INTO commande (nump, numcdecl, qte) VALUES". $sInsert;
Là, la requête est prête a être exécutée. Ajoute un echo($sql); pour l'afficher et l'inspecter avant exécution par précaution, mais ça devrait bien aller.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 50 Messages

29 avr. 2008, 11:16

Bonjour,

En fait mon problème c'est que je ne sais pas utiliser foreach() (à défaut d'avoir compris à quoi ca sert)

Comme dans ton tuto mon panier est stocké dans ma variable session comme ceci:
  $_SESSION['panier']=array();
  $_SESSION['panier']['id_prod'] = array();
  $_SESSION['panier']['libelleProduit'] = array();
  $_SESSION['panier']['qteProduit'] = array();      
  $_SESSION['panier']['prixProduit'] = array();
Et donc je pensais qu'il fallait faire un:
foreach( $_SESSION['panier'] as $value ) // on parcourt $_SESSION['panier'], la valeur de l'item courant est copiée dans $value
  echo $value . '<br />'; // on affiche le contenu de $value
Et dans value il y a: ArrayArrayArrayArray

Par contre si je change $_SESSION['panier'] par une variable plus précise, ca fonctionne par exemple avec $_SESSION['panier']['id_prod'] il me met tout mes code produit en ligne.

Et si jamais j'arrive à le faire marcher, dans mon panier j'ai une colonne libellé et foreach va le mettre dans sa variable donc j'aurais: id_prod libelleProduit qteProduit prixProduit

Alors qu'en fait je n'ai besoin que du code et de la quantité?

Et je ne vois pas trop comment dans $sInsert il peut y avoir le code de la commande puisque si j'ai bien compris, il reprends le tableau créé dans la boucle?

Et enfin faut il utiliser implode de cette facon:
 $sInsert = implode(',', $value);
? (en tenant compte de mon foreach plus haut)

Parce qu'il me retourne un :

Code : Tout sélectionner

Warning: implode() [function.implode]: Bad arguments
Merci de tout ce que tu fais..
Décidément je dois avoir un sérieux problème au cerveau avec tout ce que tu fais pour essayer de m'expliquer..

Merci encore
Cdlt
Jerem

Mammouth du PHP | 693 Messages

29 avr. 2008, 11:45

foreach permet de parcourir un tableau.

quand tu fait cette ligne
foreach( $_SESSION['panier'] as $value ) 

Tu aura une boucle sur chaque element de ton tableau. Tu pourra accéder à ton élement par la variable $value (par contre, si tu la modifie, ca ne sera pas enregistré dans le tableau).

Or dans ton cas, ton tableau est composé de 4 tableaux. Il est donc normal que tu obtienne array lorsque tu demande d'afficher.

Par contre, en faisant ainsi, tu sépare les informations de chaque ligne de commande. Par exemple, pour une commande, le deuxième index est le même mais pas le premier, ce qui complexifie la chose pour exploiter les informations. Ne serait ce pas judicieux d'inverser les index ?

faire quelque chose comme ca
$_SESSION['panier']=array(); 
  
$_SESSION['panier']['ta_commande']=array(['id_prod']=>ton_id
                                         ['libelleProduit']=>ton_libelle
                                         ['qteProduit'] => ta_quantité
                                         ['prixProduit']=> ton_prix);

Eléphant du PHP | 50 Messages

29 avr. 2008, 14:47

foreach permet de parcourir un tableau.

quand tu fait cette ligne
foreach( $_SESSION['panier'] as $value ) 

Tu aura une boucle sur chaque element de ton tableau. Tu pourra accéder à ton élement par la variable $value (par contre, si tu la modifie, ca ne sera pas enregistré dans le tableau).

Or dans ton cas, ton tableau est composé de 4 tableaux. Il est donc normal que tu obtienne array lorsque tu demande d'afficher.
Jusque là j'ai compris, merci.
Par contre, en faisant ainsi, tu sépare les informations de chaque ligne de commande. Par exemple, pour une commande, le deuxième index est le même mais pas le premier, ce qui complexifie la chose pour exploiter les informations. Ne serait ce pas judicieux d'inverser les index ?

faire quelque chose comme ca
$_SESSION['panier']=array(); 
  
$_SESSION['panier']['ta_commande']=array(['id_prod']=>ton_id
                                         ['libelleProduit']=>ton_libelle
                                         ['qteProduit'] => ta_quantité
                                         ['prixProduit']=> ton_prix);
Il faudra que je fasse des modification dans tout le panier?
J'ai pas bien saisi à quoi ca va servir? désolé :(
Dans tout les tutos ils utilisent la même méthode que Cyrano pour les variable de session du panier :S

Merci!

Mammouth du PHP | 693 Messages

29 avr. 2008, 15:04

En gros,

Avec ta méthode, pour obtenir toutes les informations des commandes et mettre en forme la requete, tu devra faire quelque chose dans ce style.
foreach( $_SESSION['panier']['id_prod'] as $key=>$value ) {

  $id=$value;
  $libelle=$_SESSION['panier']['libelleProduit'][$key];
  $qtite=$_SESSION['panier']['qteProduit'][$key];
  $prix=$_SESSION['panier']['prixProduit'][$key];
  //Suite de la construction de la requete
}
Bref, tu va devoir jouer sur le deuxième index, et rappeler le tableau original. Bref, c'est quelque chose que je n'aime pas du tout.

Tandis qu'avec ma méthode, il suffit de faire
foreach( $_SESSION['panier'] as $value ) {

  $id=$value['id_prod'];
  $libelle=$value['libelleProduit'];
  $qtite=$value['qteProduit']
  $prix=$value['prixProduit'];
  //Suite de la construction de la requete
}
Ce que je trouve plus agréable. Cela dis, il est vrai que si ca t'oblige à refaire tout ton panier, ce n'est effectivement pas interessant.

Eléphant du PHP | 50 Messages

29 avr. 2008, 15:59

Bin
J'aimerais qu'on essai avec la première méthode et si je m'en sors pas on verra avec ta méthode.

J'ai fais un

Code : Tout sélectionner

echo "<pre>".var_dump($_SESSION['panier'])."</pre>";
Ce qui m'a rendu ca:

Code : Tout sélectionner

array(4) { ["id_prod"]=> array(2) { [0]=> string(4) "je01" [1]=> string(4) "ch03" } ["libelleProduit"]=> array(2) { [0]=> string(22) "jean coupe droite bleu" [1]=> string(17) "chaussures noires" } ["qteProduit"]=> array(2) { [0]=> int(1) [1]=> int(1) } ["prixProduit"]=> array(2) { [0]=> float(109) [1]=> float(80) } }
Dans ton premier foreach, ce qui se met dans les variable c'est que ce qui concerne le dernier article du panier..Par exemple pour $id il y a ch03 dedans :S

Je ne sais pas comment m'en servir
:cry:

Je désespère avec ce panier.. :(

Mammouth du PHP | 693 Messages

29 avr. 2008, 16:11

Après, dans le foreach, il faut ensuite faire le traitement qui corespond à ce que tu veux faire. Je t'ai juste indiqué comment accéder aux valeur que tu veux.Il faudrait rajouter une linge du style
$aInsert[]="('".$id."','".$id_commande."',".$qtite.")";
Après, il suffit d'utiliser implode() et concaténer avec le reste de la requete.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]