En fait j'ai crée une variable panier avec une fonction recupCommandes :
public function recupCommandeProduits($app , $id_client){
$query= $app['db'] -> prepare("SELECT * FROM commande_produits WHERE id_client = :id_client");
$query -> bindValue(':id_client', $id_client, PDO::PARAM_STR);
$query -> execute();
// $query ->fetchAll();
}
Et j'essaie de dire à mon controller , si le panier est vide lancer la fonction ajoutProduits et si il n'est pas vide lancer la fonction updateProduits. Je pense que mon probleme vient maintenant d'ici. Je suis conscient que vu mon niveau c'était un peu ambitieux de faire un site e-commerce mais ca me permet d'apprendre bcp de choses meme si je me fais un peu violence...lol
Le id_client seul ne suffit pas, comme l'a dit Philodick dans un message il faut ajouter id_produit, Parce qu'avec ton code la màj suivante écrase la précédente jusqu'au dernier tour.
Je serais curieux de voir la structure de ta base de données, ça semble rendre les trucs compliqués.
Edit: Je viens de voir ton code d'insertion , pas d'id_client.
Oui. Et puis de tout façon si un client commande le même produit plus tard , ça va tout "casser" dans ta table.
Enfin bon dans ce genre de cas on une table commande (c'est dans cette table que l'id du client se trouve) et une table ligne_commande (avec les produits de la commande) maintenant si le client doit modifier sa commande on le fait par l'id de la commande ou sa référence. Voilà le plus simple.
Oui j'avais vu ca pour la table commande. Du coup je ne mets pas d'id_client dans la table commande_produits mais dans la table commande? Je le remplace donc par un id_commande comme tu me le conseilles?
J'ai rajouté l'id_prod dans le WHERE de la fonction update mais la fonction n'agit pas , je n'ai pourtant pas d'erreur php
Je me suis rendu compte que j'avais pas mal d'erreur dans le return de mon controller , j'ai rectifié tout ca normalement ça devrait marcher beaucoup mieux .
Sur vos conseils j'ai remanié un peu mes tables. J'ai maintenant une table commande avec un id_commande et un id_client , et j'ai modifié la table commande_produits où j'ai remplacé l'id_client par un id_comm(en clé étrangère avec l'id_commande de la table commande).
Je repars donc sur ma fonction ajoutProduits où je bloque sur une erreur php, voici la fonction :
An exception occurred while executing 'INSERT INTO commande_produits (`id_prod`,`nom`,`options`,`quantite`,`prix`,`total`,`fraisdeport`,`grandtotal`, `id_comm`) VALUES (:id_prod, :nom_prod, :options, :quantite, :prix, :total, :fraisdeport, :grandtotal, :id_comm)' with params [null, null, null, null, null, null, null, null, null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_comm' cannot be null
Je pense que je m'y prend mal pour insérer l'id_commande.commande dans id_comm.commande_produits Est ce que l'erreur viendrait du fait que l'id_commande n'existe pas encore au moment où la fonction se lance?
@philodick, l'id_comm de la table commande_produits n'est pas la clé primaire, par contre l'id_commande de la table commande est bien en la clé primaire en auto-incrément.
@WillyKouassi J'avais oublié de préciser que j'avais créé une fonction ajoutCommande :
public function ajoutCommande($id_client, $app){
$user = $app['session']->get('user');
$id_client = $user['userid'];
$sql = "INSERT INTO commande (`id_client`) VALUES (:id_client)";
$query = $app['db']->prepare($sql);
$query->bindValue(':id_client', $id_client, PDO::PARAM_INT);
$query->execute();
}
Mais je ne savais pas trop à quel moment la lancer dans mon controller(bon sachant qu'il faut que je la lance avec la fonction ajoutCommandeProduits j'imagine) :
Une commande ce n'est pas qu'un id_client et id_commande.
Comme je l'ai dit, on crée une commande et on y a ajoute des produits, ça se fait systématiquement. Ta méthode ajoutCommande devrait renvoyer $app['db']->lastInsertId(); et ce id doit être passé dans ta méthode ajoutCommandeProduits.
Et puisque tu as des insertions multiples, tu devrais voir du côté des transactions avec PDO
J'ai simplement dit que ta fonction devait retourner donc il suffisait de l'ajouter tout simplement.
Peut être dans l'ordre ajoutCommandeProduit($app, $id_commande, $saisie) et utiliser $id_commande au lieu de $_POST['id_commande'] qui semble venir de nulle part.
× 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.
N'oubliez pas d'activer les erreurs PDO.