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

Langage PHP Discussion :

Insertion SQL avec boucles foreach


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Par défaut Insertion SQL avec boucles foreach
    Bonjour,

    En pièces jointes, deux fichiers :
    -fichier_1.php : le fichier (dans lequel tout fonctionne) où j'aimerais ajouter une insertion de sous-chapitre
    -fichier_2.php : le fichier dans lequel j'ai ajouté une boucle foreach pour insérer les sous-chapitres dans la base de données

    Je n'arrive pas à insérer les sous-chapitres par rapport aux chapitres. C'est la même chose que j'ai fait pour l'insertion des chapitres par rapport au cours.

    Ce n'est pas un problème de structure de tables SQL mais de boucles PHP foreach.

    Le problème est qu'il ne reconnait pas $titre_sous_chapitre et $contenu_sous_chapitre. J'essaye de le faire avec des array.

    Comment faire pour insérer les chapitres dans la table chapitres et les sous-chapitres dans la table sous_chapitres ?

    Petite précision : Les questions et réponses attendues tiennent compte uniquement des chapitres.

    Merci de votre aide !

  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
    Par défaut
    Ce serait gentil de nous dire exactement sur quel fichier et quelle partie du code tu obtiens quelles erreurs precisemment.
    Parce que tes 400 lignes de code en pagaille c'est assez indigeste.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Par défaut
    Dans fichier_2.php, voici la partie qui traite des sous-chapitres :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach($titre_sous_chapitre_array as $num_sous_chapitre => $titre_sous_chapitre) {
    	$titre_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_sous_chapitre[$num_sous_chapitre]))? $titre_sous_chapitre[$num_sous_chapitre] : ''));
    	$contenu_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_sous_chapitre_array[$num_sous_chapitre]))? $contenu_sous_chapitre_array[$num_sous_chapitre] : ''));
     
     
    	// Insertion des chapitres dans la base de données
    	$query_insertion_sous_chapitre=mysql_query("
            INSERT INTO sous_chapitres (id_cours,id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre)
            VALUES (".$_SESSION['id_cours'].",".$_SESSION['id_chapitre'].",'".$titre_sous_chapitre."','".$contenu_sous_chapitre."',now(),'".$id_utilisateur."')")
            or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre, date de dépot du chapitre, auteur du chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    	$_SESSION['id_sous_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du sous-chapitre)
    }

    $titre_sous_chapitre et $contenu_sous_chapitre ne récupèrent pas les données. En ce qui concerne les chapitres, c'est bon.

    Le but recherché : Insérer tout ce qui concerne les chapitres dans la table chapitres et tout ce qui concerne les sous-chapitres dans la table sous_chapitres.

    En ne gardant que la boucle foreach ci-dessus, j'obtiens l'erreur suivante :
    Erreur lors de l'insertion d'un chapitre d'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre, date de dépot du chapitre, auteur du chapitre)You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''','',now(),'6')' at line 1
    J'en déduis qu'il ne trouve pas $titre_sous_chapitre et $contenu_sous_chapitre que j'essaye de récupérer via ces deux lignes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $titre_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_sous_chapitre[$num_sous_chapitre]))? $titre_sous_chapitre[$num_sous_chapitre] : ''));
    $contenu_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_sous_chapitre_array[$num_sous_chapitre]))? $contenu_sous_chapitre_array[$num_sous_chapitre] : ''));

    Voici plus d'explications :
    -titre_sous_chapitre : voici la zone de texte <input name="titre_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" type="text" />-contenu_sous_chapitre_array : voici la zone de texte <textarea name="contenu_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" rows="" cols=""></textarea></p>
    -num_sous_chapitre : c'est la variable qu'utilise la boucle for

    Je récupère les deux array avec :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $titre_sous_chapitre_array = (!empty($_POST['titre_sous_chapitre']))? $_POST['titre_sous_chapitre'] : NULL;
    $contenu_sous_chapitre_array = (!empty($_POST['contenu_sous_chapitre']))? $_POST['contenu_sous_chapitre'] : NULL;

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_sous_chapitre[$num_sous_chapitre]))? $titre_sous_chapitre[$num_sous_chapitre] : ''));
    C'est le concours de la syntaxe la plus affreuse ?

    1 - stripcslashes et htmlspecialchars ne servent a rien ici, je te l'ai déjà dit
    2 - il n'y a pas à definir des valeurs par défaut pour chacun de tes champs : soit la valeur existe et tu peux faire l'insertion, soit elle n'existe pas et tout arrête tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_POST['titre_sous_chapitre'], $_POST['contenu_sous_chapitre'])) {
              // insertion
    }
    else {
        // pas d'insertion
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Par défaut
    Ok pour la syntaxe.

    Mais, ce sont tableaux array.

    Au maximum, il est possible d'insérer dans la base de données (boucles for dans le formulaire) :
    -4 chapitres
    -5 sous-chapitres
    -5 questions

    Il faut traiter ça avec des tableaux, non ? L'utilisateur peut insérer uniquement que 2 chapitres, 3 sous-chapitre et 1 question par exemple.

    En résumé, j'utilise les tableaux pour exécuter les requêtes SQL INSERT INTO.
    Il faut insérer dans la base de données (au minimum) :
    -dans la table cours : les informations générales du cours,
    -dans la table chapitres : il faut insérer les données des chapitres (identifiant du cours, titre du chapitre, contenu du chapitre,
    -dans la table sous_chapitres : il faut insérer les données des sous-chapitres (identifiant du bon chapitre, titre du sous-chapitre, contenu du sous-chapitre)
    -dans la table questions : il faut insérer les données des questions (identifiant du chapitre, la question)

    Je pense qu'il faut utiliser des boucles foreach pour alimenter les tables : chapitres, sous_chapitres, questions avec les bons identifiants. Concernant la table cours, ce n'est pas la peine.

    Pour information, voici le formulaire HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      <form method="post">
        <input name="titre_cours_tp" type="text" />
        <input name="auteur_cours" type="text" value="<?php if(isset($_SESSION['pseudo_utilisateur'])) {echo $_SESSION['pseudo_utilisateur'];}?>"/>
        <input type="text" name="date_publication_tp" size="200" value='<?php $jour = array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");$mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");$dateDuJour = $jour[date("w")]." ".date("d")." ".$mois[date("n")]." ".date("Y"); echo $dateDuJour;?>'/>
        <input type="date" name="date_debut_validation_cours_tp" />
        <input type="date" name="date_cloture_validation_cours_tp" />
        <textarea name="introduction_cours" rows="" cols=""></textarea>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    // on boucle (par exemple) pour 4 CHAPITRES 
    for($num_chapitre=1; $num_chapitre<5; $num_chapitre++)
    { 
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <p><b>Titre du chapitre <?php echo $num_chapitre; ?> </b>:
        <input name="titre_chapitre[<?php echo $num_chapitre; ?>]" type="text" />
      </p>
      <p><b>Contenu du chapitre <?php echo $num_chapitre; ?> </b>:
        <textarea name="contenu_chapitre[<?php echo $num_chapitre; ?>]" rows="" cols=""></textarea>
      </p>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    	// on boucle (par exemple) pour 5 SOUS-CHAPITRES
    	for($num_sous_chapitre=1; $num_sous_chapitre<6; $num_sous_chapitre++) 
    	{ 
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <p><i>Titre du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :
        <input name="titre_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" type="text" />
      </i></p>
      <p><i>Contenu du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :</i>
        <textarea name="contenu_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" rows="" cols=""></textarea></p>

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    	// on boucle (par exemple) pour 5 QUESTIONS 
    	for($num_question=1; $num_question<6; $num_question++) 
    	{ 
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <p>Question <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="question_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>]" type="text" />
      </p>
      <p>Réponse <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="reponse_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>]" type="text" />
      </p>
     </p>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
     	// FIN MODULE
    } // fin boucle chapitre 
    	} // fin boucle question
    } // fin boucle sous-chapitre 
     
    ?>

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <textarea name="conclusion_cours" rows="" cols=""></textarea>
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    </form>

    Comme tu peux le voir, j'ai nommé les zones de texte comme ça (sous forme de tableaux) : nom_champs[numero_(sous_)chapitre][numero_question].

  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
    Par défaut
    Il s'agit pour toi d'écrire un script cohérent dans son déroulement.
    Actuellement ce n'est pas le cas.
    1 - on verifie si les données nécessaires au traitement de la requête existent
    2 - on fait la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Par défaut [sabotage] Traitement PHP d'un formulaire
    Bonjour,

    Je ne m'en sors pas pour insérer les données d'un formulaire HTML dans des différentes tables en tenant compte qu'il faut gérer les inscriptions des identifiants des différentes catégories.

    Voici le formulaire HTML (avec les 3 boucles : chapitres, sous-chapitres, questions/réponses) (Afin de ne pas devoir réécrire à chaque test les données, j'ai mis par défaut des valeurs.) :
    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
    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
    <form method="post">
      <u>Matière :</u>
      <select name="matieres">
        <?php
    $matiere = "SELECT matiereenseignee_utilisateur FROM test_site_utilisateur "; //WHERE id_utilisateur='".$id_utilisateur."'
    $result = mysql_query($matiere) or die("Erreur sur la requête SQL concernant la matière du professeur.");
    echo '<option value="">Choisissez votre matière.</option>';
    while ($row=mysql_fetch_array($result)) // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
    { 
     echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
    }  
    ?>
      </select>
      <br />
      <u>Classe :</u>
      <select name="classes">
        <?php
              // A modifier
    $classes = "SELECT classe_utilisateur FROM test_site_utilisateur,  test_site_classe WHERE classe_utilisateur=classe_nom "; //AND id_utilisateur='".$id_utilisateur."'
    $result = mysql_query($classes) or die("Erreur sur la requête SQL concernant les classes.");
    echo '<option value="">Choisissez une de vos classes.</option>';
    while ($row=mysql_fetch_array($result)) { // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
            echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
    } ?>
      </select>
      <br />
      <p>Titre du cours :
        <input name="titre_cours_tp" type="text" value="TITRE COURS/TP" />
      </p>
      <p>Auteur :
        <input name="auteur_cours" type="text" value="Vincent Salvador <?php if(isset($_SESSION['pseudo_utilisateur'])) {echo $_SESSION['pseudo_utilisateur'];}?>"/>
      <p>Date de publication
        <input type="text" name="date_publication_tp" size="200" value='<?php $jour = array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");$mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");$dateDuJour = $jour[date("w")]." ".date("d")." ".$mois[date("n")]." ".date("Y"); echo $dateDuJour;?>'/>
        <br />
        Date de début (Pas obligatoire)
        <input type="date" name="date_debut_validation_cours_tp" value="2014-06-10" />
        <br />
        Date de clôture des validations (Pas obligatoire)
        <input type="date" name="date_cloture_validation_cours_tp" value="2014-07-10" />
        <br />
        Introduction :
        <textarea name="introduction_cours" rows="" cols="" >INTRODUCTION</textarea>
    <?php 
    // on boucle (par exemple) pour 4 CHAPITRES 
    for($num_chapitre=1; $num_chapitre<5; $num_chapitre++) 
    { 
            // DEBUT MODULE CHAPITRES
    ?>
      <p>Titre du chapitre <?php echo $num_chapitre; ?> :
        <input name="titre_chapitre['<?php echo $num_chapitre; ?>']" type="text" value="TITRE CHAPITRE <?php echo $num_chapitre; ?>" />
      </p>
      <p>Contenu du chapitre <?php echo $num_chapitre; ?> :
        <textarea name="contenu_chapitre['<?php echo $num_chapitre; ?>']" rows="" cols="">CONTENU CHAPITRE <?php echo $num_chapitre; ?></textarea>
      </p>
      <?php 
    // on boucle (par exemple) pour 3 SOUS-CHAPITRES 
    for($num_sous_chapitre=1; $num_sous_chapitre<4; $num_sous_chapitre++) 
    { 
            // DEBUT MODULE SOUS-CHAPITRES
    ?>
      <p>Titre du sous-chapitre <?php echo $num_chapitre." - ".$num_sous_chapitre; ?> :
        <input name="titre_sous_chapitre['<?php echo $num_sous_chapitre; ?>']" type="text" value="TITRE SOUS CHAPITRE <?php echo $num_sous_chapitre; ?>" />
      </p>
      <p>Contenu du sous-chapitre <?php echo $num_chapitre." - ".$num_sous_chapitre; ?> :
        <textarea name="contenu_sous_chapitre['<?php echo $num_sous_chapitre; ?>']" rows="" cols="">CONTENU SOUS CHAPITRE <?php echo $num_sous_chapitre; ?></textarea>
      </p>
     
      <div>Questions/Réponses</div>
    <?php 
            // on boucle (par exemple) pour 5 QUESTIONS 
            for($num_question=1; $num_question<6; $num_question++) 
            { 
            // DEBUT MODULE QUESTIONS
    ?>
      <p>Question <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="question_chapitre['<?php echo $num_question; ?>']" type="text" value="QUESTION CHAPITRE <?php echo $num_question; ?>"/>
      </p>
      <p>Réponse <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="reponse_chapitre['<?php echo $num_question; ?>']" type="text" value="REPONSE CHAPITRE <?php echo $num_question; ?>" />
      </p>
    <?php 
            } // fin boucle question 
            // FIN MODULE
    } // fin boucle sous-chapitre 
    } // fin boucle chapitre 
    ?>
    <div>Conclusion :
        <textarea name="conclusion_cours" rows="" cols="">CONCLUSION</textarea>
      </div>
      <br />
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    </form>

    Est-ce que les zones de texte sont bien nommées pour pouvoir être traitées correctement (chapitres, sous-chapitres, questions, réponses) ?

    Voici le traitement PHP (avec 6 boucles foreach) (Pour le débogage, j'ai mis en commentaire les tests et remplacé $id_utilisateur par 1.) :
    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
    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
    <?php 
    if(isset($_POST['poster_cours_tp'])) {
    	$matiere_choisie=mysql_real_escape_string($_POST['matieres']);
    	$classe_choisie=mysql_real_escape_string($_POST['classes']);
    	$titre_cours_tp=mysql_real_escape_string($_POST['titre_cours_tp']);
    	$date_publication_tp=mysql_real_escape_string($_POST['date_publication_tp']);
    	$date_cloture_validation_cours_tp=mysql_real_escape_string($_POST['date_cloture_validation_cours_tp']);
    	$date_debut_validation_cours_tp=mysql_real_escape_string($_POST['date_debut_validation_cours_tp']);
    	$auteur_cours=mysql_real_escape_string($_POST['auteur_cours']);
    	$introduction_cours=mysql_real_escape_string($_POST['introduction_cours']);
    	$conclusion_cours=mysql_real_escape_string($_POST['conclusion_cours']);
    	// Vérification de la saisie minimale
    	//if ($_POST['titre_cours_tp']==''||($_POST['auteur_cours']==''||($_POST['date_publication_tp']==''||($_POST['date_debut_validation_cours_tp']==''||($_POST['date_cloture_validation_cours_tp']==''))))) {  
    		//echo "Veuillez saisir les informations générales de votre Cours/TP dynamique.";
    		//exit();
    	  //}
    	  //else
    		  $query_insertion_cours_tp="INSERT INTO cours (titre_cours,id_auteur,introduction_cours,conclusion_cours,date_publication_cours,date_cloture_validation_cours,date_debut_validation_cours,matiere_cours,classe_cours) VALUES ('".$titre_cours_tp."','".$id_utilisateur."','".$introduction_cours."','".$conclusion_cours."',now(),'".$date_cloture_validation_cours_tp."','".$date_debut_validation_cours_tp."','".$matiere_choisie."','".$classe_choisie."')";
    		  mysql_query($query_insertion_cours_tp) or die('Erreur lors de l\'insertion d\'un Cours/TP (titre du cours, auteur du cours, introduction du cours, conclusion du cours, date de publication du cours, date de cloture de validation du cours, date de début de validation du cours, la matière et la classe)'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  $id_cours=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du Cours/TP)
    		  // Boucle pour insérer les titres des chapitres - DEBUT
    		  foreach ($_POST['titre_chapitre'] as $id_chapitre_titre => $titre_chapitre) {
    			  $sql_insertion_chapitre_titre="
    			  INSERT INTO chapitres (id_cours,titre_chapitre,date_depot,id_auteur_chapitre)
    			  VALUES (".$id_cours.",'".$titre_chapitre."',now(),'1')";//".$id_utilisateur."
    			  mysql_query($sql_insertion_chapitre_titre)
    			  or die('Erreur sur la requête SQL qui insère les titres des chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les titres des chapitres - FIN
     
    		  // Boucle pour modifier les contenus des chapitres - DEBUT
    		  foreach ($_POST['contenu_chapitre'] as $id_chapitre_contenu => $contenu_chapitre) {
    			  $sql_chapitre_contenu="
    			  UPDATE chapitres
    			  SET contenu_chapitre='".$contenu_chapitre."',date_maj_chapitre=now() WHERE id_chapitre='".$id_chapitre_titre."'";
    			  //echo "Requête SQL : ".$sql_chapitre_contenu."<br />";
    			  mysql_query($sql_chapitre_contenu)
    			  or die('Erreur sur la requête SQL qui met à jour les contenus des chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour modifier les contenus des chapitres - FIN
     
    		  // Boucle pour insérer les titres des sous-chapitres - DEBUT
    		  foreach ($_POST['titre_sous_chapitre'] as $id_sous_chapitre_titre => $titre_sous_chapitre) {
    			  $sql_insertion_sous_chapitre_titre="
    			  INSERT INTO sous_chapitres (	id_chapitre,titre_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('".$id_chapitre_contenu."','".$titre_sous_chapitre."',now(),'1')";//".$id_utilisateur."
    			  mysql_query($sql_insertion_sous_chapitre_titre)
    			  or die('Erreur sur la requête SQL qui insère les titres des sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les titres des sous-chapitres - FIN
     
    		  // Boucle pour modifier les contenus des sous-chapitres - DEBUT
    		  foreach ($_POST['contenu_sous_chapitre'] as $id_sous_chapitre_contenu => $contenu_sous_chapitre) {
    			  $sql_modification_sous_chapitre_contenu="
    			  UPDATE sous_chapitres
    			  SET contenu_sous_chapitre='".mysql_real_escape_string($contenu_sous_chapitre)."',id_auteur_sous_chapitre='1'
    			  WHERE id_sous_chapitre='".$id_sous_chapitre_titre."'";//".$id_utilisateur."
    			  mysql_query($sql_modification_sous_chapitre_contenu)
    			  or die('Erreur sur la requête SQL qui met à jour les contenus des sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour modifier les contenus des chapitres - FIN
     
    		  // Boucle pour insérer les questions - DEBUT
    		  foreach ($_POST['question_chapitre'] as $id_question => $contenu_question) {
    			  $sql_question="
    			  INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question)
    			  VALUES (".$id_chapitre_titre.",'".$contenu_question."',now(),'1','1')";//".$id_utilisateur."
    			  mysql_query($sql_question)
    			  or die('Erreur sur la requête SQL qui insère les questions du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les questions - FIN
     
    		  // Boucle pour insérer les réponses - DEBUT
    		  foreach ($_POST['reponse_chapitre'] as $id_reponse => $reponse_chapitre) {
    			  $sql_reponse="
    			  INSERT INTO reponses (id_question,id_auteur_reponse,texte_reponse_attendue,date_depot) VALUES (".$id_question.",'".$id_utilisateur."','".$reponse_chapitre."',now())";
    			  mysql_query($sql_reponse)
    			  or die('Erreur sur la requête SQL qui insère les réponses aux questions respectives du cours'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les réponses - FIN`
     
     
    		  // Débogage -  DEBUT
    		  echo "var_dump (titre du chapitre) : ".var_dump($titre_chapitre)."<br />";
    		  echo "var_dump (contenu du chapitre) : ".var_dump($contenu_chapitre)."<br />";
    		  echo "var_dump (titre du sous-chapitre) : ".var_dump($titre_sous_chapitre)."<br />";
    		  echo "var_dump (contenu du sous-chapitre) : ".var_dump($contenu_sous_chapitre)."<br />";
    		  echo "var_dump (contenu de la question) : ".var_dump($contenu_question)."<br />";
    		  echo "var_dump (contenu de la réponse) : ".var_dump($reponse_chapitre)."<br />";
    		  echo "print_r (titre du chapitre) : ".print_r($titre_chapitre)."<br />";
    		  echo "print_r (contenu du chapitre) : ".print_r($contenu_chapitre)."<br />";
    		  echo "print_r (titre du sous-chapitre) : ".print_r($titre_sous_chapitre)."<br />";
    		  echo "print_r (contenu du sous-chapitre) : ".print_r($contenu_sous_chapitre)."<br />";
    		  echo "print_r (contenu de la question) : ".print_r($contenu_question)."<br />";
    		  echo "print_r (contenu de la réponse) : ".print_r($reponse_chapitre)."<br />";
    		  echo "$_POST : ".$_POST."<br />";
    		  // Débogage - FIN
     
    		  echo "Message OK (Inscriptions correctement exécutées).";
    }
    ?>

    Avec ce code :
    - la table "cours" s'insère avec les bonnes valeurs
    - la table "chapitres" s'insère avec le titre mais pas le contenu
    - la table "sous_chapitres" : le champs "id_chapitre" est égal à "0" et le champs "contenu_sous_chapitre" est vide
    - la table "questions", aucune insertion, une erreur due à $id_chapitre_titre qui ne contient pas le bon identifiant du chapitre : du coup, le traitement PHP s'arrête là du coup le débogage ne s'effectue pas
    - la table "reponses", aucune insertion

    Sachant qu'un chapitre ou un sous-chapitre a obligatoirement un titre et un contenu, j'ai fait deux boucles foreach : dans la seconde, j'essaye de mettre une condition sur l'identifiant du chapitre pour modifier uniquement le bon sous-chapitre.
    Comment faire pour que les tables chapitres (titre du chapitre, contenu du chapitre) sous_chapitres (identifiant du chapitre, titre du sous-chapitre, contenu du sous-chapitre) s'insèrent avec les bonnes valeurs ? Pour la table questions, l'identifiant du bon chapitre doit s'insérer et pour la table reponses, l'identifiant de la bonne question doit s'insérer.
    Faut-il faire deux boucles foreach imbriquées pour récupérer les bons identifiants ?

    Pour réparer ce problème, il faut insérer les bons identifiants (cours, chapitre, question) en mettant les deux valeurs (titre, contenu).

    En ce qui concerne les boucles qui s'occupent des contenus des chapitres et des contenus des sous-chapitres, il y a un problème sur la condition sur l'identifiant du chapitre pour qu'il mette à jour les bons chapitres. Je pense que c'est ça qui ne vas pas : il faut arriver à retrouver le bon identifiant du chapitre c'est à dire que la condition WHERE id_chapitre doit être comparé à l'identifiant du chapitre de la boucle précédente, ce n'est pas $id_chapitre_contenu (puisqu'il est égal à 1, 2, 3, etc... mais l'identifiant du chapitre de la requête $sql_insertion_chapitre_titre).

    Comme vous le voyez, j'arrive avec un code, la structure SQL est bonne. Il faut s'occuper de ce traitement afin qu'il insère toutes les données correctement (avec les bons identifiants, avec toutes les données).

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

Discussions similaires

  1. Problème insertion SQL avec Java
    Par lemzo84 dans le forum Persistance des données
    Réponses: 11
    Dernier message: 28/10/2012, 14h58
  2. Réponses: 1
    Dernier message: 25/03/2011, 10h10
  3. [MySQL] Problème avec boucle foreach
    Par dschaefer79 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/07/2010, 17h42
  4. [PHP 5.0] Fonction avec boucle "foreach"
    Par ju0123456789 dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2010, 18h12
  5. problème insert into avec boucle for
    Par nokia1600 dans le forum VB.NET
    Réponses: 8
    Dernier message: 30/10/2009, 15h08

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