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 dans 3 tables liées [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Par défaut Insertion de données dans 3 tables liées
    Voilà, je dispose de trois tables en relation avec les champs suivants: cours (id_cours, nom_cours) ; chapitres (id_chapitre, nom_chapitre, num_chapitre, id_cours, id_contenu) ; contenu (id_contenu, text_contenu, date_creation, date_modification) ;
    Et je voudrais faire une requête pour insérer les données dans ces trois tables en relation et là suis planté ! Si quelqu’un pouvait m’aider ????

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    faites 3 insert différents ?

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    1) Insérer dans la table cours et récupérer l'identifiant auto-incrémenté (mysql_insert_id en PHP).
    2) Idem avec la table contenu.
    3) Insérer dans la table chapitres en utilisant les identifiants récupérés.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre confirmé
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Par défaut
    J'apprécie bien ton aide CinePhil mais j'avoue là suis vraiment planté par ce que je ne sais pas me servir de cette fonction ou propriété (mysql_insert_id en PHP) et un exemple avec les codes pour mon cas m'aidera beaucoup!
    Et pour ce qui est de la proposition de punkoff j'y avait pensé mais sa ne ma pas donné le résultat es-conte par ce que les clefs étrangères (id_cours, id_contenu) de la table chapitre étaient tous null (ont pris pour valeur 0) voici mon code:
    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
    <?php
    $contenu=$_POST['editor1'];
    $ncours=$_POST['ncours'];
    $nchapitre=$_POST['nchapitre'];
    $numchapitre=$_POST['numchapitre'];
    $today=date('y-m-d,h-m-s');
    $datemod=date('y-m-d,h-m-s');
    $connexion=mysql_connect("localhost", "root", "" )or die("cannot connect" );
    	mysql_select_db("basedugenie",$connexion )or die("cannot select DB" );
    	mysql_query("SET NAMES 'utf8'" );
     
    $requete="INSERT INTO cours (id_cours,nom_cours) VALUES('','$ncours')";
    $resultat=mysql_query($requete);
     
    $requete1="INSERT INTO chapitres (id_chapitre,nom_chapitres,num_chapitres,id_contenu,id_cours) VALUES('','$nchapitre','$numchapitre','$contenu','$ncours')";
    $resultat1=mysql_query($requete1);
     
    $requete2="INSERT INTO contenu (id_contenu,text_contenu,date_creation,date_modification) VALUES('','$contenu','$today','$datemod')";
    $resultat2=mysql_query($requete2);
    $erreur=mysql_error();
    				print ($erreur);
    				header("location: ajouterchap.php");
    ?>

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Tu n'es pas très loin de la solution.

    Quelques remarques tout de même...

    1) Il semble que tes identifiants soient, comme il se doit, des entiers auto-incrémentés.
    Inutile de vouloir leur donner une valeur, encore moins une chaîne vide puisque ce sont des entiers !

    2) Protège tes variables utilisées dans les requêtes pour éviter les injections SQL avec mysql_real_escape_string et intval.

    3) Comme dit dans mon précédent message, utilise mysql_insert_id() pour récupérer la valeur de l'identifiant qui a été créé par l'insertion.

    4) Insère d'abord dans cours et dans contenu avant d'insérer dans chapitre puisque chapitre doit accueillir les clés étrangères référençant le cours et le contenu.

    5) Aère ton code ; il sera plus agréable à lire quand tu auras à revenir dessus.

    Code PHP : 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
    <?php
    $contenu = mysql_real_escape_string($_POST['editor1']);
    $ncours = mysql_real_escape_string($_POST['ncours']);
    $nchapitre = mysql_real_escape_string($_POST['nchapitre']);
    $numchapitre = mysql_real_escape_string($_POST['numchapitre']); // si c'est un entier, utilise plutôt intval($_POST['numchapitre'])
    $today = date('y-m-d,h-m-s');
    $datemod = date('y-m-d,h-m-s');
    $connexion = mysql_connect("localhost", "root", "" ) OR die('cannot connect' );
    mysql_select_db('basedugenie', $connexion ) OR die('cannot select DB' );
    mysql_query("SET NAMES 'utf8'" );
     
    $requete = "
      INSERT INTO cours (nom_cours) 
      VALUES('".mysql_real_escape_string($ncours)."')
    ";
    mysql_query($requete) or die("Erreur à l'insertion du cours : ".mysql_error().'<br />'.$requete);
    $id_cours = mysql_insert_id($connexion);
     
    $requete = "
      INSERT INTO contenu (text_contenu, date_creation, date_modification) 
      VALUES('$contenu', '$today', '$datemod')
    ";
    mysql_query($requete) or die("Erreur à l'insertion du contenu : ".mysql_error().'<br />'.$requete);
    $id_contenu = mysql_insert_id($connexion);
     
    $requete = "
      INSERT INTO chapitres (nom_chapitres, num_chapitres, id_contenu, id_cours) 
      VALUES('$nchapitre', '$numchapitre', $id_contenu, $id_cours)
    ";
    $resultat1 = mysql_query($requete1) or die("Erreur à l'insertion du chapitre : ".mysql_error().'<br />'.$requete);
     
    header("location: ajouterchap.php");
    ?>

    Une dernière chose qui m'intrigue quand même dans ton code : à chaque nouvelle association de contenu et de cours pour constituer un chapitre, tu vas ajouter de nouveau le cours et le contenu !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre confirmé
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Par défaut
    Ok! l'utilisation de mysql_insert_id() a bien fonctionner comme je le voulais seulement avec mysql_real_escape_string pour éviter les injections SQL ne fonctionne pas à merveille du tout par ce que sa poste les données mais avec un contenu vide! Et je ne sais pas ce qui manque ou ce qu'il me faut faire!

  7. #7
    Membre confirmé
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Par défaut
    J'ai juste oublier de mettre ces deux signes pour avoir ce ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_r($_POST['editor1']);
    et voici le bon code:
    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
    $connexion = mysql_connect("localhost", "root", "" ) OR die('cannot connect' );
    mysql_select_db('basedugenie', $connexion ) OR die('cannot select DB' );
    mysql_query("SET NAMES 'utf8'" );
     
    $contenu =mysql_real_escape_string($_POST['editor1']);
    $ncours =mysql_real_escape_string($_POST['ncours']);
    $nchapitre =mysql_real_escape_string($_POST['nchapitre']);
    $numchapitre =mysql_real_escape_string($_POST['numchapitre']); // si c'est un entier, utilise plutôt intval($_POST['numchapitre'])
    $today = date('y-m-d,h-m-s');
    $datemod = date('y-m-d,h-m-s');
     
    $requete = "
      INSERT INTO cours (nom_cours) 
      VALUES('".mysql_real_escape_string($ncours)."')
    ";
    mysql_query($requete) or die("Erreur à l'insertion du cours : ".mysql_error().'<br />'.$requete);
    $id_cours = mysql_insert_id($connexion);
     
    $requete = "
      INSERT INTO contenu (text_contenu, date_creation, date_modification) 
      VALUES('$contenu', '$today', '$datemod')
    ";
    mysql_query($requete) or die("Erreur à l'insertion du contenu : ".mysql_error().'<br />'.$requete);
    $id_contenu = mysql_insert_id($connexion);
     
    $requete = "
      INSERT INTO chapitres (nom_chapitres, num_chapitres, id_contenu, id_cours) 
      VALUES('$nchapitre', '$numchapitre', $id_contenu, $id_cours)
    ";
    $resultat1 = mysql_query($requete) or die("Erreur à l'insertion du chapitre : ".mysql_error().'<br />'.$requete);
     
    print_r($_POST['ncours']);
    print_r($_POST['nchapitre']);
    print_r($_POST['editor1']);
     
    //header("location: ajouterchap.php");
     
    ?>
    oh la la la

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

Discussions similaires

  1. Insertion de données dans 2 tables différentes.
    Par anthony_rexis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/07/2007, 10h29
  2. Insertion de données dans différentes tables.
    Par zeugzeug dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 21/04/2007, 21h00
  3. insertion de donnée dans une table (2 bd)
    Par robert_trudel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/01/2007, 17h41
  4. Réponses: 5
    Dernier message: 26/01/2007, 08h11
  5. Réponses: 7
    Dernier message: 12/10/2004, 16h43

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