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 deux tables avec une clé étrangère


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 10
    Points
    10
    Par défaut insertion dans deux tables avec une clé étrangère
    bonsoir jai un problème dans mon formulaire pour insérer les données voila je vous explique j'ai une table utilisateur et table reservation dans la table reservation j'ai la clé étrangère celle de clé primaire utilisateur
    donc je veux insérer des données pour réserver un véhicule voila mes tables


    Code sql : 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
    CREATE TABLE IF NOT EXISTS `utilisateur` (
      `idutil` tinyint(4) NOT NULL AUTO_INCREMENT,
      `nom` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
      `prenom` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
      `email` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
      `numtel` int(20) NOT NULL,
      PRIMARY KEY (`idutil`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
     
     
    CREATE TABLE IF NOT EXISTS `reservation` (
      `idreservation` tinyint(4) NOT NULL AUTO_INCREMENT,
      `dateD` datetime NOT NULL,
      `dateF` datetime NOT NULL,
      `idutil` tinyint(4) NOT NULL,
      PRIMARY KEY (`idreservation`),
      KEY `idclient` (`idutil`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
     
     
    -- Contraintes pour la table `reservation`
     
    ALTER TABLE `reservation`
      ADD CONSTRAINT `reservation_ibfk_3` FOREIGN KEY (`idutil`) REFERENCES `client` (`idutil`),
      ADD CONSTRAINT `reservation_ibfk_4` FOREIGN KEY (`idreservation`) REFERENCES `reservation` (`idutil`);


    quand je veux envoyer réserver je replis mon formulaire pour insérer mes données ya des erreur qui s'affiche concernant la clé étrangère idutil voila ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
      if (isset($_POST['envoyer'] ))
    {
    mysql_query("INSERT INTO utilisateur (nom,prenom,email,numtel) VALUES ('".$_POST['nom']."','".$_POST['prenom']."','".$_POST['email']."','".$_POST['numtel']."')") or die (mysql_error());
    mysql_query("INSERT INTO reservation(dateD,dateF) VALUES ('".$_POST['dateD']."','".$_POST['dateF']."')") or die (mysql_error());//renvoiyer les resultat du mysql au serveur web (mysql_query)
     
    }
     ?>
    j'arrive pa à faire lié la clé étrangère a l'autre table c'est a dire comment faire une insertion avec deux table qui contient une clè étrangère merci a vous

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonjour,

    pourquoi mettre idreservation en clé étrangère sur la colonne iduti de la même table ? Tu ne voulait pas plutôt la mettre en primary key ?

    Ta requête plante car tu ne met pas un iduti valide dans la seconde requête, tu n'en met carrément pas, donc MySQL tu dit que tu à une erreur de contrainte, clé étrangère qui ne référence pas un utilisateur valide.
    une réponse vous a permis d'avancer ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    bonjour merci pour votre réponse, mais je n'es pas mets id reservation comme une clé étrangère j'ai que idutil une clé étrangère
    et je ne sais pas comment mettre id util dans la deuxième requête

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    tu n'insères pas idutil dans ta 2ème requête alors qu'elle doit être non nulle.
    Pour insérer idutil correspondant à l'utilisateur récemment inséré tu peux utiliser la fonction mysql_insert_id().
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
      if (isset($_POST['envoyer'] ))
    {
    mysql_query("INSERT INTO utilisateur (nom,prenom,email,numtel) VALUES ('".$_POST['nom']."','".$_POST['prenom']."','".$_POST['email']."','".$_POST['numtel']."')") or die (mysql_error());
     
    mysql_query("INSERT INTO reservation(dateD,dateF, idutil) VALUES ('".$_POST['dateD']."','".$_POST['dateF']."','".mysql_insert_id() ."')") or die (mysql_error());//renvoiyer les resultat du mysql au serveur web (mysql_query)
     
    }
     ?>

    retire idreservation comme clé étrangère:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE reservation
        DROP FOREIGN KEY  idreservation;

  5. #5
    Membre à l'essai
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    bonjour merci pour votre réponse j'ai essayé de supprimer la clé étrangère idresevation car c'est une clé primaire de la table reservation c'est une erreur et j'ai essayé de modifier le code voila ce que j'ai mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
      if (isset($_POST['envoyer'] ))
    {
     
    mysql_query("INSERT INTO util (idutil,nom,prenom,email,numtel) VALUES ('','".$_POST['nom']."','".$_POST['prenom']."','".$_POST['email']."','".$_POST['numtel']."')") or die (mysql_error());
     
    $resid= mysql_insert_id();
     
    mysql_query("INSERT INTO reservation(idreservation,dateD,dateF,idutil) VALUES ('','".$_POST['dateD']."','".$_POST['dateF']."','$resid')") or die (mysql_error());//renvoiyer les resultat du mysql au serveur web (mysql_query)
    }
     ?>
    mais j'ai toujour l'erreur suivante :
    Cannot add or update a child row: a foreign key constraint fails (`bdd`.`reservation`, CONSTRAINT `reservation_ibfk_8` FOREIGN KEY (`idreservation`) REFERENCES `reservation` (`idutil`))
    et je ne comprends pas c'est quoi le problème?

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 9
    Points
    9
    Par défaut INSERSION
    BONSOIR POUR TOUT LE MONDE,Pouvez-vous m'aider?
    jai un problème pour insérer les données voila je vous explique j'ai une table Filière(Cod_Fil,Intitulé) et table Spécialité(Cod_Spe,spécialité et la clé étrangère (Cod_Filàcelle de clé primaire Filiere)
    donc je veux insérer des données .

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    BONSOIR POUR TOUT LE MONDE
    Bonsoir

    Pouvez-vous m'aider?
    Non car tu repars d'un post existant.. créer le tien et on verra ce qu'on peut faire... Et profite en pour détailler un peu plus ton problème, car malheureusement nos boules de cristal qui devaient arriver cette semaine sont un peu à la bourre du coup on arrive par à deviner de quoi tu parles quand tu dis "j'ai un problème".
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 9
    Points
    9
    Par défaut
    la table de Filiere:

    Cod_Fil Intitulé
    1 doctorat
    2 master
    3 licence

    la table de spécialité:
    Cod_spe Specialité Cod_Fil
    je veut inserer des donnes a la table Specialité qui contient la clé etrangere (Cod_Fil) a partire d'une liste deroulante

    Code html : 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
       <form method="POST" action="insert_Specialite.php">
           <center>
     
        specialité  :            <input type="text" name="specialité" size="20"><br>
    <select>
        <optgroup>
            <option>1</option>
            <option>2</option>
            <option>3</option>
        </optgroup>
    	<optgroup>
            <option>Doctorat</option>
            <option>Master</option>
            <option>Licence</option>
        </optgroup>
    </select>
    </form>
          <center><input type="image" src="button.png"></center>
           </center>
           </form>

  9. #9
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    corrige d'abord le formulaire
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <select name="...">
    <optgroup>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </optgroup>
    <optgroup>
    <option value="...">Doctorat</option>
    <option value="...">Master</option>
    <option value="...">Licence</option>
    </optgroup>
    </select>

    ensuite crée ton propre sujet dans le forum, comme Spartacusply te la signalé, et met plus de détails sur ton problème.
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 9
    Points
    9
    Par défaut
    je suis une débutante dans php,et je veux insérer dans une table qui contient une clé étrangère.
    je veux comme ça:
    quand je choisi la filière qui appartient au table filière (comme licence)je veux met dans la table spécialité : cod_fil de licence (3)

    table Filière:
    Cod_Fil Intitulé
    1 Doctorat
    2 Master
    3 Licence




    table Specialité:

    Cod_Spe Spécialité Cod_Fil
    1 ISI 3
    1 MC 2


    j'utilise les listes déroulante ou la fonction update ou bien les deux ?
    merci beaucoup

  11. #11
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    va voir ici, j'ai donné une petite explication sur les clefs étrangères et leurs utilités: http://www.developpez.net/forums/d14...e/#post7735451
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 9
    Points
    9
    Par défaut
    j'ai essaye d'écrire ce programme la, mais quand j'ajoute le Cod_Fil reste toujours un zero et ne change plus:
    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
    <?php
          $db = mysql_connect('127.0.0.1', 'root', '')  or die('Erreur de connexion '.mysql_error());
     
        mysql_select_db('gestion')  or die('Erreur de selection '.mysql_error());
     
    echo"<u><b><big><i>Vous devez remplir tous les champs!<i></big></b></u><br>";
    if(isset($_POST['intitule'])){
    if($_POST['intitule']!=""  )
    $intitule=addslashes($_POST['intitule']);
    $compte=mysql_fetch_array(mysql_query("select count(*) as nb from specialité where intitule='$intitule' "));
         if($compte['nb']>0){
    	 ?><SCRIPT LANGUAGE="Javascript">alert("erreur! Cette specialite existe déja ");</SCRIPT><?php
     
    	}
    	else {
                        // on écrit la requête sql
                  $sql =("INSERT INTO specialité VALUES('','$intitule','$')");
     
                      // on insère les informations du formulaire dans la table
    		         if($intitule!="")
                  mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
     
                     // on affiche le résultat pour le visiteur
                       echo 'Vos infos on ete ajoutees.';
     
                     // on ferme la connexion
    			  mysql_close();	
    }}?>
    	   <form method="POST" action="insert_Specialite.php">
           <center>
     
         intitule   :            <input type="text" name="intitule" size="20"><br>
     
    <select name="...">
    <optgroup>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </optgroup>
    <optgroup>
    <option value="Doctorat">Doctorat</option>
    <option value="Master">Master</option>
    <option value="Licence">Licence</option>
    </optgroup>
    </select>
          <center><input type="image" src="button.png"></center>
           </center>
           </form>

Discussions similaires

  1. Lier deux tables avec une clé étrangère
    Par Ruy Blas dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/06/2013, 08h48
  2. Réponses: 1
    Dernier message: 23/12/2009, 13h17
  3. Insertion dans deux tables
    Par safiot85 dans le forum SQL
    Réponses: 13
    Dernier message: 05/12/2007, 23h14
  4. Insertion dans plusieurs table avec un index commun
    Par irongomme dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2007, 11h41
  5. insertion dans deux tables
    Par bidule123456 dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/08/2007, 08h19

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