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 des données d'un formulaire dans une table contenant des clés étrangères


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut Insertion des données d'un formulaire dans une table contenant des clés étrangères
    Bonjour
    J'ai un formulaire que j'utilise pour envoyer les données dans la base de données. Dans ma table d'insertion, il y a les clés étrangères d'autres tables. Comment puis-je les ajouter ? Comment récupérer les valeurs des clés étrangères pour les insérer dans ma table ? Merci pour votre aide !

    Pour comprendre voici ma table d'insertion :
    Nom : 127.0.0.1   127.0.0.1   bdchu   consultations   phpMyAdmin 4.1.4.png
Affichages : 4474
Taille : 428,2 Ko

    Voici mon formulaire : formulaire2.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
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>CHU Evreux - Enregistrement patient</title>
      <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
      <link rel="stylesheet" href="style.css">
    </head>
     
    <body>
     
     
     
    <form class="form-search" method="post" action="traitement2.php">
     
     
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bdchu";
     
    // Create connection	  
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    //echo "Connected successfully"; 
    ?>
    <legend>Patients enregistrés	
    <select name="nompatient">
    		    <?php
    $sql1 = 'SELECT * FROM patients ';
    $result1 = $conn->query($sql1);
    if ($result1->num_rows > 0) {
     
    	echo ('<option value="Nom" selected=""> Selectionnez un patient</option>');
     
     while($donnees1 = $result1->fetch_assoc()) {
     
     
           echo ('<option value="'.$donnees1['IdPatient'].'">'.$donnees1['Nom'].'&nbsp;'.$donnees1['Prenom'].'</option>');
          }
     
     
     
    } 
    else {
        echo "0 results";
    }
    //$conn->close();
    ?>  
     
    </select>
    </legend><br>
    <!-- Bouton à supprimer il est inutile de valider le champ select -->
     
            <br>
     
     
    <legend>Services
     
    <select name="nomservice">
    		    <?php 
     
     
    $sql2 = 'SELECT * FROM services ';
    $result2 = $conn->query($sql2);
    if ($result2->num_rows > 0) {
     
     while($donnees2 = $result2->fetch_assoc()) {
     
     
           echo ('<option valeur="'.$donnees2['IdService'].'">'.$donnees2['NomService'].'</option>');
     
          }
     
    } 
    else {
        echo "0 results";
    }
    $conn->close();
     
    ?>
    </select>
    </legend><br>
     
     
    <label for="DateConsul">La date de consultation</label>
    <!-- Changer  datenaissance par DateConsul -->
           <input type="date" name="dateconsul" id="DateConsul"><br><br>
     
    <label for="HeureConsul">L'heure de la consultation</label>
    <!-- Changer  heureconsul par HeureConsul -->
           <input type="time" name="heureconsul" id="HeureConsul"><br><br>
     
    <label for="ButConsul">Motif de consultation:</label>
    <!-- Changer  butconsul par ButConsul -->
    	<textarea name="butconsul" id="ButConsul" rows="5" cols="15" ></textarea><br><br>
     
        <input type="submit" value="Envoyer" />
    </form>   
      <?php 
      //  include("footer.html");
      ?>
     
    </body>
     
    </html>
    Voici le fichier de traitement du formulaire : traitement2.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
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>CHU Evreux - Enregistrement patient</title>
      <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
      <link rel="stylesheet" href="style.css">
    </head>
     
    <body>
     
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bdchu";
     
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    //echo "Connected successfully"; 
     
    // On vérifie si la variable existe et sinon elle vaut NULL
    $n_patient = $_POST['nompatient'] ? $_POST['nompatient'] : NULL;
    $n_service = $_POST['nomservice'] ? $_POST['nomservice'] : NULL;
    $d_consul = $_POST['dateconsul'] ? $_POST['dateconsul'] : NULL;
    $h_consul = $_POST['heureconsul'] ? $_POST['heureconsul'] : NULL;
    $b_consul = $_POST['butconsul'] ? $_POST['butconsul'] : NULL;
     
    //$requete1="SELECT IdPatient FROM patients WHERE Nom ='$n_patient' ";
    //$requete2="SELECT IdService FROM services WHERE NomService ='$n_service' ";
     
    //$result1= $conn->query($requete1);
    //$result2=$conn->query($requete2);
     
     
    //if (($result1->num_rows > 0) && ($result2->num_rows > 0)) {
     
    	 //while($donnees1 = $result1->fetch_assoc()) {$id_patient=$donnees1['IdPatient'];} 
     
    	 //while($donnees2 = $result2->fetch_assoc()) {$id_service=$donnees2['IdService'];}
     
    function requete1()
    {
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bdchu";
    	// Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    echo "Connected successfully"; 
     
    // On vérifie si la variable existe et sinon elle vaut NULL
    $n_patient = $_POST['nompatient'] ? $_POST['nompatient'] : NULL;
     
    $sql = "SELECT IdPatient FROM patients WHERE Nom ='$n_patient' ";
    $result = $conn->query($sql);
     
     
     
    if ($result->num_rows > 0) {
        while($donnees = $result->fetch_assoc()) {
     
           $test=$donnees['IdPatient'];
    	   echo ($test);
       }
     
    } else {
        echo "0 results";
    }
    $conn->close();
     
    	return $test;
    }	 
     
    $te=requete1();
     
         $sql = 'INSERT INTO consultations (IdConsul, fk_IdPatient, DateConsul, HeureConsul, ButConsul) 
    VALUES("", "'.$te.'", "'.$d_consul.'" , "'.$h_consul.'", "'.$b_consul.'")';
        if ($conn->query($sql) === TRUE) {
        echo "les données ont bien étés insérées dans la base de données";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
     
    $conn->close(); 
    ?>
     
      <?php 
        //include("footer.html");
      ?>
     
    </body>
     
    </html>
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  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
    Ton formulaire renvoit déjà l'id de la table étrangère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="'.$donnees1['IdPatient'].'">
    Tu n'as donc pas à rechercher une correspondance à partir du nom comme tu essaies de le faire.

    De plus ne repête pas ta connexion partout, fais un fichier séparé que tu inclus une fois dans les pages ou tu as besoin de la connexion.
    Pour finir, il faut utiliser des requêtes préparées, pas mettre directement les valeurs du formulaire dans la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Ok mais j'aimerais récupérer cet IdPatient dans la requete d'insertion du fichier traitement2.php
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  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
    C'est ton $_POST['nompatient']. Tu as mis "nompatient" dans le "name" mais en "value" c'est bien l'id que tu as mis.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Je ne te comprend pas bien. En fait j'ai mis 'nompatient' dans le name pour récupérer les noms des patients dans ma liste déroulante de mon formulaire. Mais au moment de l'insertion, il me faut IdPatient. Et je ne sais pas comment récupérer l'IdPatient.
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  6. #6
    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
    Une liste déroulante "select" à un "name"
    Ce "name" est le nom de variable que tu vas recupérer dans $_POST. Donc dans mon exemple ça sera $_POST['toto']

    Ensuite dans le "select" tu as des valeurs et un libellé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="12345">abcdefg</option>
    C'est la "value" qui est envoyée. Le libellé "abcdefg" n'est pas transmis et sert uniquement à l'affichage.

    Donc dans mon exemple $_POST['toto'] vaudra "12345".

    Et dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <select name="nompatient">
    		...
            echo ('<option value="'.$donnees1['IdPatient'].'">'.$donnees1['Nom'].'&nbsp;'.$donnees1['Prenom'].'</option>');
    $_POST['nompatient'] vaudra $donnees1['IdPatient']

    Ca serait plus logique d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="IdPatient">
    et donc $_POST['IdPatient']
    mais ça ne change pas le fonctionnement, c'est toujours la "value" qui est importante.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Ok nickel ça marche pour IdPatient mais pas pour IdService

    Voici mon formulaire ajusté:
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>CHU Evreux - Enregistrement patient</title>
      <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
      <link rel="stylesheet" href="style.css">
    </head>
     
    <body>
     
     
     
    <form class="form-search" method="post" action="traitement2.php">
     
     
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bdchu";
     
    // Create connection	  
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    //echo "Connected successfully"; 
    ?>
    <legend>Patients enregistrés	
    <select name="IdPatient">
    		    <?php
    $sql1 = 'SELECT * FROM patients ';
    $result1 = $conn->query($sql1);
    if ($result1->num_rows > 0) {
     
    	echo ('<option value="Nom" selected=""> Selectionnez un patient</option>');
     
     while($donnees1 = $result1->fetch_assoc()) {
     
     
           echo ('<option value="'.$donnees1['IdPatient'].'">'.$donnees1['Nom'].'&nbsp;'.$donnees1['Prenom'].'</option>');
          }
     
     
     
    } 
    else {
        echo "0 results";
    }
    //$conn->close();
    ?>  
     
    </select>
    </legend><br>
    <!-- Bouton à supprimer il est inutile de valider le champ select -->
     
            <br>
     
     
    <legend>Services
     
    <select name="IdService">
    		    <?php 
     
     
    $sql2 = 'SELECT * FROM services ';
    $result2 = $conn->query($sql2);
    if ($result2->num_rows > 0) {
     
     while($donnees2 = $result2->fetch_assoc()) {
     
     
           echo ('<option valeur="'.$donnees2['IdService'].'">'.$donnees2['NomService'].'</option>');
     
          }
     
    } 
    else {
        echo "0 results";
    }
    $conn->close();
     
    ?>
    </select>
    </legend><br>
     
     
    <label for="DateConsul">La date de consultation</label>
    <!-- Changer  datenaissance par DateConsul -->
           <input type="date" name="dateconsul" id="DateConsul"><br><br>
     
    <label for="HeureConsul">L'heure de la consultation</label>
    <!-- Changer  heureconsul par HeureConsul -->
           <input type="time" name="heureconsul" id="HeureConsul"><br><br>
     
    <label for="ButConsul">Motif de consultation:</label>
    <!-- Changer  butconsul par ButConsul -->
    	<textarea name="butconsul" id="ButConsul" rows="5" cols="15" ></textarea><br><br>
     
        <input type="submit" value="Envoyer" />
    </form>   
      <?php 
      //  include("footer.html");
      ?>
     
    </body>
     
    </html>
    Voici mon fichier de traitement :
    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
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>CHU Evreux - Enregistrement patient</title>
      <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
      <link rel="stylesheet" href="style.css">
    </head>
     
    <body>
     
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bdchu";
     
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    //echo "Connected successfully"; 
     
    // On vérifie si la variable existe et sinon elle vaut NULL
    $id_patient = $_POST['IdPatient'] ? $_POST['IdPatient'] : NULL;
    $id_service = $_POST['IdService'] ? $_POST['IdService'] : NULL;
    $d_consul = $_POST['dateconsul'] ? $_POST['dateconsul'] : NULL;
    $h_consul = $_POST['heureconsul'] ? $_POST['heureconsul'] : NULL;
    $b_consul = $_POST['butconsul'] ? $_POST['butconsul'] : NULL;
     
     
         $sql = 'INSERT INTO consultations (IdConsul, fk_IdPatient, fk_IdService, DateConsul, HeureConsul, ButConsul) 
    VALUES("", "'.$id_patient.'", "'.$id_service.'",  "'.$d_consul.'" , "'.$h_consul.'", "'.$b_consul.'")';
        if ($conn->query($sql) === TRUE) {
        echo "les données ont bien étés insérées dans la base de données";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
     
    $conn->close(); 
    ?>
     
      <?php 
        //include("footer.html");
      ?>
     
    </body>
     
    </html>
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  8. #8
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Pour IdService, dans les options, tu as mis valeur à la place de value

  9. #9
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Super ça marche ! Merci Merci
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

Discussions similaires

  1. [Débutant] Souci insertion dans une table contenant 2 clés étrangères MySql/C#
    Par Mac Chouffe dans le forum C#
    Réponses: 15
    Dernier message: 17/06/2015, 16h29
  2. Réponses: 36
    Dernier message: 12/01/2015, 21h28
  3. Réponses: 0
    Dernier message: 07/11/2013, 15h39
  4. Réponses: 6
    Dernier message: 22/07/2013, 16h24
  5. Insertion de données d'un formulaire dans une table
    Par manu971 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/11/2007, 19h22

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