|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 11 ![]() |
Bonjour
Je souhaite mettre à jour des records à partir de php en faisant apparaitre le nom de la société et un nom (contact). j'ai d'abord une page (majmainframe.php) qui utilise une fonction d'édition du nom de la société dans la page majmainframe.php et qui me fait apparaître les champs à mettre à jour qui sont transmis par la méthode post à cli_mainframe.fr. Le problème rencontré est que la mise à jour écrase les lignes commençant par le même nom de société. Exemple Si j'ai : FORD (SOCIETE) TOTO (NOM) et : FORD (SOCIETE) TITI (NOM) j'aurai après la mise à jour du premier enregistrement deux records identiques et l'information du deuxième enregistrement aura disparu. FORD TOTO FORD TOTO Merci de l'aide que vous pouvez m'apporter PAGE majmainframe.php =======>>> form name="formmf" action="majmainframe.php" method="post"> Code :
Code :
|
||||
|
|
00
|
|
|
#2 |
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
Ce qui serait bien ce serait de garder l'ancienne valeur toto ou titi ou encore tata afin de l'inclure dans le where.
Mais coté construction de la bdd c'est pas top. Ce qu'il aura fallu c'est une tableau contenant tes sociétés, et une autre sur les infos concernant chaque société. Ce qui fait que tu aurais eu que l'id de l'élément à modifier et donc plus de problème d'écrasement. Par exemple :
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 11 ![]() |
Merci de ton retour et de tes commentaires. Tu as raison : la BDD est à revoir.
Je m'y emploie depuis hier mais ai quelques conseils à te demander pour la mettre en oeuvre dans mysql. Je définis une table "SOCIETE" avec ID_SOC clef primaire autoincrémenté et les autres champs (ADRESSE, VILLE, CP, etc) Une autre table "PERSONNEL" avec ID_PERS autoincrémenté et sauf erreur CLEF PRIMAIRE, NOM avec VARCHAR(255), ID-SOC. Stp, comment je définis ID-SOC?? clef primaire 2 (non incrémenté) et comment je lis les tables dans MYSQL4 Stp? |
|
|
00
|
|
|
#4 | |
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
Ce qu'il faudrait faire c'est mettre ID_PERS en PRIMARY KEY comme tu l'as déjà fait et mettre ID-SOC en
Citation:
|
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 11 ![]() |
Merci
J'ai du mal avec la syntaxe et je peux modifier chez online. J'ai rentré la syntaxe suivante mais ai été jeté : ALTER TABLE PERSONNEL ADD FOREIGN KEY REFERENCES SOCIETE (ID_SOC) où les tables sont selon ton exemple PERSONNEL et SOCIETE http://dev.mysql.com/doc/refman/5.0/...nstraints.html |
|
|
00
|
|
|
#6 | ||
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
Code :
![]() D'ailleurs si tu veux bien faire les choses il faudrait donner un nom à la contrainte dans le cas d'une probable supression |
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 11 ![]() |
Je l'aurais inséré avec plaisir dés le départ mais je bosse sur la base MYSQL que j'ai créé au travers de PHYMYSQL fourni par Online et lors de la création de la table, quand j'ai créé le champ ID_SOC dans la table PERSONNEL, mes options étaient de cocher "primaire" "index" "unique" et je n'ai pas vu de références à la création d'une Foreign Key.
Tout d'abord, encore merci. Faut t'il définir la FOREIGN KEY comme une clef primaire???ensuite si n'autoincrémente ID_SOC dans la table PERSONNEL, comment je maintiens mon N° par rapport à l'indice ID_SOC dans la table société?? ALTER TABLE PERSONNEL ADD FOREIGN KEY (ID_SOC) REFERENCES SOCIETE (ID_SOC) |
|
|
00
|
|
|
#8 |
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
La seul clé primaire que tu as dans PERSONNEL est l'id de la personne. Si tu veux que ton champ ID_SOC corresponde à celui de la table SOCIETE tu dois récupérer cet id afin de l'jouter dans ta requete d'insertion dans la bdd.
Si ta société n'existe pas tu dois l'insérer d'abord dans SOCIETE, récupérer son id et faire l'ajout dans PERSONNEL. ID_SOC de PERSONNEL est du type INT(11) tout comme il l'est dans SOCIETE sauf qu'il est pas auto-inc dans PERSONNEL |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 11 ![]() |
OK MERCI de la mise sur rail
Je suppose que cela "Si ta société n'existe pas tu dois l'insérer d'abord dans SOCIETE, récupérer son id et faire l'ajout dans PERSONNEL" se développe d'instructions SQL en utilisant PHP. Dommage que la technologie actuelle ne permette pas de maintenir un numéro unique dans toutes les tables à la fois. |
|
|
00
|
|
|
#10 |
|
Inactif
![]() Inscription : septembre 2004 Messages : 11 753 ![]() |
Pour éviter un select dans le cas d'un ajout de société il faudrait utiliser ceci : Comment connaître l'id auto_increment de mon dernier ajout ?
Tu pourrais faire un système de choix parmis le entreprise existante pour récupérer l'id si elle existe, et si elle existe pas tu ajoutes la possibilité d'ajouter une dans la table. Comme ça, ça pourrait éviter les recherches dans la bdd, recherche qui servirait à savoir si la société est déjà présente. Sinon de rien |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com