IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Conception] Update records écrasent plusieurs lignes


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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();}
    }

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    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?

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    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
    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)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    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

  6. #6
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    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)

  8. #8
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    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

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    Par défaut
    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.

  10. #10
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sqlloader - import de records sur plusieurs lignes
    Par Vincent_D dans le forum SQL*Loader
    Réponses: 8
    Dernier message: 16/07/2007, 10h55
  2. Réponses: 2
    Dernier message: 09/04/2007, 10h21
  3. Update sur plusieurs lignes
    Par JOUCHET dans le forum Oracle
    Réponses: 1
    Dernier message: 20/05/2006, 18h37
  4. update simultané de plusieur lignes dans table
    Par jarod_bx dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2005, 22h13
  5. Réponses: 2
    Dernier message: 10/05/2005, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo