Souci avec ON DUPLICATE KEY UPDATE et auto_increment
Posté : 22 févr. 2007, 19:11
Edit titre du post.
Bonjour,
Je transpire à grosses gouttes sur un pbm. d'insertion / maj. de données.
J'ai un formulaire qui me permet de saisir les références d'un article, sur une ligne et trois champs (nom, quantité et prix de l'article).
Insertion
Je peux enregistrer cette saisie, ou afficher autant de lignes vides supplémentaires que je veux, en effectuer les saisies et enregistrer le tout: c'est ok et correspond à la requête suivante, en bouclant sur le nbre de lignes:
Maj
Je rappelle mon formulaire et affiche les lignes précédemment saisies: c'est ok.
J'y ajoute des références article et là patatras: j'enregistre le tout et pas seulement ma mise à jour.
J'ai bien une méthode qui fonctionne mais que je veux éviter:
à chaque mise à jour, vider la table et la remplir à nouveau.
Donc pour résumer:
1er appel du formulaire,
je saisis nom1, qt1, pu1
et j'enregistre, idarticle=1 est généré.
2nd appel,
affichage de nom1, qte1, pu1
affichage ligne vide et saisie de nom2, qte2, pu2
et l'enregistrement est alors
1 nom1, qte1, pu1
2 nom1, qte1, pu1
3 nom2, qte2, pu2
au lieu de
1 nom1, qte1, pu1
2 nom2, qte2, pu2
Merci de vos remarques avisées !
Bonjour,
Je transpire à grosses gouttes sur un pbm. d'insertion / maj. de données.
J'ai un formulaire qui me permet de saisir les références d'un article, sur une ligne et trois champs (nom, quantité et prix de l'article).
Insertion
Je peux enregistrer cette saisie, ou afficher autant de lignes vides supplémentaires que je veux, en effectuer les saisies et enregistrer le tout: c'est ok et correspond à la requête suivante, en bouclant sur le nbre de lignes:
INSERT INTO article (nom_art, qte, pu)
VALUES ('{$article[nom][$i]}','{$article[qte][$i]}','{$article[pu][$i]}')
Un auto_increment idarticle me sert de clé primaire; je le récupère pour l'étape suivante que voici:Maj
Je rappelle mon formulaire et affiche les lignes précédemment saisies: c'est ok.
J'y ajoute des références article et là patatras: j'enregistre le tout et pas seulement ma mise à jour.
INSERT INTO article (nom_art, qte, pu)
VALUES ('{$article[nom][$j]}','{$article[qte][$j]}','{$article[pu][$j]}')
ON DUPLICATE KEY
UPDATE nom_art= '{$article[nom][$j]}', qte= '{$article[qte][$j]}', pu= '{$article[pu][$j]}'
ou en faisant apparaitre la clé primaire:INSERT INTO article (idarticle, nom_art, qte, pu)
VALUES ('{article[id][$j]}','{$article[nom][$j]}','{$article[qte][$j]}','{$article[pu][$j]}')
ON DUPLICATE KEY
UPDATE nom_art= '{$article[nom][$j]}', qte= '{$article[qte][$j]}', pu= '{$article[pu][$j]}'
J'ai essayé une clause IGNORE mais même souci.J'ai bien une méthode qui fonctionne mais que je veux éviter:
à chaque mise à jour, vider la table et la remplir à nouveau.
Donc pour résumer:
1er appel du formulaire,
je saisis nom1, qt1, pu1
et j'enregistre, idarticle=1 est généré.
2nd appel,
affichage de nom1, qte1, pu1
affichage ligne vide et saisie de nom2, qte2, pu2
et l'enregistrement est alors
1 nom1, qte1, pu1
2 nom1, qte1, pu1
3 nom2, qte2, pu2
au lieu de
1 nom1, qte1, pu1
2 nom2, qte2, pu2
Merci de vos remarques avisées !