Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/09/2006, 15h49   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 11
Points : 3
Points : 3
Par défaut [Conception] Update records écrasent plusieurs lignes

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 <div align="center">
<table border="0" width="30%">
  <tr>
    <td width="100%" colspan="12"><b><font color="#FF0000">Rechercher le client</font></b></td>
  </tr>
  <tr>
   <td width="20%" style="border-style: solid; border-color: #FF0000">
 
               <?php 
               lister2(mainframe,SOCIETE,lsociete,10); 
            $requete="select SOCIETE,ADR1,ADR2,VILLE,CP,CIVILITE,NOM,PRENOM,FONCTION,TEL,FAX,EMAIL,DATE,COMMENTAIRES,CC
                    from mainframe where SOCIETE='$lsociete' order by SOCIETE"; 
              $resultat=mysql_query($requete) or die("requete echouee:<br>".mysql_error());
            $result=mysql_fetch_row($resultat);
            ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="submit" value="ok" style="background-color: #0000FF; color: #FFFFFF; font-weight: bold; border: 3 solid #000080; padding-left: 7; padding-right: 7">  
    </td>
  <tr>  
 </form>
</table>
</div>
 
 
<form name="form_cli_mf" action="cli_mainframe.php" method="post">
 
<table border="0" width="100%" >
  <tr>     
    <td width="100%" align="center" colspan="4"><b>SOCIETE</b></td>
  </tr> 
  <tr>
       <td width="100%" colspan="4"><center><input name="societe" size="120" value="<?php echo "$societe$result[0]"; ?>" onFocus="this.select()"></center></td>
  </tr> 
  <tr>
    <td width="40%" align="center"><b>ADR1</b></td>
    <td width="40%" align="center"><b>ADR2</b></td>
    <td width="15%" align="center"><b>VILLE</b></td>
    <td width="5%" align="center"><b>CP</b></td>
 
  </tr>
  <tr>
      <td width="40%"><center><input name="adr1" size="40" value="<?php echo "$adr1$result[1]"; ?>" onFocus="this.select()"></center></td>
    <td width="40%"><center><input name="adr2" size="40" value="<?php echo "$adr2$result[2]"; ?>" onFocus="this.select()"></center></td>
   <td width="15%"><center><input name="ville" size="40" value="<?php echo "$ville$result[3]"; ?>" onFocus="this.select()"></center></td>
   <td width="5%"><center><input name="cp" size="10" value="<?php echo "$cp$result[4]"; ?>" onFocus="this.select()"></center></td>
  </tr>
  <tr>
      <td width="2%" align="center"><b>CIVILITE</b></td>
    <td width="29%" align="center"><b>NOM</b></td>
    <td width="20%" align="center"><b>PRENOM</b></td>
    <td width="49%" align="center" colspan="2"><b>FONCTION</b></td>
  </tr>
  <tr>  
     <td width="2%"><center><input name="civilite" size="5" value="<?php echo "$civilite$result[5]"; ?>" onFocus="this.select()"></center></td>
    <td width="29%"><center><input name="nom" size="40" value="<?php echo "$nom$result[6]"; ?>" onFocus="this.select()"></center></td>
    <td width="20%"><center><input name="prenom" size="40" value="<?php echo "$prenom$result[7]"; ?>" onFocus="this.select()"></center></td>
    <td width="49%"><center><input name="fonction" size="50" value="<?php echo "$fonction$result[8]"; ?>" onFocus="this.select()"></center></td> 
  </tr>
  <tr>
      <td width="20%" align="center"><b>TEL</b></td>
    <td width="20%" align="center"><b>FAX</b></td>
    <td width="30%" align="center"><b>EMAIL</b></td>
    <td width="30%" align="center" colspan="2"><b>dérnière mise à jour effectuée le:</b></td>
  </tr>
  <tr>
      <td width="20%"><center><input name="tel" size="35" value="<?php echo "$tel$result[9]"; ?>" onFocus="this.select()"></center></td>
    <td width="20%"><center><input name="fax" size="35" value="<?php echo "$fax$result[10]"; ?>" onFocus="this.select()"></center></td>
    <td width="30%"><center><input name="email" size="40" value="<?php echo "$email$result[11]"; ?>" onFocus="this.select()"></center></td>
    <td width="30%"><center><input name="last_modif" size="20" style="border-style: solid; border-color: #FFFFFF" value="<?php echo "$der_date$result[12]"; ?>" onFocus="this.select()"></center></td>
      <?php echo "<input type=\"hidden\" name=\"ste\" value=\"$lsociete\">"; ?>
  </tr>
  <tr>
  <td width="20%" align="center"><b>COMMENTAIRES</b></td>
    <td width="20%" align="center"><b>CODE</b></td>
  </tr>
  <tr>
      <td width="20%"><center><input name="commentaires" size="35" value="<?php echo "$commentaires$result[13]"; ?>" onFocus="this.select()"></center></td>
    <td width="20%"><center><input name="cc" size="35" value="<?php echo "$cc$result[14]"; ?>" onFocus="this.select()"></center></td>
  </tr>
 
 
 
