Requêtes UPDATE dans boucles foreach avec array
Bonjour,
Après avoir fait une page qui permet d'insérer des cours qui marche, je fais une page pour modifier un cours choisi.
Etant donné qu'un cours se compose d'informations générales (titre, introduction, conclusion), de chapitres (titre et contenu) et qu'un chapitre contient des questions et leurs réponses respectives, j'ai utilisé des array en PHP dans la page qui permet d'insérer des cours. Tout ça fonctionne.
Maintenant, je veux ajouter la fonctionnalité de modification de cours.
J'ai fait deux pages :
-une pour choisir le cours
-une pour modifier le cours choisi
Entre les deux pages, il y a une différence : sur la page qui permet de poster des cours, j'ai fait des boucles for pour afficher des zones de texte afin de gérer les chapitres (titres+contenus) et les questions (questions+réponses respectives) alors que sur la page qui permettra de mettre à jour les cours, je n'ai pas fait de boucle for puisque je ne fais qu'afficher les données issues de la base de données du cours choisi.
J'enregistre les données dans des tables différentes. C'est là que le problème se pose, les modifications (requêtes SQL : UPDATE) ne s'exécutent pas. Lors de la soumission du formulaire, tout s'efface sauf la conclusion et le bouton. Quand je regarde dans la base de donnée, il n'y a aucune modification alors que je voudrais exécuter des requêtes SQL UPDATE et afficher un message.
A noter : j'ai indenté le code !!! J'ai fait des boucles foreach.
Voici les codes :
Requêtes SQL :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // Sélectionnement de l'identifiant du professeur connecté
$selection_identifiant_id_professeur_connecte = mysql_query(
"SELECT id_utilisateur
FROM test_site_utilisateur
WHERE id_utilisateur=".$_SESSION['id_utilisateur']."
AND (acces_utilisateur='1' OR acces_utilisateur='3' OR acces_utilisateur='4')")
or die ('Erreur lors de la requête SQL qui permet de sélectionner le professeur connecté.'); // Envoie une requête à un serveur MySQL
// Récupération du titre du Cours/TP dans la base de données - Deuxième version
$query_selection_titre_cours_tp=mysql_query("
SELECT DISTINCT(titre_cours)
FROM test_site_questions_v2 t1, test_site_cours_v2 t2
WHERE t1.id_cours=t2.id_cours AND t2.id_cours='$id_cours_tp'")
or die('Erreur lors de la sélection du titre d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL |
Affichage :
Code:
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
| <?php
session_start(); // Démarre une nouvelle session ou reprend une session existante
if(mysql_num_rows($selection_identifiant_id_professeur_connecte)==1) {
if(mysql_num_rows($query_selection_titre_cours_tp)==1) {
echo "<header>".$_SESSION['titre_cours']."</header>";
echo "Classe : ".$_SESSION['classe_cours']."<br />";
echo "Matière : ".$_SESSION['matiere_cours']."<br />";
echo '<form action="" method="post">';
// Test s'il y a une date cloture de validation de Cours/TP - A VOIR
if($_SESSION['date_cloture_validation_cours']=='0000-00-00 00:00:00') {
echo '<span>Date de clôture de validation de ce Cours/TP :</span> <i>Indéterminée</i>.<br />';
}
else
echo 'Date de cloture : <input type="text" name="date_cloture" value="'.$_SESSION['date_cloture_validation_cours'].'" /><br />';
echo "Introduction : <textarea name='introduction_cours' rows=10 cols=40>".$_SESSION['introduction_cours']."</textarea><br />";
// Même boucle que sur la page d'affichage - DEBUT
while ($row = mysql_fetch_assoc($selection_cours)) {
// Affichage du titre du chapitre
if ($row['id_chapitre'] != $id_chapitre) {
echo 'Identifiant du chapitre : '.$id_chapitre;
echo '<br />Titre du chapitre n° <input type="text" name="titre_chapitre" value="'.$row['titre_chapitre'].'" /> <br />';
echo 'Contenu du chapitre n° <textarea name="contenu_chapitre" rows=10 cols=40>'.$row['contenu_chapitre'].'</textarea><br />';
$id_chapitre = $row['id_chapitre'];
}
// Affichage des questions du chapitre, s'il y en a
if ($row['contenu_question']) {
echo '<br />Question : <input type="text" name="contenu_question" value="'.$row['contenu_question'].'"<br />';
$id_question = $row['id_question'];
}
}
}
}
// Même boucle que sur la page d'affichage - FIN
echo "<br />Conclusion : <textarea name='conclusion_cours' rows=10 cols=40>".$_SESSION['conclusion_cours']."</textarea><br />";
echo '<input type="submit" value="Modifier mon Cours/TP" />';
?> |
Traitement :
Code:
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
| $id_cours_tp = intval($_POST['id_cours_tp']);
<?php
$introduction_cours=mysql_real_escape_string($_POST['introduction_cours']);
$conclusion_cours=mysql_real_escape_string($_POST['conclusion_cours']);
// On récupère des array
$titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
$contenu_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;
$contenu_question_array = (!empty($_POST['contenu_question']))? $_POST['contenu_question'] : NULL;
if (is_array($titre_chapitre_array)) {
if(isset($_POST['modifier_cours_tp'])) {
$query_modifier_cours_tp=mysql_query("UPDATE test_site_cours_v2
SET introduction_cours='$introduction_cours', conclusion_cours='$conclusion_cours',date_maj_cours=now()
WHERE auteur_cours IN (SELECT pseudo_utilisateur
FROM test_site_utilisateur
WHERE (acces_utilisateur='1' OR acces_utilisateur='3' OR acces_utilisateur='4'))")
or die('Erreur sur la requête SQL qui met à jour les informations générales du Cours/TP.'.mysql_error()); // Envoie une requête à un serveur MySQL
$_SESSION['id_cours']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du Cours/TP)
// On récupère l'identifiant du cours pour le mettre dans les requêtes SQL d'insertion
$query_selection_cours=mysql_query("SELECT id_cours
FROM test_site_cours_v2
WHERE titre_cours=".$_SESSION['titre_cours']."")
or die('Erreur lors de la sélection de l\'identifiant du Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
// On récupère l'identifiant du chapitre pour le mettre dans les requêtes SQL d'insertion
$query_selection_chapitre=mysql_query("SELECT id_chapitre
FROM test_site_chapitres_v2
WHERE auteur_chapitre='$pseudo_utilisateur'")
or die('Erreur lors de la sélection d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
// Boucles pour récupérer les identifiants du Cours/TP et des Chapitres - DEBUT
while($recuperation_identifiant_cours = mysql_fetch_assoc($query_selection_cours)) {
$recuperation_identifiant_cours['id_cours'];
$_SESSION['id_cours']=$recuperation_identifiant_cours['id_cours'];
}
while($recuperation_identifiant_chapitre = mysql_fetch_assoc($query_selection_chapitre)) {
$recuperation_identifiant_chapitre['id_chapitre'];
$_SESSION['id_chapitre']=$recuperation_identifiant_chapitre['id_chapitre'];
}
// Boucles pour récupérer les identifiants du Cours/TP et des Chapitres - FIN
// => on enregistre en BDD si les zones de texte sont remplies
if(empty($titre_chapitre_array)&&empty($contenu_chapitre_array)&&empty($question_chapitre_array)&&empty($reponse_chapitre_array)) {
echo "Veuillez saisir au moins un chapitre et au moins une question sans oublier sa réponse.";
exit();
}
else
// Boucle permettant de modifier dans la base de données les chapitres - DEBUT
foreach($titre_chapitre_array as $num_chapitre => $titre_chapitre) {
$titre_chapitre = mysql_real_escape_string(!empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
$contenu_chapitre = mysql_real_escape_string(!empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
// Modification des chapitres dans la base de données
$query_modification_chapitre=mysql_query("
UPDATE test_site_chapitres_v2
SET id_cours='$id_cours_tp',titre_chapitre='$titre_chapitre_array',contenu_chapitre='$contenu_chapitre',date_maj_chapitre=now()
WHERE auteur_chapitre
IN (SELECT pseudo_utilisateur
FROM test_site_utilisateur
WHERE (acces_utilisateur='1' OR acces_utilisateur='3' OR acces_utilisateur='4'))")
or die('Erreur sur la requête SQL qui met à jour les chapitres du Cours/TP (titre et contenu).'.mysql_error()); // Envoie une requête à un serveur MySQL
$_SESSION['id_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du chapitre)
// Boucle permettant de modifier les les questions/réponses dans la base de données - DEBUT
foreach($question_chapitre_array[$num_chapitre] as $num_question => $question_chapitre) {
$question_chapitre = mysql_real_escape_string(!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : '';
$reponse_chapitre = mysql_real_escape_string(!empty($reponse_chapitre_array[$num_chapitre][$num_question]? $reponse_chapitre_array[$num_chapitre][$num_question] : '';
// Modification des questions/réponses dans la base de données
$query_modification_questions=mysql_query("
UPDATE test_site_questions_v2
SET id_cours='$id_cours_tp',id_chapitre='$id_chapitre',contenu_question='$question_chapitre',reponse_question ='$reponse_chapitre',date_depot=now(),auteur_question='$pseudo_utilisateur',date_maj_question=now()
WHERE auteur_question
IN (SELECT pseudo_utilisateur
FROM test_site_utilisateur
WHERE (acces_utilisateur='1' OR acces_utilisateur='3' OR acces_utilisateur='4'))")
or die('Erreur sur la requête SQL qui met à jour les questions du Cours/TP.'.mysql_error()); // Envoie une requête à un serveur MySQL
$query_modification_reponses=mysql_query("
UPDATE test_site_reponses_v2
SET id_cours='$id_cours_tp',id_chapitre='$id_chapitre',question_reference
IN (SELECT id_question
FROM test_site_questions_v2
WHERE contenu_question='$question_chapitre'),reponse_question ='$reponse_chapitre',date_depot=now(),auteur_question='$pseudo_utilisateur',date_maj_question=now()
WHERE auteur_question
IN (SELECT pseudo_utilisateur
FROM test_site_utilisateur
WHERE (acces_utilisateur='1' OR acces_utilisateur='3' OR acces_utilisateur='4'))")
or die('Erreur sur la requête SQL qui met à jour les réponses du Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
// Boucle permettant de modifier les les questions/réponses dans la base de données - FIN
}
}
}
}
echo '</form>';
?> |
Comment faire pour que les trois requêtes SQL UPDATE s'exécutent ?
J'ai fait des recherches mais j'ai besoin de vos lumières.