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 :

Requêtes UPDATE dans boucles foreach avec array [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut 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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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 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
    <?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 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
    $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.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans "traitement" ta première ligne est en dehors de <?php ?>
    Sinon le premier debugage à faire est d'afficher la requête UPDATE que tu executes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Dans "traitement" ta première ligne est en dehors de <?php ?>
    C'est une erreur de copier/coller.

    Citation Envoyé par sabotage Voir le message
    Sinon le premier debugage à faire est d'afficher la requête UPDATE que tu executes.
    J'ai avancé : maintenant ça marche jusqu'à la boucle .
    Il y a un message d'avertissement qui s'affiche : Warning: Invalid argument supplied for foreach() in fichier.php on line 158.
    Les titres et contenus des chapitres et les questions disparaissent après le traitement PHP.

    Voici le code PHP :
    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
    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
            $introduction_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['introduction_cours'])));
    	$conclusion_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_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 id_cours='$id_cours_tp'")
    				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
    					echo "Passage avant la boucle foreach : OK <b>Jusque là c'est bon.</b>";
    					// 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
    						echo "query_modification_chapitre : ".$query_modification_chapitre;
     
    						$_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
    							echo "query_modification_questions : ".$query_modification_questions;
    							$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 "query_modification_reponses : ".$query_modification_reponses;
    						}
    					echo "<br /><br />Passage après la boucle foreach : OK";
    					}
     
    				}
    		//	}
    			echo '</form>';
    			//}
    	//}
    ?>

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans une requête UPDATE, il faut un WHERE de la ligne que tu veux mettre à jour, sinon tu mets à jour toute la table avec les mêmes données.
    Ici ca sera l'id du chapitre qui doit donc faire partie du formulaire, dans un champs "hidden" par exemple.

    Ensuite je ne comprends pas ton foreach, un chapitre n'a qu'un seul titre et qu'un seul contenu.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Dans une requête UPDATE, il faut un WHERE de la ligne que tu veux mettre à jour, sinon tu mets à jour toute la table avec les mêmes données.
    Ici ca sera l'id du chapitre qui doit donc faire partie du formulaire, dans un champs "hidden" par exemple.
    J'ai mis des conditions WHERE dans les requêtes SQL.
    Pour l'identifiant du chapitre dans le champs hidden : sur la page, il y a autant de <textarea> avec le contenu du chapitre que de chapitre.
    C'est pour ça que j'essaie avec les array
    Citation Envoyé par sabotage Voir le message
    Ensuite je ne comprends pas ton foreach, un chapitre n'a qu'un seul titre et qu'un seul contenu.
    Un chapitre n'a qu'un seul titre et qu'un seul contenu. En ce qui concerne les questions et leurs réponses correspondantes, il peux y en avoir qu'une seule comme plusieurs.

    Si tu veux proposer ton code, vas-y !

    En une phrase : il faut que la page affiche les données du cours (introduction, titres et contenus des chapitres, contenus des questions et leurs réponses respectives, conclusion, etc...) dans des <textarea> ou des <input type="text" name /> pour que l'utilisateur puisse faire ses modifications.
    J'arrive à afficher les données issues de la base de données dans des zones de texte mais je n'arrive pas à faire les modifications (requêtes SQL : UPDATE) dans toutes les tables (test_site_cours_v2, test_site_chapitres_v2, test_site_questions_v2, test_site_reponses_v2).

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu veux proposer ton code, vas-y
    Je ne tape du code à la demande.

    J'ai mis des conditions Where
    Si tu n'as pas l'id du chapitre à mettre à jour dans ta requête comme je te l'ai indiqué, ce n'est pas bon.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Si tu n'as pas l'id du chapitre à mettre à jour dans ta requête comme je te l'ai indiqué, ce n'est pas bon.
    J'ai l'identifiant du chapitre, je l'affiche en faisant
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'Identifiant du chapitre : '.$id_chapitre;
    dans cette boucle :
    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
    while ($row = mysql_fetch_assoc($selection_cours)) {
    	// Affichage du titre du chapitre
    	if ($row['id_chapitre'] != $id_chapitre) {
    		echo 'Identifiant du chapitre : '.$id_chapitre; // Il est là !!!
    		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'];
    				}
    			}

  8. #8
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai dit : dans ta requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Voici les requêtes SQL :
    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
     
    $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

    Dans chaque requête SQL, il y a id_chapitre='$id_chapitre'.

    Le problème c'est que ça ne passe pas la boucle ...

    NB : Je n'ai plus l'avertissement, j'ai rajouté
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if (is_array($titre_chapitre_array)) {
    , les requêtes SQL ne s'exécutent toujours pas. Je continue de chercher...

  10. #10
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans chaque requête SQL, il y a id_chapitre='$id_chapitre'.
    J'ai dit dans la WHERE.

    L'id du chapitre est un élément fixe qui sert à désigner de manière immuable un chapitre, il n'est donc pas mis à jour et n'a rien à faire dans le SET.
    De plus $id_chapitre n'est pas défini dans ton code de requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Je ne le met pas à jour, c'est juste une condition dans les requêtes de modification !!!

    Toute façon, ça ne passe pas cette ligne, la boucle foreach :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($titre_chapitre_array as $id_chapitre => $titre_chapitre) {
    .

    Comment faire des requêtes SQL avec des array ?

  12. #12
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ensuite je ne comprends pas ton foreach, un chapitre n'a qu'un seul titre et qu'un seul contenu.
    Justement, c'est cette boucle qui pose problème. Etant donné qu'il n'y a pas un nombre défini de chapitres, de questions et leurs réponses respectives, j'utilise des array pour les traiter en PHP.

    Je voudrais :
    -modifier les informations générales (introduction, conclusion, etc...) du cours dans la table cours (Fonctionne),
    -modifier les chapitres (titres, contenus) dans la table chapitres (Pas OK),
    -modifier les question (contenus) dans la table questions (Pas OK)

    La différence qu'il y a, c'est que pour les chapitres et les questions, ce sont des array alors que pour les informations générales, ce sont des zones de texte classiques.

    Comment lui dire qu'il faut qu'il modifie (requêtes SQL UPDATE) les chapitres (titres et contenus) et les questions (contenus et leurs réponses respectives) ?

  13. #13
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu pouvais ne pas mettre des balises CODE a chaque mot, tes messages seraient plus lisibles.

    Je ne le met pas à jour, c'est juste une condition dans les requêtes de modification !!!
    Dans une requêtes les conditions sont en WHERE pas dans SET.
    Tant que tu n'auras pas écrit ta requête correctement et comme je te le dis depuis hier ça ne sert a rien d'aller plus loin.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Je ne comprends pas ce que tu veux dire.

    Quand je cherche la syntaxe de UPDATE avec des conditions, je vois :
    Pour une colonne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE "nom de table"
    SET "colonne 1" = [nouvelle valeur]
    WHERE "condition";

    Pour plusieurs colonnes :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE "nom de table"
    SET colonne 1 = [valeur 1], colonne 2 = [valeur 2]
    WHERE "condition";

    Juste pour info : quand j'exécute les requêtes SQL sur PHPMyAdmin, elles fonctionnent !

    Citation Envoyé par sabotage Voir le message
    Si tu pouvais ne pas mettre des balises CODE a chaque mot, tes messages seraient plus lisibles.
    Désolé mais je viens de recevoir un message pour me dire qu'il fallait que je mette les balises CODE !!

  15. #15
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    On va commencer par le début : est-ce qu'il faut utiliser une boucle foreach pour mettre à jour les 3 array (chapitres, questions, réponses) sachant que mes requêtes SQL sont bonnes (testées dans PHPMyAdmin) ?

  16. #16
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    oui il faut une boucle foreach dans laquelle va s'executer une requête qui va mettre à jour la base de données (et pas l'array).
    Chaque tour de boucle foreach va mettre à jour UNE ligne de la base de données.
    C'est pour cela qu'il faut une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE test_site_questions_v2
    SET ............
    WHERE question_id = xxxxx
    Comme je te le dis depuis le début, il faut que cet id soit inclus dans le formulaire, cela peut être une champs caché, ou dans le "name" du champs selon ce tu envois comme données et comment tu veux les retraiter ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($row['contenu_question']) {
    					echo '<br />Question : <input type="text" name="contenu_question[' . $row['id_question'] . ']" value="'.$row['contenu_question'].'"<br />';
    				}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Voici la boucle :
    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
    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[' . $row['id_chapitre'] . ']" value="'.$row['titre_chapitre'].'" /> <br />';
    		echo 'Contenu du chapitre n° <textarea name="contenu_chapitre[' . $row['id_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[' . $row['id_question'] . ']" value="'.$row['contenu_question'].'"<br />';
    		$id_question = $row['id_question'];
    	}
    }

    Donc maintenant, il y a les identifiants des questions, des chapitres dans des champs hidden du formulaire.

    Désormais, il faut changer la manière de récupérer en rajoutant les identifiants récupérés avec la boucle ($row['id_question'], $row['id_chapitre']). A noter que ce bloc n'est pas dans la boucle. Je pense qu'il faut passer par la variable $id_chapitre, non ?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $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;
    $contenu_reponse_array = (!empty($_POST['contenu_reponse']))? $_POST['contenu_reponse'] : NULL;

    Ce qui ferait :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $titre_chapitre_array = (!empty($_POST['titre_chapitre'.$id_chapitre]))? $_POST['titre_chapitre['.$id_chapitre.']'] : NULL;
    $contenu_chapitre_array = (!empty($_POST['contenu_chapitre'.$id_chapitre]))? $_POST['contenu_chapitre['.$id_chapitre.']'] : NULL;
    $contenu_question_array = (!empty($_POST['contenu_question'.$id_chapitre]))? $_POST['contenu_question['.$id_chapitre.']'] : NULL;
    $contenu_reponse_array = (!empty($_POST['contenu_reponse'.$id_chapitre.']']))? $_POST['contenu_reponse['.$id_chapitre.']'] : NULL;

  18. #18
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    J'arrive avec les deux codes PHP (affichage et traitement) :

    Celui de l'affichage :
    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
    <?php
    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[' . $row['id_chapitre'] . ']" value="'.$row['titre_chapitre'].'" /> <br />';
    		echo 'Contenu du chapitre n° <textarea name="contenu_chapitre[' . $row['id_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[' . $row['id_question'] . ']" value="'.$row['contenu_question'].'"<br />';
    		$id_question = $row['id_question'];
    	}
    }
    ?>

    Celui du traitement :
    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
    <?php
    $introduction_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['introduction_cours'])));
    $conclusion_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['conclusion_cours'])));
     
    $id_cours_tp = intval($_POST['id_cours_tp']);
     
    // On récupère des array
    $titre_chapitre_array = (empty($_POST['titre_chapitre'.$id_chapitre]))? $_POST['titre_chapitre['.$id_chapitre.']'] : NULL;
    $contenu_chapitre_array = (empty($_POST['contenu_chapitre'.$id_chapitre]))? $_POST['contenu_chapitre['.$id_chapitre.']'] : NULL;
    $contenu_question_array = (empty($_POST['contenu_question'.$id_chapitre]))? $_POST['contenu_question['.$id_chapitre.']'] : NULL;
    $contenu_reponse_array = (empty($_POST['contenu_reponse'.$id_chapitre.']']))? $_POST['contenu_reponse['.$id_chapitre.']'] : 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 id_cours='$id_cours_tp'")
    		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 $id_chapitre => $titre_chapitre) {
    		$titre_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_chapitre_array[$id_chapitre]))? $titre_chapitre_array[$id_chapitre] : ''));
    		$contenu_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_chapitre_array[$id_chapitre]))? $contenu_chapitre_array[$id_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',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
     
     
    		// Boucle permettant de modifier les les questions/réponses dans la base de données - DEBUT
    		foreach($question_chapitre_array[$id_chapitre] as $num_question => $question_chapitre) {
    			$question_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($question_chapitre_array[$id_chapitre][$num_question]))? $question_chapitre_array[$id_chapitre][$num_question] : ''));
    			$reponse_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($reponse_chapitre_array[$id_chapitre][$num_question]))? $reponse_chapitre_array[$id_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>';
    		echo 'Vous avez modifié.';
    	}
    ?>

    Avec ce code : lors de la soumission du formulaire, une page blanche s'affiche et il n'y a pas de modification dans la base de données.

    Est-ce que le code d'affichage est bon ?
    Qu'est-ce qu'il ne va pas dans le traitement PHP ? (Aucune requête SQL s'exécute.)

    Je sais que je vais lentement mais quand cette page fonctionnera, ce sera bon.

  19. #19
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'écoutes toujours pas ce que je te dis depuis le début.
    Dans ta première requête tu mets à jour les cours. Cette requête doit donc contenir une condition WHERE id_cours = xxxx

    Ensuite tu as une requête inutile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_cours
    		FROM test_site_cours_v2
    		WHERE id_cours='$id_cours_tp'"
    En français : Que vaut id_cours dans la table test_site_cours_v2 quand id_cours vaut $id_cours_tp.
    Je pense que la réponse c'est $id_cours_tp

    Même chose en dessous avec id_chapitre.

    Pour finir, à quoi sert la sous-requête sur l'auteur que tu remets dans toutes tes requêtes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    J'ai ajouté id_cours='$id_cours_tp' dans ces requêtes SQL :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $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 id_cours='$id_cours_tp'
    AND 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
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query_modification_chapitre=mysql_query("
    UPDATE test_site_chapitres_v2
    SET id_cours='$id_cours_tp', titre_chapitre='$titre_chapitre',contenu_chapitre='$contenu_chapitre',date_maj_chapitre=now()
    WHERE id_cours='$id_cours_tp'
    AND 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
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $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 id_cours='$id_cours_tp'
    AND 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
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $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 id_cours='$id_cours_tp'
    AND 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

    Est-ce que c'est mieux ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [PDO] Requête update dans une boucle de tableau
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/05/2015, 08h55
  2. Réponses: 1
    Dernier message: 17/09/2014, 01h53
  3. Requête update dans une boucle for
    Par boubounagh dans le forum JDBC
    Réponses: 3
    Dernier message: 13/01/2012, 14h18
  4. [MySQL] Exécuter une requête UPDATE dans une boucle
    Par vacknov dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/10/2008, 17h46
  5. Réponses: 7
    Dernier message: 26/07/2005, 16h41

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