Bonjour,
Je suis entrain de développer une petite application web en PHP/SQL pour une boulangerie, permettant aux utilisateurs de réserver des petits pains pour le lendemain.
L'idée c'est que le client puisse voir la liste de tous les petits pains proposés, et puisse choisir pour chacun, la quantité désirée.
De l'autre côté, la boulangerie doit pouvoir afficher quels petits pains ont été commandés par quel client et dans quel quantité.
Pour cela j'ai créé une base de données dont voici la structure :
http://nicolasschiff.com/image/diagram.png

Ma question, c'est comment insérer une commande (et ses détails) en PHP dans les différentes tables de la base de données ? C'est à dire, savoir que le client N passe une commande N contenant les produits X, Y, Z avec leur quantité respective. Je ne sais pas comment faire techniquement pour lier les données ensemble et je ne sais pas comment écrire la requête...
Comme je débute en PHP, j'ai fais beaucoup d'essais avant de poster ce message, sans succès. J'ai tout de même une première requête qui à l'air de fonctionner, mais qui ne suffit pas à elle seule :

//On ajoute la commande dans la base
$requete = $base->prepare('INSERT INTO commandes (date_commande, date_livraison, clients_id_clients) VALUES(NOW(), :date_livraison, :id_client)');
$requete->execute(array(
    'date_livraison' => $date_livraison,
    'id_client' => $_SESSION'id']
)); 

//On récupère le dernier ID de la commande insérée
$lastid = $requete ->lastInsertId();
//C'est là que je bloque (ne tenez pas compte du fait que ce n'est pas une requête préparée) :
$requete2 = $base->query('INSERT INTO detailscommande (commandes_id_commande, produits_id_produit, quantite) VALUES ($lastid,........ )');

Merci d'avance pour votre précieuse aide,

Nicolas

6 réponses


Je suppose que ton "panier" est basé sur les sessions ? Tu dois avoir par exemple :

$_SESSION'id_produit']'qte']'taille'];

Pour construire ta requête, tu parcours ton tableau (panier) avec un foreach

Alors on m'a déjà dit qu'il fallait créer un "panier", ce que j'ai essayé de faire en suivant un tutoriel sur ce site. Mais j'ai du mal à comprendre l'intérêt puisque j'ai simplement un formulaire HTML avec la liste des produits et un <input> de type number à côté de chaque ligne. En validant le formulaire je souhaite insérer dans la base chaque quantité de produit pour chaque ligne.

Mais je n'arrive pas à faire le lien entre les différentes tables (pour dire que tel produit est commandé 10 fois dans la commande numéro 1 du client numéro 1 etc...)

Tu devrais re-regarder ce tutoriel, tout sera plus simple une fois que tu aura compris .
Pour t'aider voilà quelques points importants :
Quand tu souhaite gérer des commandes, il faut que les produits et leur quantité soient sauvegarder dans un variable de page en page, c'est pour cela qu'on utilise les sessions .
Chaque ligne de ton tableau de session contiendra un id_produit ainsi que sa quantité .
Pour afficher une commande entière, tu dois récupérer chaque id_produit dans les sessions, puis grace à une requête SQL, en sortir son prix, et multiplié ce dernier par la quantité .

Tu dis que tu as juste un formulaire, mais les produits que tu affiches viennent bien d'une base de données non ?

Merci pour ta réponse, je suis justement entrain de suivre ce tutoriel et de le reproduire :)
Je vais essayer tout ça, effectivement mes produits viennent bien d'une base de données.

Ce que j'ai du mal à comprendre c'est : pourquoi faut-il passer par les sessions sachant que mon client (qui est connecté au site via une session justement) va simplement renseigner des quantités pour chaque produit et valider le formulaire. Je pensais que tout allais passer par $_POST et s'insérer dans la base de données et que pour ça il fallait utiliser les jointures SQL etc... Je suis complètement à côté de la plaque en raisonnant de cette manière ?

Merci :)

La différence principale entre $_POST et $_SESSION c'est que l'une peut conserver les données pour un temps x .
Quand tu utilise un formulaire de contact par exemple, tu récupère les données saisies par l'utilisateur avec $_POST, tu envois le mail et hop les données disparaissent .
A coté de ça, les $_SESSION sont basées sur des "cookies", qui te permettent de garder en mémoire des informations durant un temps voulu .
Donc tu peux allé sur le site, remplir ton panier, changer de pages, même de site, et lorsque tu y retournera, les données seront toujours là .
Je te conseille de regarder ce tutoriel qui t'expliquera le fonctionnement des session / cookies .

C'est vrai merci, j'ai mieux compris la différence maintenant. J'ai suivi et appliqué tout le tutoriel et cela fonctionne parfaitement. Mais le tutoriel s'arrête juste avant l'insertion dans la base de donnée (ce qui me manque). Il est dit que l'on peut utiliser la fonction serialize() de PHP mais j'ai toujours du mal à voir comment lier les données dans mes tables...

Quelqu'un aurait la suite des opérations (l'insertion du panier dans une table) pour valider la commande ?

Merci d'avance.