Je suis en train de faire un site, sur lequel la commande d'artivle sera disponible. J'ai déja fais le panier, il fonctionne bien. Je m'attaque maitenant à la partie enregistrement dans la bdd.
Et c'est la que je me pose pas mal de question. En gros, Comment enregistrer de manière optimale une commande
J'ai un table users avec (id, email, nom, prenom,....)
Une table produit (id, prix,....)
Et la je veux créer la table commande (id, id_user,....)
La ou je bloque c'est pour construire correctement la partie produit et quantité. je ne sais pas comment faire exactement. Une colone produit_id avec les id des produit commandés et une colonne avec quantité avec toutes leur quantité respective? ça me semble bof, meme tres bof il me faudra ensuite les récupérer en séparant tous ça. Du vrai bidouillages je trouve, et pas pratique ppour visualiser ensuite une commande rapidement.
Je viens d'avoir une autre idé, ça serait de faire 2 tables. Une table commande (id, date, client, prix_total,...) et une colonne produit commandé (id_commande, id_produits, quantité, sous_total_produit). Mais je ne vois pas quoi mettre comme clé primaire la dedans..
Mais cette seconde solution me semble bien meilleure
Qu'en pensez vous??
Merci a vous
Le plus souvent la cause du bug est situé devant l'écran ;)
Ta deuxième solution me paraît plus aboutie. En effet, dans la table `commandes` tu pourrais également mettre des informations sur l'expédition, le statut (payé ou pas), bref des choses qu'il faudrait répéter si tu n'avais qu'une seule table.
Ta table `produits_commandes`devrait alors comporter l'id_produit, l'id_commande (pas besoin de l'id_client qui sera dans `commandes`) ainsi que la quantité par exemple.
Je vais partir sur 2 table séparé, ça me parait plus simple dans ma tête et beaucoup plus clair
Le fait de ne pas avoir de clé primaire sur la table 'produit_commande' c'est trés bof non? interdit? Dans le pire des cas ajouter un champ id en PRIMARY KEY resoudra mon probleme
Je pense que ça s'éclaircira aussi en avançant
Je suis assez surpris puisque j'ai pas trouvé de réponse clair à ma question lors de mes recherches, ça me semble pourtant être une question importante, qui doit revenir assez souvent, e un bon exercise d'entrainement!
Edit
Benzouye a écrit:
commande_produit ( id_commande [pk][fk], id_produit [pk][fk], quantite, etc. )
[pk] dfinie bien la primary key, on a le droit d'avoir 2 primary key ? ça vient du fait que une colonne de commande produit et totalement défini lordque que l'on connait le produit et la commande à laquelle il appartient non?
Par contre pour le statut de la commande, le principe c'est bien de la stocker en valier ou pas (payé ou pas) et dans le cas non valider, de la reproposer à l'utilisateur lorsqu'il se reconnecte? Ceci étant "un cookie avancé" (désolé si c'est pas beau) car l'utilisateur retrouvera sa commande lors de sa connexion, peu importe l'appareil ? Le truc serait donc d'enregistrer la commande lorsqu'on deconnete l'utilisateur (juste avant). (mon panier est fait en $_SESSION['panier']
- Edité par QuentinVidal5 3 août 2018 à 16:27:22
Le plus souvent la cause du bug est situé devant l'écran ;)
[pk] dfinie bien la primary key, on a le droit d'avoir 2 primary key
Non, mais on a le droit (et ici le devoir ) d'avoir une clé primaire définie sur deux colonnes (clé primaire composite). Cela permet de ne pas avoir deux fois le même produit sur la même commande.
QuentinVidal5 a écrit:
pour le statut de la commande, le principe c'est bien de la stocker en valier ou pas (payé ou pas) et dans le cas non valider, de la reproposer à l'utilisateur lorsqu'il se reconnecte? Ceci étant "un cookie avancé"
Je n'étais pas parti sur le principe d'utiliser un cookie pour le panier, car je m'imaginais que le client était forcément connecté ...
En revanche si l'on peut constituer son panier sans être connecté, alors il faudra en effet passer par un stockage local (cookie ou autre local storage) pour mémoriser ses choix avant de pouvoir créer la commande ...
QuentinVidal5 a écrit:
Je vais partir sur 2 table séparé
J'espère que 2 tables séparées signifie prendre le modèle que je t'ai suggéré/imposé
EDIT: Un nouveau probleme pour la creation dna l'edit à la fin du message
Alors oui bien sur je vais partir sur l'idée suggérer/imposé
Je n'utilise pas de cookie pour la panier, il faut en effet être connecté pour commencer son panier( quoique je crois pas je vais allez vérifier, je suis en train de confondre variable de session et utilisateur connecté)
Mais pour le cookier je pensais plus au cas ou l'utilisateur commence une commande, là il est interrompu, disons 1h, il est totalement inactif, si je le deconnecte au bout de 30min d'inactivité, son panier sera totalement perdu. Donc je peux à ce moment là, stocker la commande avec un statut en_cours, et faire en sorte de lui proposer de la continuer lorsqu'il se reconnecte.
Si j'ai bien compris, dans le cas ou je la stocke dans un cookie, la commande est conservé sur son appareil seulement, et non relié à son compte, alors que le stockage en bdd me permet de la relier à son compte
Plus généralement je n'ai pas encore utilisé les cookies sur mon site et je sais pas si je vais le faire, en tout cas pas tant que ça ne me parrait pas indispensable au bon fonctionnement.
Encore merci
EDIT:
J'ai maitenant un probleme sur la création des foreign key, alors sur les forums ils disent d'aller dans vue relationnelle et de les relier mais ça ne marche pas chez moi.
1. Je n'ai pas de vue relationnelle quand je suis sur ma table, je dois allez dans la base.
2. Si en anlglais vue relationelle c'est 'propose table structure' alors je n'ai rien en cliquant dessus depuis ma table
3. Dans la base, lorsque je clique sur designer, dan sle menu il y a un onlget 'create relation'. 9a à l'air de se jouer ici(fin c'est ici), je selectionne d'abord ma référence_key, et ensuite la foreign key, mais j'ai alors une erreur ' Relational features are disabled'
Comment les activer?
Et a y etre je passe en français
EDIT: Je suis avec MyISAM comme moteur de stockage, il semblerait que ça vienne de la, et qu'il me faudrait passer mes tables en InnoDB
Je dois recréer toutes mes tables ou il y a un moyen de changer le moteur de stockage?
Par contre je savais pas quoi mettre dans le on delete/update je les ai laissé vide (ya un truc de particulier à mettre ?)
- Edité par QuentinVidal5 6 août 2018 à 9:24:08
Le plus souvent la cause du bug est situé devant l'écran ;)
Enregister une Commande dans une bdd
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.