J'ai suivi ton conseil.
Voici le formulaire HTML sur lequel j'ai modifié les name des chapitres et des sous-chapitres.
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 <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="chapitre[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="chapitre[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="sous_chapitre[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="sous_chapitre[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>
Voici le traitement PHP du formulaire :
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 <?php if(isset($_POST['poster_cours_tp'])) { print_r($_POST); $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 chapitres - DEBUT foreach ($_POST['chapitre'] as $id_chapitre_titre => $titre_chapitre) { foreach ($_POST['chapitre'] as $id_chapitre_contenu => $contenu_chapitre) { $sql_insertion_chapitre=" INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) VALUES (".$id_cours.",'".$titre_chapitre."','".$contenu_chapitre."',now(),'1')";//".$id_utilisateur." mysql_query($sql_insertion_chapitre) or die('Erreur sur la requête SQL qui insère les chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL } } // Boucle pour insérer les chapitres - FIN // Boucle pour insérer les sous-chapitres - DEBUT foreach ($_POST['sous_chapitre'] as $id_sous_chapitre_titre => $titre_sous_chapitre) { foreach ($_POST['sous_chapitre'] as $id_sous_chapitre_contenu => $contenu_sous_chapitre) { $sql_insertion_sous_chapitre="INSERT INTO sous_chapitres ( id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('".$id_chapitre_contenu."','".mysql_real_escape_string($titre_sous_chapitre)."','".mysql_real_escape_string($contenu_sous_chapitre)."',now(),'1')"; mysql_query($sql_insertion_sous_chapitre) or die('Erreur sur la requête SQL qui insère les sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL } } // Boucle pour insérer les sous-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` echo "OK."; } ?>
Comme tu le vois, j'ai suivi ton conseil en supprimant deux boucles foreach. A la place, j'ai ajouté deux boucles foreach imbriquées pour insérer les deux valeurs (le titre et le contenu des chapitres et des sous-chapitres).
Avec ce code :
-la table "cours" s'insère avec les bonnes valeurs
-la table "chapitres" : il y a un problème dans les boucles foreach puisqu'après avoir insérer uniquement le premier titre, il insère le contenu des chapitres dans le champs "titre_chapitre". En ce qui concerne le champs "contenu_chapitre", à chaque fois il insère le titre et le contenu.
-la table "sous_chapitres" : même problème que pour les chapitres.
-la table "questions" : le or die s'affiche.
-la table "reponses" : aucune insertion.
Comme tu le constates, je n'y arrive pas avec ce code et ce n'est pas faute d'essayer. Peux-tu STP m'aider avec du code ?
J'ai compris qu'il faut uniquement une boucle foreach pour insérer les titres et les contenus des chapitres et des sous-chapitres.
Il faut lui dire : pour chaque titre et contenu du chapitre ou du sous-chapitre, il faut que tu l'insère dans la table chapitres ou dans la table sous_chapitres en tenant compte des bons identifiants. C'est la même chose pour les tables questions et reponses.
Je sais ce qu'il faut faire, j'ai le traitement en tête mais je n'arrive pas à le coder pourtant ce n'est pas faute d'essayer. Je pense que voir le code qui traiterait correctement ce formulaire m'aiderait plus. Ce n'est pas parce que je ne veux pas m'embêter à chercher mais je pourrais ainsi comparer les deux codes afin de voir ce qui ne va pas.
En cherchant sur Internet comment insérer plusieurs données en utilisant une boucle foreach, j'ai trouvé ce lien : http://www.jeux-lothi.com/post/80072...rtion-multiple . Je ne veux pas en faire une fonction, je veux juste faire un code qui marche.
Sur ce lien http://rcadhikari.blogspot.fr/2013/0...ng-single.html, la requête SQL n'est pas dans la boucle foreach insère les données après les avoir rassemblées.
Partager