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

 MySQL Discussion :

Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table [MySQL-5.1]


Sujet :

MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    Bonjour à tous,

    J'ai fais un formulaire avec une table (user)où je peux rentrer un nom, prenom, email, etc....

    Pour ajouter les valeurs de cette table dans la base de données je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = 'INSERT INTO table VALUES("", "'.mysql_escape_string(htmlspecialchars($_POST['nom'])).'", "'.mysql_escape_string(htmlspecialchars($_POST['prenom'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['mail'])).'"  )';
    																mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
    Jusque là tout va bien!

    Ensuite je fais une autre requête pour une autre table (dossiers) liée avec user.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql1 = 'INSERT INTO table VALUES("", "'.mysql_escape_string(htmlspecialchars($_POST['compt'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['etabl'])).'" )';
    																mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br />'.mysql_error());
    Je souhaites recuperer l'id_user pour le mettre dans la table dossiers pour faire une table relationnel... si quelqu'un pouvait m'aider? merci


    Bonne journée,

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Après avoir effectué l'insert dans la table mère, affectez la valeur du LAST_INSERT_ID comme identifiant de FK dans la table fille

    cf. https://dev.mysql.com/doc/refman/5.7...last-insert-id

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaites récuperer l'id d'un utilisateur pour le mettre dans une autre table
    Mais je dois faire avec le select où je peux éviter le select et faire directement dans insert??

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Bonjour,

    il est possible de passer par PHP en utilisant mysql_insert_id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_query("INSERT INTO mytable (product) values ('kossu')");
    printf("Le dernier ID inséré dans est le id %d\n", mysql_insert_id());
    Remarque : préférez mysqli_* à mysql_*.
    Christophe

    Pensez à mettre quand c'est le cas.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    J'ai testé mais il me marque le dernier id inséré est égale à 0.....

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Communiquez le script complet, de l'insertion dans la table mère, jusqu'à l'insertion dans la table fille incluse

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    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
    if ((!empty($_POST['nom'])) && (!empty($_POST['prenom'])) && (!empty($_POST['mail'])) && (!empty($_POST['etabl'])) && (!empty($_POST['com'])) && (!empty($_POST['mess'])) && (!empty($_POST['compt'])))
    															{
     
     
    																$sql = 'INSERT INTO user VALUES("", "'.mysql_escape_string(htmlspecialchars($_POST['nom'])).'", "'.mysql_escape_string(htmlspecialchars($_POST['prenom'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['mail'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['etab'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['mess'])).'", "'.mysql_escape_string(htmlspecialchars($_POST['com'])).'"  )';
     
    																$lastId = mysql_insert_id();
    																echo 'Le dernier ID inséré est ', $lastId;
     
    																mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
     
     
     
     
     
     
    																$sql1 = 'INSERT INTO dos VALUES("", "'.mysql_escape_string(htmlspecialchars($_POST['compt'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['etabl'])).'", "'.$lastId.'" )';
    																mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br />'.mysql_error());
     
     
     
     
     
    															}
     
    															else
     
    															{
     
    																//echo "Erreur";
     
    															}

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Vous cherchez le dernier id avant de lancer la requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = 'INSERT INTO user VALUES("", "'.mysql_escape_string(htmlspecialchars($_POST['nom'])).'", "'.mysql_escape_string(htmlspecialchars($_POST['prenom'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['mail'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['etab'])).'" , "'.mysql_escape_string(htmlspecialchars($_POST['mess'])).'", "'.mysql_escape_string(htmlspecialchars($_POST['com'])).'"  )';
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
    $lastId = mysql_insert_id();
    echo 'Le dernier ID inséré est ', $lastId;
    Christophe

    Pensez à mettre quand c'est le cas.

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    Ah oui je viens de le voir à l'instant....j'ai testé et ça marche, merci!!!!

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    j'ai resté et ça ne fonctionne plus...

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Vérifiez votre script à nouveau, il a certainement été modifié, il est certain que si vous tentez de récupérer la valeur avant même d'avoir exécuté l'ordre SQL ça fonctionne moins bien

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    Non là j'ai bien séparé mais pour les conditions if, je dois en mettre sur le seconde requete ou pas?

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Je ne comprends pas la question.
    Christophe

    Pensez à mettre quand c'est le cas.

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    Sur la premiere requete insert ... j'ai mis des if ((!empty($_POST['nom'])) etc... faut-il que pour la seconde requete je mettes aussi des if?

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    La seconde requête est déjà dans le if, il est donc inutile de remettre le if.
    Cette question m'inquiète. Comprenez-vous le code que vous nous avez montré ?
    Christophe

    Pensez à mettre quand c'est le cas.

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    Ah oui dans l'exemple que j'ai mis sur le site effectivement les deux requetes sont dans le if mais cette façon de faire ne marche pas....j'ai donc fais deux if avec deux requetes Insert.
    La premiere qui rentre le nom, prenom, etc dans user et la seconde qui recupere le dernier id de la table user dans la table dossier....

  17. #17
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut Marc31.

    Citation Envoyé par Marc31
    Jusque là tout va bien!
    Pas vraiment !

    Quand vous construisez une requête comme vous le faites, décomposez les étapes au lieu de vouloir tout faire en même temps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $nom    = mysqli_escape_string(htmlspecialchars($_POST['nom']));
    $prenom = mysqli_escape_string(htmlspecialchars($_POST['prenom']));
    $mail   = mysqli_escape_string(htmlspecialchars($_POST['mail']));
     
    $sql1 = 'INSERT INTO `user` (`nom`,`prenom`,`mail`) values ('''.$nom.''','''.$prenom.''','''.$mail.''');';
     
    mysqli_query($sql1) or die('Erreur SQL !'.$sql1.'<br />'.mysqli_error());
    C'est surtout plus lisible et plus compréhensible pour quelqu'un qui va faire de la maintenance par la suite !
    Et faire de même pour la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $compt = mysqli_escape_string(htmlspecialchars($_POST['compt']));
    $etabl = mysqli_escape_string(htmlspecialchars($_POST['etabl']));
     
    $sql2 = 'INSERT INTO `dossier` (`compt`,`etabl`) VALUES ('''.$compt.''','''.$etabl.''');';
     
    mysqli_query($sql2) or die('Erreur SQL !'.$sql.'<br />'.mysqli_error());
    Pour récupérer l'identifiant, il faut que votre colonne "id" dans la table "user" soit déclaré ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `id` integer unsigned not null auto_increment primary key,
    Pourquoi ? Car si vous ne dites pas à MySql que la colonne est auto incrémenté, il ne peut pas ni l'auto incrémenté et encore moins vous retourner la dernière valeur.

    Voici le résultat de votre demande :
    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
    $nom    = mysqli_escape_string(htmlspecialchars($_POST['nom']));
    $prenom = mysqli_escape_string(htmlspecialchars($_POST['prenom']));
    $mail   = mysqli_escape_string(htmlspecialchars($_POST['mail']));
    
    $sql1 = 'INSERT INTO `user` (`nom`,`prenom`,`mail`) values ('''.$nom.''','''.$prenom.''','''.$mail.''');';
    
    mysqli_query($sql1) or die('Erreur SQL !'.$sql1.'<br />'.mysqli_error());
    
    $lastId = mysqli_insert_id();
    echo 'Le dernier ID inséré est ', $lastId;
     
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
    																
    $compt = mysqli_escape_string(htmlspecialchars($_POST['compt']));
    $etabl = mysqli_escape_string(htmlspecialchars($_POST['etabl']));
    
    $sql2 = 'INSERT INTO `dossier` (`id`,`compt`,`etabl`) VALUES ('.$lastid.', '''.$compt.''','''.$etabl.''');';
    
    mysqli_query($sql2) or die('Erreur SQL !'.$sql.'<br />'.mysqli_error());
    J'ai mis en rouge la modification de la seconde requête afin d'insérer la dernière valeur de votre identifiant.

    Pour l'écriture de votre code php/mysql, je vous conseille de passer à la forme PDO qui est plus rigoureuse.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  18. #18
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Je souhaite récuperer l'id d'un utilisateur pour le mettre dans une autre table
    Merci pour votre aide, ça marche nickel!!

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

Discussions similaires

  1. Récupérer id utilisateur dans une autre table sql
    Par mjerem34 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 26/08/2015, 15h26
  2. [AC-2000] Récupérer NOM Utilisateur pour l'écrire dans une table
    Par goupil14 dans le forum Sécurité
    Réponses: 3
    Dernier message: 17/01/2010, 20h31
  3. Réponses: 4
    Dernier message: 22/05/2007, 14h42
  4. Réponses: 8
    Dernier message: 27/01/2007, 13h44
  5. Réponses: 5
    Dernier message: 12/08/2006, 00h36

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