Requète insert + Duplicate entry (bug ?)

jonathony
Invité n'ayant pas de compte PHPfrance

15 févr. 2011, 19:16

Bonjour à tous,

j'ai un petit soucis avec ma base de données, j'effectue des modifications à travers un formulaire php: pour mon ajout ça marche très bien mais la modification ne marche pas. En fait, Mysql me dit que le champ que je veux inséré existe déja ( la clé primaire est déja existante en fait) alors que pas du tout. Je modifie l'enregistrement et là mysql accepte le changement de "numProduit" (clé primaire) mais me met tout de même l'erreur suivante:
- Erreur : 1062
Message : Duplicate entry '123' for key 'PRIMARY'
L'opération a échoué

Voila le code :
$query_maj="update produit set Numproduit=".$_POST["numproduit"].", NumDepart=".$_POST["listedepart"].", 
			NumCategorie=".$_POST["listecategorie"].", Reference='".$_POST["reference"]."', Designation='".$_POST["designation"]."', 
			QuantiteStock=".$_POST["quantitestock"].", PrixUnit=".$_POST["prixunit"].", CoeffMarge=".$_POST["coeffmarge"]."";		
			
			$result_maj=mysql_query($query_maj);
			
			if ($result_maj==FALSE)
				{
					echo ("<p>Erreur : ".mysql_errno($connect)."<br />");
					echo ("Message : ".mysql_error($connect)."</p>");
					die("L'opération a échoué");
				}
				else
				{
					echo ("La requète a réussi, le produit a été modifié.");
				}

Voila. j'aimerais bien un peu d'aide.

ViPHP
xTG
ViPHP | 7331 Messages

15 févr. 2011, 20:52

Je vois mal un sgbd se tromper sur cette affaire là. ;)
L'erreur ne peut se trouver qu'entre l'écran et le siège si tu veux mon avis.

Et l'erreur est de taille. Avec ta requête actuelle tu ne modifies pas un enregistrement, mais tous les enregistrements à la fois. ;)
Il te faut une clause WHERE.

ydprod
Invité n'ayant pas de compte PHPfrance

15 févr. 2011, 23:18

Ce problème survient souvent suite à un insert pour qui la clé existe déjà. Le mieux est l'auto incrément

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 févr. 2011, 01:43

Ce problème survient souvent suite à un insert pour qui la clé existe déjà. Le mieux est l'auto incrément
heu il fait un update la ....

@jonathony y a pas d'interet nom plus a faire la mise a jour de la clef primaire normalement sinon c'est un coup à mettre un sacré brin dans tes données ;)

@+
Il en faut peu pour être heureux ......

jonathony
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 08:58

Ah oui, sans clause where ça va être tendu. Rolala la faute de débutant j'ai honte.

Sinon je me suis amusé à modifier mon num car en fait on le construit avec la catégorie et le département donc il pourrais m'arriver de le modifier, j'ai essayé avec les liens identifiants mais après dans construire le code php, je trouve ça trop complexe donc bon pour faire le numproduit faudra juste bien regarder dans quelle catégorie on veut le placer. ( donc l'auto-incrément ne convient pas)

Merci pour vos réponses

jonathony
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 09:04

Re, donc j'ai bien un soucis, car comme mes catégories et départements peuvent changer si on se trompe par exemple sur le choix du numProduit, je ne peux plus le changer ??

(J'ai ma page modiffproduits.php qui correspond au champs d'un produit que je récupère avec un bouton radio dans liste de produits dans une autre page, donc je sélectionne valider et la modiff s'effectue dans la page modiffproduits_sql.php et c'est là que ça coince) Je vais y réfléchir je vous recontacte si besoin mais je veux bien que vous m'aidiez à répondre à ma question du dessus. :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 févr. 2011, 09:39

a priori une clef primaire n'a pas vocation à changer histoire d'éviter le foutoir ;)


une peu de lecture sur le sujet http://sqlpro.developpez.com/cours/clefs/

@+
Il en faut peu pour être heureux ......

jonathony
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 10:04

Je m'en doute bien, mais en fait Si par exemple je change ma catégorie et mon département mon NumProduit devrait changer en fait.

Ou Sinon est-ce que tu aurais des infos sur les liens identifiants et comment les modéliser à l'intérieur du code ? Je sais modéliser des liens identifiants dans la base de données mais les utiliser pour des ajout ect je suis un peu perdu.

ViPHP
xTG
ViPHP | 7331 Messages

16 févr. 2011, 10:20

Si le numProduit est voué à être modifié je ne l'utiliserai pas comme clé primaire pour ma part.

jonathony
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 10:33

Je pourrais donc utiliser des liens identifiants, comme ça je pourrais avoir un Numproduit modifiable, car la clé primaire sera (NumProduit, NumDepartement, NumCategorie) ??

Par exemple quelque chose de ce type en MCD :

PRODUIT(NumProduit, NumCategorie, NumDepart, ...) , CATEGORIE(NumCategorie,NumDepart, ...) , DEPARTEMENT(NumDepart, ...)

OU PLUTOT

PRODUIT(NumProduit,NumCategorie, NumDepart, ...) , CATEGORIE(NumCategorie,, ...) , DEPARTEMENT(NumDepart, ...)

Voila, de cette façon l'une ou l'autre, il me semble que je pourrais modifier mon NumProduit car un produit sera identifié par le département et le la catégorie. Par contre je ne vois pas bien la différence d'un point de vu codage entre mes deux solutions. Avec la première solution, Ma catégorie aura forcément un département correct ? Et on ne pourra pas ajouter un produit avec une catégorie et un département qui ne correspondent pas entre eux ?

Dites-moi si je ne suis pas clair :D

ViPHP
xTG
ViPHP | 7331 Messages

16 févr. 2011, 10:48

Avant de se lancer dans un MCD il serait bon de savoir quelles sont les contraintes.
Un même produit peut-il exister dans deux départements différents ?
Une catégorie appartient-elle à un département ?

jonathony
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 11:05

En fait,je connais bien les mcd mais je ne sais pas comment les insérer dans le forum =).

Mon Produit appartient à une seule catégorie et un seul département, et j'aimerais bien que catégorie aie justement une clé étrangère numDepartement comme ça quand j'ajoute un produit, je ne peux pas insérer une catégorie avec un département incorrect.
Donc ma catégorie correspond à un et un seul département.

Suis-je dans la bonne voie =)

Merci beaucoup de m'aider.

ViPHP
xTG
ViPHP | 7331 Messages

16 févr. 2011, 13:41

Il me semble donc que tu réponds de toi même à ta question quant aux relations à placer.

Cependant si tu souhaites toujours modifier le numéro du produit il faudra donc utiliser un numProduit qui ne sera pas clé et un identifiant qui sera clé primaire qui lui ne bougera pas afin d'éviter tout conflit.

jonathony
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 14:43

D'accord, je vais valider le post car je pense avoir toutes les réponses à mes questions.
Je vais donc faire un id + un numéro.

Bonne continuation et merci pour tout :priere: