insérer un enregistrement => tester les doublons

Eléphant du PHP | 331 Messages

05 juil. 2006, 16:18

Bonjour,

J'ai créé avec dreamweaver un formulaire pour insérer un enregistrement (php et mysql).
A la validation de l'enregistrement, il se peut qu'il existe déjà dans ma table. Actuellement, cela me renvoie le message suivant : Duplicate entry '2-1' for key 1.
Ce que je voudrais, c'est que dans le cas où il existe déjà un enregistrement avec les mêmes clés unqiues, on me propose de mettre à jour ou pas l'enregistrement. Est-ce possible ? Si oui, comment ?

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juil. 2006, 16:21

Les solutions possibles :

- passer ta clé en autoincrement, et ne pas mettre de valeur dans la requête INSERT, la clé sera générée automatiquement
- récupérer ce message d'erreur, le traiter et proposer la modif
- faire un select d'abord pour vérifier si la clé existe déjà ou non

Eléphant du PHP | 331 Messages

05 juil. 2006, 16:23

ok mais :
N'étant pas encore un pro du coté de la programmation, connaissez vous avec dreamweaver un moyen de rendre la chose + simple ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juil. 2006, 16:25

N'étant pas encore un pro du coté de la programmation, connaissez vous avec dreamweaver un moyen de rendre la chose + simple ?
Non
Dreamweaver n'est pas vraiment un outil pour programmer... ça peut faciliter certaines opérations mais ça ne va pas très loin, et je ne sais pas si tu peux prévoir ce genre de choses

Mais ce n'est pas très compliqué à faire

Si tu prends la solution 1 (autoincrement) tu n'as rien à rajouter à ton code

Eléphant du PHP | 331 Messages

05 juil. 2006, 16:44

Si tu prends la solution 1 (autoincrement) tu n'as rien à rajouter à ton code
Petit complément d'info: En fait, plutot que de proposer un second formulaire pour modifier un enregistrement existant, je voudrais tout faire au moment de la création d'un enregistrement avec la méthode suivante :
Si c'est la première fois qu'il enregistre les données par rapport au cas de figure que je lui propose (ce qui correspond donc à une de mes 2 clés primaires de ma table) alors j'enregistre ses valeurs, sinon, je les modifie.
Pour info, ma table est constituée d'une dizaine de champs donc deux clés primaires (IdUtilisateur + IdTypedeCas)

En espérant être clair ...

Merci !

Eléphant du PHP | 88 Messages

05 juil. 2006, 17:46

Salut!

Tu peux faire un SELECT * FROM taTable WHERE IdUtilisateur=valeur_utilisateur AND IdTypedeCas=valeur_cas

et ensuite avec la fonction mysql_num_rows tu testes si il y a déjà un enregistrement qui correspond à ces clés.

Si oui tu fais un UPDATE.

Sinon, tu fais ton INSERT.

@+

Eléphant du PHP | 332 Messages

05 juil. 2006, 17:54

Ou si tu es sur MySQL et que tu ne comptes pas en changer, tu peux utiliser la syntaxe REPLACE qui fait un INSERT si la clé n'existe pas ou un UPDATE si la clé existe (en fait, un DELETE suivi d'un INSERT).

http://dev.mysql.com/doc/refman/4.1/en/replace.html