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 :

Insertion de données multi-tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut Insertion de données multi-tables
    bonjour,

    parfait débutant, j'essaie tant bien que mal de trouver une solution à mon problème:

    Prenons un exemple.
    Ma base de données comporte 3 tables :

    1- table "INVITATION" (ID, nom) / 2 - table "AMIS" (ID, nomAmis, texteA, invitationID (jointure à l'ID de "INVITATION")) / 3 - table "FAMILLE" (ID, nomFamille, texteB, invitationID (jointure à l'ID de "INVITATION")

    ...

    dans mon formulaire

    champ nom (table INVITATION)
    champ texteA (table AMIS)
    champ texteB (table FAMILLE)...


    lorsque je dois insérer les données dans ces différentes tables,

    1 - l'ID de la table INVITATION s'incrémente automatiquement
    2 - l'ID de mes autres tables aussi
    mais comment écrire que l'on veut que la valeur de l'invitationID doit être égale à ID de la table INVITATION ?

    Je suis perdu...

    merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu fais ton insertion dans invitation.
    Tu recuperes l'id autoincrementé avec mysql_last_insert_id().
    Et voila tu peux mettre l'id dans les autres tables.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    bonsoir,

    ceci est mon code, à quel moment dois-je inclure le mysql_last_insert_id()
    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
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "ajoutref")) {
      $insertSQL = sprintf("INSERT INTO invitation (nom, lieu, salle, heure) VALUES (%s, %s, %s, %s)",
                           GetSQLValueString($_POST['nom'], "text"),
                           GetSQLValueString($_POST['lieu'], "text"),
                           GetSQLValueString($_POST['salle'], "text"),
                           GetSQLValueString($_POST['heure'], "text"));
     
      mysql_select_db($database_interface_c14, $interface_c14);
      $Result1 = mysql_query($insertSQL, $interface_c14) or die(mysql_error());
     
      $insertGoTo = "../index.php";
      if (isset($_SERVER['QUERY_STRING'])) {
        $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
        $insertGoTo .= $_SERVER['QUERY_STRING'];
      }
      header(sprintf("Location: %s", $insertGoTo));
    }
     
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "ajoutref")) {
      $insertSQL = sprintf("INSERT INTO amis (nom, prenom, sex, invitationID) VALUES (%s, %s, %s, %s)",
                           GetSQLValueString($_POST['nom'], "text"),
                           GetSQLValueString($_POST['prenom'], "text"),
                           GetSQLValueString($_POST['sex'], "text"),
                           GetSQLValueString($_POST['invitationID'], "text"));
     
      mysql_select_db($database_interface_c14, $interface_c14);
      $Result1 = mysql_query($insertSQL, $interface_c14) or die(mysql_error());
     
      $insertGoTo = "../index.php";
      if (isset($_SERVER['QUERY_STRING'])) {
        $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
        $insertGoTo .= $_SERVER['QUERY_STRING'];
      }
      header(sprintf("Location: %s", $insertGoTo));
    }
    merci

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Entre
    Tu fais ton insertion dans invitation.
    et
    Et voila tu peux mettre l'id dans les autres tables.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    merci

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    rebonjour,

    LAST_INSERT_ID() marche très bien dans le cas d'une seule table reliée à une seule autre.
    Mais, dans le cas de plusieurs tables reliées à une seule ?

    Lorsque j'insère LAST_INSERT_ID() à une de ces tables, la table suivante insère l'ID de la table précédente... c'est ce que je voudrais éviter...

    j'ai autoincrémenté toutes mes tables... est-ce que je suis obligé de supprimer toutes mes incrémentations de toutes mes tables reliées sauf la première pour ne récupérer qu'un seul et unique ID?

    merci

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne comprends pas ce que tu veux dire : une fois que tu as l'id de ta premiere INSERTION, tu le mets dans autant de requêtes d'insertion sur les autres tables que tu veux.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    bonjour,

    ceci est ma première insertion. Celle d'où dépend l'ID générique.

    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
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "ajoutref")) {
      $insertSQL = sprintf("INSERT INTO doc_new (doc, marqueID, gammeID, clientID) VALUES (%s, %s, %s, %s)",
                           GetSQLValueString($_POST['doc'], "text"),
                           GetSQLValueString($_POST['marqueID'], "int"),
                           GetSQLValueString($_POST['gammeID'], "text"),
                           GetSQLValueString($_POST['clientID'], "int"));
     
      mysql_select_db($database_interface_c14, $interface_c14);
      $Result1 = mysql_query($insertSQL, $interface_c14) or die(mysql_error());
     
      $insertGoTo = "../index.php";
      if (isset($_SERVER['QUERY_STRING'])) {
        $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
        $insertGoTo .= $_SERVER['QUERY_STRING'];
      }
      header(sprintf("Location: %s", $insertGoTo));
    }
    ensuite, en insérant LAST_INSERT_ID() sur mes autres tables
    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
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "ajoutref")) {
      $insertSQL = sprintf("INSERT INTO comment_com (commentaireCom, heureCom, minuteCom, doc_newID) VALUES (%s, %s, %s, LAST_INSERT_ID())",
                           GetSQLValueString($_POST['commentaireCom'], "text"),
                           GetSQLValueString($_POST['heureCom'], "text"),
                           GetSQLValueString($_POST['minuteCom'], "text"),
                           GetSQLValueString($_POST['doc'], "text"));
     
      mysql_select_db($database_interface_c14, $interface_c14);
      $Result1 = mysql_query($insertSQL, $interface_c14) or die(mysql_error());
     
      $insertGoTo = "../index.php";
      if (isset($_SERVER['QUERY_STRING'])) {
        $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
        $insertGoTo .= $_SERVER['QUERY_STRING'];
      }
      header(sprintf("Location: %s", $insertGoTo));
    }
     
    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "ajoutref")) {
      $insertSQL = sprintf("INSERT INTO comment_exe (commentaireExe, iconeExe, heureExe, minuteExe, doc_newID) VALUES (%s, %s, %s, %s, LAST_INSERT_ID())",
                           GetSQLValueString($_POST['commentaireExe'], "text"),
                           GetSQLValueString($_POST['iconeExe'], "text"),
                           GetSQLValueString($_POST['heureExe'], "text"),
                           GetSQLValueString($_POST['minuteExe'], "text"),
                           GetSQLValueString($_POST['doc'], "text"));
     
      mysql_select_db($database_interface_c14, $interface_c14);
      $Result1 = mysql_query($insertSQL, $interface_c14) or die(mysql_error());
     
      $insertGoTo = "../index.php";
      if (isset($_SERVER['QUERY_STRING'])) {
        $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
        $insertGoTo .= $_SERVER['QUERY_STRING'];
      }
      header(sprintf("Location: %s", $insertGoTo));
    }
    l'ID de la table new_doc retournée dans la table comment_com est bonne
    mais dans la table comment_exe, c'est l'ID de la table comment-com qui est reprise et non celle de la table new_doc.

    Je ne suis pas surpris par ce comportement, puisqu'il est tout à fait logique dès l'instant que dans mes tables comment_com et comment_exe j'ai bien des ID.
    Ne faudrait-il pas les supprimer tout simplement de ces tables ? Ou quelque chose m'échappe ?

    merci

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je n'ai pas dit LAST_INSERT_ID mais mysql_last_insert_id(), la fonction PHP qui fait la meme chose sauf que c'est plus pratique pour mettre le resultat dans une variable.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2012, 00h35
  2. problème d'insertion de données dans table
    Par loic20h28 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 31/01/2008, 17h26
  3. insertion de données dans table mySQL
    Par kumo dans le forum ASP
    Réponses: 13
    Dernier message: 18/12/2007, 21h34
  4. [MySQL] Problème insertion de données dans table Mysql
    Par Malcolm78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/10/2007, 17h25
  5. [MySQL] Problème d'insertion de données dans table d'associations
    Par Yukhaa dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 07/02/2006, 17h10

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