</table>
PAGE cli_mainframe.php================>>>

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 if ($bouton=="CREER")
{        
        // insertion du nouvel enreg
        echo "$last_code_cli[0]";
        $requete="INSERT INTO
        mainframe(SOCIETE,CIVILITE,NOM,PRENOM,FONCTION,TEL,EMAIL,FAX,ADR1,ADR2,CP,VILLE,DATE,LOGIN,COMMENTAIRES,CC)
        VALUES('$societe','$civilite','$nom','$prenom','$fonction','$tel','$email','$fax','$adr1','$adr2','$cp','$ville','$date','$login','$commentaires','$cc')";
 
        $verif = mysql_query($requete,$id_connex);
 
        if ($verif)
            {echo "client $nom créé";}
 
        else {echo "Insertion impossible erreur N° ",
            mysql_errno(),mysql_error();}
 
}        
else
{
        // mise à jour de la table clients
 
        $requete="UPDATE mainframe SET SOCIETE='$societe',CIVILITE='$civilite', NOM='$nom', PRENOM='$prenom', FONCTION='$fonction', TEL='$tel',
        EMAIL='$email', FAX='$fax', ADR1='$adr1', ADR2='$adr2', CP='$cp', VILLE='$ville', DATE='$date', LOGIN='$login', COMMENTAIRES='$commentaires', CC='$cc'
        where SOCIETE='$ste'";
        $verif = mysql_query($requete,$id_connex);
 
        if ($verif)
            {echo "client $societe mis à jour";}
        else {echo "Insertion impossible erreur N° ",
            mysql_errno(),mysql_error();}
}
JLDR69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2006, 16h35   #2
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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 :
  • Table Société : SOC_ID auto-incrémenté (id de la société) et NOM VARCHAR(255) pour le nom de la société.
  • Table Personne(l) : P_ID auto_inc (id de la personne), SOC_ID faisant référence à la société, et le reste de tes champs
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 14h22   #3
Invité de passage
 
Inscription : septembre 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 11
Points : 3
Points : 3
Par défaut Construction de la BDD MYSQL

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?
JLDR69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 17h19   #4
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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:
FOREIGN KEY REFERENCES SOCIETE(ID_SOC)
Histoire du lui dire que si on a pas d'id de société alors on ne peut insérer dans la table personnel (vu qu'elles sont liées)
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 17h56   #5
Invité de passage
 
Inscription : septembre 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 11
Points : 3
Points : 3
Par défaut Syntaxe Sql

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
JLDR69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 18h07   #6
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Code :
1
2
 ALTER TABLE PERSONNEL
    ADD FOREIGN KEY (ID-SOC) REFERENCES SOCIETE (ID_SOC)
Ce que j'avais donné était à inclure dans le code de création de la table

D'ailleurs si tu veux bien faire les choses il faudrait donner un nom à la contrainte dans le cas d'une probable supression
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 18h38   #7
Invité de passage
 
Inscription : septembre 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 11
Points : 3
Points : 3
Par défaut FOREIGN KEY nécessite t'elle UNE PRIMARY KEY?

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)
JLDR69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 18h44   #8
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 19h03   #9
Invité de passage
 
Inscription : septembre 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 11
Points : 3
Points : 3
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.
JLDR69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 19h13   #10
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h23.


 
 
 
 
Partenaires

Hébergement Web