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 dans table avec jointure


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut insertion dans table avec jointure
    Bien le bonjour à vous toutes et tous,

    j'ai sauté le pas, à force de vous lire je me suis inscris. Je débute donc par mon souci d'INSERT dans une table. A noter que je suis débutant

    Alors voilà, j'ai une table liste_pcs dans laquelle j'ai les champs ID (primary et auto-increment), j'ai mon champs nom_pc, et j'ai mon champs PC_OS. Mon autre table se nomme systeme_exploitation avec les champs ID (primary et auto-increment), et OS.

    Ma demande est "simple" en fait, je souhaite pouvoir attribuer l'ID correspondant à l'OS dans mon champs PC_OS.

    Je vous remercie tous par avance.

  2. #2
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Je ferais ça en 2 requêtes :
    - une pour sélectionner l'os que tu souhaites
    -> tu récupères le résultat de la requête dans une variable ($os par exemple)
    - une autre pour l'insertion
    -> tu utilises '$os'

    J'espère t'avoir éclairé

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par lou-03 Voir le message
    Bonjour,

    Je ferais ça en 2 requêtes :
    - une pour sélectionner l'os que tu souhaites
    -> tu récupères le résultat de la requête dans une variable ($os par exemple)
    - une autre pour l'insertion
    -> tu utilises '$os'

    J'espère t'avoir éclairé
    Bonjour à toi lou-03,

    Merci d'avoir répondu à ma demande.

    En fait, j'ai déjà ma première requête qui est de récupérer les infos des deux tables dans un menu déroulant. Ce que je souhaite maintenant, c'est que les deux choix effectués (le nom du pc et le systeme d'exploitation) soient enregistrés. Je souhaite faire un insert dans ma table liste_pcs de l'id correspondant dans ma table systeme_exploitation.

  4. #4
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    Ah ok, tu as déjà ta ligne dans liste-pcs et tu veux juste ajouter dans cette ligne le numéro choisi c'est ça?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par lou-03 Voir le message
    Ah ok, tu as déjà ta ligne dans liste-pcs et tu veux juste ajouter dans cette ligne le numéro choisi c'est ça?
    je veux que le choix du systeme d'exploitation (son id) s'insère dans ma table liste_pc dans le champs os_pc.

  6. #6
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    Dans ce cas tu as juste à faire un simple insert.
    Tu récupères ta valeur sélectionnée et tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into liste-pcs values ($nom_pc, $id_os);
    Si tu n'as pas l'id os dans ton menu déroulant il faudra faire une requête pour le récupérer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id from systeme_exploitation where Os='$nom_os';

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par lou-03 Voir le message
    Dans ce cas tu as juste à faire un simple insert.
    Tu récupères ta valeur sélectionnée et tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into liste-pcs values ($nom_pc, $id_os);
    Si tu n'as pas l'id os dans ton menu déroulant il faudra faire une requête pour le récupérer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id from systeme_exploitation where Os='$nom_os';
    je te montre mon code pour que tu m'indiques à quel endroit je peux mettre mes $nom_pc et $id_os :

    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
     
    <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
          <select name="PC">
    <?php
    try {
       $req = $bdd->query('SELECT * FROM nom_pc order by pc');
       while ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          echo '<option value="',htmlspecialchars($row['id']),'">',htmlspecialchars($row['pc']),'</option>\n'; 
       }
     
    }
    catch (PDOException $e) {
       echo $e->getMessage();
    }
     
    ?>
    <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
          <select name="OS">
    <?php
    try {
       $req = $bdd->query('SELECT * FROM systeme_exploitation order by os');
       while ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          echo '<option value="',htmlspecialchars($row['id']),'">',htmlspecialchars($row['os']),'</option>\n'; 
       }
    }
    catch (PDOException $e) {
       echo $e->getMessage();
    }
    if (isset($_POST['submit_update'])){
    	$req = $bdd->prepare('INSERT INTO nom_pc.pc_os
    	SET nom_pc.pc_os = systeme_exploitation.id');
    	$req->execute(array($_POST['OS']));
     }
    ?>
    <br>
     
    <br>
    <input type="submit" name="submit_update" />
    en sachant que mon INSERT n'est pas bon, je teste un peu tout ce que je trouve dans ma petite tête

    Pour tenter d'être clair, mon script me permet d'afficher indépendament ma liste de tous mes pcs dans un menu déroulant et ma liste de tous mes os dans un autre menu déroulant, et un bouton envoyer. C'est lorsque je clique sur ce bouton que cela devrait m'enregistrer dans ma table nom_pc dans le champs pc_os l'id de la table systeme_exploitation.
    Si je rentre manuellement un id dans mon champs pc_os, et que je fais une requête il me fait bien apparaitre mon nom_pc et mon os, c'est donc que ma jointure est correcte

  8. #8
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    hs mais en théorie tu dois être sûr de ce que tu as entré dans ta base et des variables d'environnement PHP donc a priori les htmlentities, htmlspecialchars sont inutiles. (les traitements/vérifs se font avant l'insertion dans la base)
    Sinon pour ton prob (pour info ça n'a rien à voir avec une jointure ) je crois que tu prépares mal ta requête (et tu te plantes dans le nom de table) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (isset($_POST['submit_update'], $_POST['OS'])){
    	$req = $bdd->prepare('INSERT INTO nom_pc SET nom_pc.pc_os = ?');
    	$req->execute(array($_POST['OS']));
     }
    (En fait, c'est plutôt le htmlentities($_SERVER['PHP_SELF']) qui m'a choqué mais y a peut-être une raison ^^)
    Vive les roues en pierre

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour et merci Djak,

    Ce que fait ton code c'est de rajouter des lignes dans ma table nom_pc sans mettre de valeur dans le champs pc mais en mettant bien un id dans le champs pc_os, au lien de modifier cette même table dans le champ pc_os. Je te mets ce que j'ai mis (ouais pas trop français cette phrase ) :

    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
     
    <div id="texte_corps"><br><br>
    <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
          <select name="PC">
    <?php
    try {
       $req = $bdd->query('SELECT * FROM nom_pc order by pc');
       while ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          echo '<option value="',htmlspecialchars($row['id']),'">',htmlspecialchars($row['pc']),'</option>\n'; 
       }
     
    }
    catch (PDOException $e) {
       echo $e->getMessage();
    }
     
    ?>
    <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
          <select name="OS">
    <?php
    try {
       $req = $bdd->query('SELECT * FROM systeme_exploitation order by os');
       while ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          echo '<option value="',htmlspecialchars($row['id']),'">',htmlspecialchars($row['os']),'</option>\n'; 
       }
    }
    catch (PDOException $e) {
       echo $e->getMessage();
    }
     
    if (isset($_POST['submit_update'], $_POST['OS'])){
    	$req = $bdd->prepare('INSERT INTO nom_pc SET nom_pc.pc_os = ?');
    	$req->execute(array($_POST['OS']));
     }
    ?>
    <br>
     
    <br>
    <input type="submit" name="submit_update" />
    pour ce qui est des htmlentities, htmlspecialchars je ne peux pas trop te dire, je me suis fait aider déjà pour l'affichage des données...

    Encore merci du temps passé sur mon cas, j'ai l'impression d'être un extra terrestre pour ma demande, je ne trouve nulle part une réponse appropriée

  10. #10
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    en fait tu veux insérer un enregistrement ou modifier un enregistrement ? (apparemment c'est modifier car tu passes l'id, j'avais pas vu ^^). Dans ce cas la première chose à faire et de ne faire qu'un seul formulaire, ensuite tu dois pouvoir faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['submit_update'], $_POST['OS'], $_POST['PC'])){
    	$req = $bdd->prepare('UPDATE nom_pc SET nom_pc.pc_os = ? WHERE id = ?');
    	$req->execute(array($_POST['OS'], $_POST['PC']));
     }
    ?>
    Vive les roues en pierre

  11. #11
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    Comme le dit Djackisback, si tu veux insérer dans ta table nom_pc il faut faire un update. Mais si tu veux l'insérer dans ta table liste_pcs (comme tu l'expliques sur ton premier post) là c'est un insert.

    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
     
    if (isset($_POST['submit_update'], $_POST['OS'],$_POST['PC']))
    {
       //tu récupères l'id de l'os choisi
       $osChoix = $_POST['OS'];
       $req = $bdd->query('SELECT id FROM systeme_exploitation where os='$osChoix');
       //if vu qu'il n'y a qu'un résultat
       if ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          $idOsChoix = $row['id'];
       }
     
        //tu récupères l'id du pc choisi
        $pcChoix = $_POST['pc'];
        $req = $bdd->query('SELECT id FROM nom_pcs where ton_champ_nom_pc='$pcChoix');
       //if vu qu'il n'y a qu'un résultat
       if ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          $idPcChoix = $row['id'];
       }
     
       //tu l'insères
        $req = $bdd->prepare('INSERT INTO liste_pcs VALUES('$idPcChoix','$idOSChoix');
       ... etc
     
       //ou tu met à jour ta table selon le cas
          $req = $bdd->prepare('UPDATE nom_pc SET pc_os = '$idOsChoix' WHERE id = '$idPcChoix');
        ... etc
     }
    J'espère que c'est assez clair

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par lou-03 Voir le message
    Comme le dit Djackisback, si tu veux insérer dans ta table nom_pc il faut faire un update. Mais si tu veux l'insérer dans ta table liste_pcs (comme tu l'expliques sur ton premier post) là c'est un insert.

    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
     
    if (isset($_POST['submit_update'], $_POST['OS'],$_POST['PC']))
    {
       //tu récupères l'id de l'os choisi
       $osChoix = $_POST['OS'];
       $req = $bdd->query('SELECT id FROM systeme_exploitation where os='$osChoix');
       //if vu qu'il n'y a qu'un résultat
       if ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          $idOsChoix = $row['id'];
       }
     
        //tu récupères l'id du pc choisi
        $pcChoix = $_POST['pc'];
        $req = $bdd->query('SELECT id FROM nom_pcs where ton_champ_nom_pc='$pcChoix');
       //if vu qu'il n'y a qu'un résultat
       if ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          $idPcChoix = $row['id'];
       }
     
       //tu l'insères
        $req = $bdd->prepare('INSERT INTO liste_pcs VALUES('$idPcChoix','$idOSChoix');
       ... etc
     
       //ou tu met à jour ta table selon le cas
          $req = $bdd->prepare('UPDATE nom_pc SET pc_os = '$idOsChoix' WHERE id = '$idPcChoix');
        ... etc
     }
    J'espère que c'est assez clair
    c'est très clair, c'est effectivement une modification et non un insert que je cherche à faire.
    Là c'est juste un souci, une bêtise très certainement, mais il me fait apparaitre la fin de mon code (mon bouton) en gris, il doit y avoir une "}" qui manque et je n'arrive pas à la placer correctement

    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
     
    <?php
    try {
       $req = $bdd->query('SELECT * FROM systeme_exploitation order by os');
       while ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          echo '<option value="',htmlspecialchars($row['id']),'">',htmlspecialchars($row['os']),'</option>\n'; 
       }
    }
    catch (PDOException $e) {
       echo $e->getMessage();
    }
     
    if (isset($_POST['submit_update'], $_POST['OS'],$_POST['PC']))
    	{
     
       $osChoix = $_POST['OS'];
       $req = $bdd->query('SELECT id FROM systeme_exploitation where os='$osChoix');
       
       if ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          $idOsChoix = $row['id'];
       }
        
        $pcChoix = $_POST['pc'];
        $req = $bdd->query('SELECT id FROM nom_pcs where ton_champ_nom_pc='$pcChoix');
     
       if ($row = $req->fetch(PDO::FETCH_ASSOC))
       {
          $idPcChoix = $row['id'];
       }
     
       $req = $bdd->prepare('UPDATE nom_pc SET pc_os = '$idOsChoix' WHERE id = '$idPcChoix');
    	 
    ?>
    <br>
     
    <br>
    <input type="submit" name="submit_update" />

  13. #13
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    C'était une quote qu'il manquait

    $osChoix = $_POST['OS'];
    $req = $bdd->query('SELECT id FROM systeme_exploitation where os='$osChoix' ');
    Si ça fait pareil met des " " à la place de ' ' autour de ta requête.

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par lou-03 Voir le message
    C'était une quote qu'il manquait



    Si ça fait pareil met des " " à la place de ' ' autour de ta requête.
    j'ai fait le ménage Par contre rien ne s'insère dans ma table nom_pc dans le champs pc_os

  15. #15
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    As-tu ajouté $req->execute(array($_POST['OS'], $_POST['PC'])); ?

    Ce n'est peut être pas ces champs qu'il faut mettre, je n'utilise pas les requêtes de cette manière. Mais je pense que c'est un ligne nécessaire pour exécuter ta requête ^^

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par lou-03 Voir le message
    As-tu ajouté $req->execute(array($_POST['OS'], $_POST['PC'])); ?

    Ce n'est peut être pas ces champs qu'il faut mettre, je n'utilise pas les requêtes de cette manière. Mais je pense que c'est un ligne nécessaire pour exécuter ta requête ^^
    oui je l'ai mis là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $req = $bdd->prepare("UPDATE nom_pc SET pc_os = '$idOsChoix' WHERE id = '$idPcChoix'");
    $req->execute(array($_POST['OS'], $_POST['PC']));
    mais résultat identique, aucune info n'est ajoutée dans ma table.

    EDIT : cela fonctionne parfaitement avec la solution de Djak! je ne comprend pas la différence entre les deux solutions, j'ai sincèrement l'impression qu'elles sont identiques, auriez vous l'amabilité extrème (je sais j'abuse ) de m'expliquer que je comprenne pourquoi du comment?

  17. #17
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    Essaye ta requête sur MySQL avec des valeurs existantes à la place des variables et voit si ça marche.

  18. #18
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    A priori ça c'est pas valide sous PDO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET pc_os = '$idOsChoix' WHERE id = '$idPcChoix'"
    Vive les roues en pierre

Discussions similaires

  1. Problème pour insertion dans tables avec jointure
    Par C3DRIC49 dans le forum Langage
    Réponses: 8
    Dernier message: 15/10/2010, 21h52
  2. Réponses: 4
    Dernier message: 09/06/2009, 14h20
  3. probleme d'insertion dans table avec cle secondaire
    Par pseudobidon57 dans le forum SQL
    Réponses: 1
    Dernier message: 01/06/2007, 13h46
  4. Réponses: 4
    Dernier message: 26/06/2006, 16h16
  5. insertion dans table avec plusieurs clés étrangères
    Par philippe281281 dans le forum Administration
    Réponses: 2
    Dernier message: 14/06/2006, 18h35

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