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. #21
    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
    Non, quand tu veux mettre à jour un chapitre, c'est evidemment l'id du chapitre qui sert à identifier la ligne à mettre à jour et pas l'id du cours.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  2. #22
    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
    La voici modifiée :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $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_chapitre='$id_chapitre'
    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

    En ce qui concerne les requêtes SQL, est-ce que c'est bon ?

  3. #23
    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
    Tu n'as pas répondu pour les sous-requêtes "auteur"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #24
    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
    J'ai rajouté AND pseudo_utilisateur='$pseudo_utilisateur' (permet de vérifier le pseudo) dans toutes les requêtes SQL ce qui fait :
    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
    $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')
    AND pseudo_utilisateur='$pseudo_utilisateur')")
    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
     
    $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_chapitre='$id_chapitre' AND auteur_chapitre
    IN (SELECT pseudo_utilisateur
    FROM  test_site_utilisateur
    WHERE (acces_utilisateur='1' OR acces_utilisateur='3' OR acces_utilisateur='4')
    AND pseudo_utilisateur='$pseudo_utilisateur')")
    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
     
    $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')
    AND pseudo_utilisateur='$pseudo_utilisateur')")
    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 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')
    AND pseudo_utilisateur='$pseudo_utilisateur')")
    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 pour les requêtes SQL, c'est bon ?

  5. #25
    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
    On n'a toujours pas l'explication de la sous-requête sur l'auteur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #26
    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
    C'est pour vérifier si l'auteur est dans la table des utilisateurs ayant soit 1 soit 3 soit 4 comme accès tout simplement.

    On est d'accord qu'il n'y a pas forcément besoin de faire ça mais ce n'est pas à cause de ça que la boucle ne fonctionne pas.

    J'ai supprimé les deux boucles dans le traitement PHP, voici les codes actualisés :

    La requête SQL "générale" :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $selection_cours=mysql_query("
    SELECT test_site_chapitres_v2.id_chapitre, test_site_questions_v2.id_question,titre_chapitre, contenu_question, contenu_chapitre
    FROM test_site_chapitres_v2
    LEFT JOIN test_site_questions_v2
    ON test_site_chapitres_v2.id_chapitre = test_site_questions_v2.id_chapitre
    AND test_site_chapitres_v2.id_cours='$id_cours_tp'
    WHERE test_site_chapitres_v2.id_cours='$id_cours_tp'
    ORDER BY id_chapitre ASC")
    or die('Erreur lors de la sélection de l\'identifiant du chapitre du titre, du contenu des chapitres et des questions d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL

    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
    <?php
    while ($row = mysql_fetch_assoc($selection_cours)) {
    	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'];
    	}
    	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'];
    	}
    }
    echo '<input type="submit" value="Modifier mon Cours/TP" name="modifier_cours_tp" />';
    ?>

    Le traitement PHP :
    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
    <?php
    $introduction_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['introduction_cours'])));
    $conclusion_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['conclusion_cours'])));
     
    $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 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')
    		AND pseudo_utilisateur='$pseudo_utilisateur')")
    		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();
     
    		  if(empty($titre_chapitre_array)&&empty($contenu_chapitre_array)&&empty($contenu_question_array)&&empty($contenu_reponse_array)) {
    			  echo "Veuillez saisir au moins un chapitre et au moins une question sans oublier sa réponse.";
    			  exit();
    		  }		
    	  else
    		  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] : ''));
    			  $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_chapitre='$id_chapitre'
    			  AND auteur_chapitre
    			  IN (SELECT pseudo_utilisateur
    			  FROM  test_site_utilisateur
    			  WHERE (acces_utilisateur='1' OR acces_utilisateur='3' OR acces_utilisateur='4')
    			  AND pseudo_utilisateur='$pseudo_utilisateur')")
    			  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
     
    			  foreach($question_chapitre_array[$id_chapitre] as $num_question => $question_chapitre) {
    				  $question_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_question_array[$id_chapitre][$num_question]))? $contenu_question_array[$id_chapitre][$num_question] : ''));
    				  $reponse_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_reponse_array[$id_chapitre][$num_question]))? $contenu_reponse_array[$id_chapitre][$num_question] : ''));
    				  $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')
    				  AND pseudo_utilisateur='$pseudo_utilisateur')")
    				  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 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')
    				  AND pseudo_utilisateur='$pseudo_utilisateur')")
    				  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
    			  }
    		  }	
    	  }
    	  echo '</form>';
    	  echo 'Vous avez modifié.';
      }
    ?>

    J'ai supprimé les deux boucles while.

    Qu'est-ce qu'il ne va pas dans le traitement PHP (sachant que les requêtes SQL sont désormais bonnes) ?

  7. #27
    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
    C'est pour vérifier si l'auteur est dans la table des utilisateurs ayant soit 1 soit 3 soit 4 comme accès tout simplement.
    C'est l'utilisateur qui fait la mise à jour alors qu'il faut contrôler, pas celui qui est actuellement dans la base.
    Dans tous les cas, cela ne sert à rien de refaire la vérification pour chaque cours, chaque chapitre, chaque question mise à jour : fais le contrôle en entrée de traitement et c'est reglé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $titre_chapitre_array = (!empty($_POST['titre_chapitre'.$id_chapitre]))? $_POST['titre_chapitre['.$id_chapitre.']'] : NULL;
    $id_chapitre n'est pas défini dans ce code.
    Tu devrais développer en affichant toutes les erreurs PHP, cela te signalerait ce genre de problème.

    sachant que les requêtes SQL sont désormais bonnes
    bof.
    tu as encore id_cours qui se ballade dans la table des questions alors que je t'ai déjà dit qu'il n'avait rien à y faire.
    Également tu fais une mise à jour de id_chapitre et de reponse_question dans la table questions alors qu'ils ne sont pas présents dans ton formulaire.

    Tu devrais regarder le contenu de ton $_POST pour mieux comprendre ce que tu fais
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #28
    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
    J'ai enlevé la modification de l'identifiant du cours dans la table des question, j'ai ajouté sur l'affichage des réponses.
    Par contre, il faut modifier cette requête SQL pour sélectionner uniquement les questions et les réponses du bon cours :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $selection_cours=mysql_query("
    SELECT test_site_chapitres_v2.id_chapitre, test_site_questions_v2.id_question,titre_chapitre, contenu_question, contenu_chapitre, test_site_reponses_v2.texte_reponse
    FROM test_site_reponses_v2, test_site_chapitres_v2
    LEFT JOIN test_site_questions_v2
    ON test_site_chapitres_v2.id_chapitre = test_site_questions_v2.id_chapitre
    AND test_site_chapitres_v2.id_cours='$id_cours_tp'
    WHERE test_site_chapitres_v2.id_cours='$id_cours_tp'
    ORDER BY id_chapitre ASC")
    or die('Erreur lors de la sélection de l\'identifiant du chapitre du titre, du contenu des chapitres et des questions d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL

    Voici la boucle d'affichage (dans laquelle j'ai rajouté les réponses) :
    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
     
    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="'.html_entity_decode(stripslashes($row['titre_chapitre'])).'" /> <br />';
    		echo 'Contenu du chapitre n° <textarea name="contenu_chapitre[' . $row['id_chapitre'] . ']" rows=10 cols=40>'.html_entity_decode(stripslashes($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 />';
    		echo '<br />Réponse : <input type="text" name="contenu_question[' . $row['id_reponse'] . ']" value="'.$row['texte_reponse'].'"<br />';
    		$id_question = $row['id_question'];
    		$id_reponse = $row['id_reponse'];
    	}
    }

    Voici le traitement PHP :
    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
     
    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 id_cours='$id_cours_tp' AND auteur_cours='$pseudo_utilisateur'") 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 enregistre en BDD si les zones de texte sont remplies
    			if(empty($titre_chapitre_array)&&empty($contenu_chapitre_array)&&empty($contenu_question_array)&&empty($contenu_reponse_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 - Cette boucle ne fonctionne pas
    			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 id_chapitre='$id_chapitre' AND auteur_chapitre='$pseudo_utilisateur'") 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 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($contenu_question_array[$id_chapitre][$num_question]))? $contenu_question_array[$id_chapitre][$num_question] : ''));
    					$reponse_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_reponse_array[$id_chapitre][$num_question]))? $contenu_reponse_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_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='$pseudo_utilisateur'") 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 id_cours='$id_cours_tp' AND auteur_question='$pseudo_utilisateur'") 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 questions/réponses dans la base de données - FIN
    				}
    			}	
    		}
    		echo '</form>';
    		echo 'Vous avez modifié.';
    	}

    La première chose à faire maintenant, c'est d'ajouter une jointure pour qu'il ne sélectionne que les réponses des bonnes questions du bon cours. Peux-tu m'aider STP ? J'apprécie ta patience, je suis conscient que je vais lentement mais j'espère qu'on va finir par y arriver !!!

    Cette requête SQL me semble bonne (bon cours/bonnes questions/bonnes réponses) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $selection_cours=mysql_query("
    SELECT test_site_chapitres_v2.id_chapitre, test_site_questions_v2.id_question,titre_chapitre, contenu_question, contenu_chapitre, test_site_reponses_v2.texte_reponse
    FROM test_site_reponses_v2, test_site_chapitres_v2
    LEFT JOIN test_site_questions_v2
    ON test_site_chapitres_v2.id_chapitre = test_site_questions_v2.id_chapitre 
    AND test_site_chapitres_v2.id_cours='$id_cours_tp'
    WHERE test_site_chapitres_v2.id_cours='$id_cours_tp'
    AND test_site_reponses_v2.id_question=test_site_questions_v2.id_question
    ORDER BY id_chapitre ASC");

    Qu'est-ce que tu en penses ?

    La requête SQL est bonne.

  9. #29
    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
    Juste pour info, la requête SQL est bonne. Désormais, uniquement les chapitres, les questions et leurs réponses respectives s'affichent dans le bon cours.

    Lors de la soumission du formulaire, il y a toujours une page blanche qui s'affiche ce qui veut dire qu'il ne rentre pas dans les tests.

    Il y aurait t'il pas un problème dans ce bloc :
    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;
    ?

    A noter que j'ai supprimé les identifiants. Toute façon en les mettant, ça fait la même chose (aucune modification dans la base de données et affichage d'une page blanche).

  10. #30
    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 y aurait t'il pas un problème dans ce bloc :
    Je t'ai déjà dit que si un peu plus haut.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #31
    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
    J'ai mis print_r($_POST); avant if (is_array($titre_chapitre_array)) {, il m'affiche :
    Array ( [id_cours_tp] => 230 [cours_tpok] => Titre )

    cours_tpok n'est nulle part dans le traitement PHP.

    Il ne faut pas le récupérer en $_GET ?

  12. #32
    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
    On n'a jamais parlé de "cours_tpok" il sort d'ou celui la ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #33
    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 la page qui permet de lister les cours, il y a <input type="hidden" name="id_cours_tp" value="'.$row['id_cours'].'" /> et <input type="submit" name="cours_tpok" value="'.$row['titre_cours'].'" />.

  14. #34
    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
    Je ne sais pas de quelle requête devait venir $row['titre_cours'] mais il n'est pas bon.
    De toute façon je ne vois pas pourquoi ton bouton submit contiendrait le titre du cours.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #35
    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
    Tu mettrais quoi à la place du bloc ?

  16. #36
    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
    la "value" du bouton submit c'est le texte écrit dedans.
    "Valider" par exemple
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #37
    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
    Pour info, j'ai remplacé ce bloc par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $titre_chapitre_array=$_POST['titre_chapitre[' . $id_chapitre. ']'];
    $contenu_chapitre_array=$_POST['contenu_chapitre[' . $id_chapitre. ']'];
    $contenu_question_array=$_POST['contenu_question[' . $id_question. ']'];
    $contenu_reponse_array=$_POST['contenu_reponse[' . $id_reponse. ']'];

    Mais, ça fait toujours pareil.

  18. #38
    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
    Ou est défini $id_chapitre ? $id_question ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #39
    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 la boucle while.

    Ce bloc est en dessous de la boucle while.

    A mon avis, il ne trouve pas $id_chapitre, $id_question et $id_reponse car ces variables proviennent de la boucle while et que ce bloc est en dessous de la boucle while.

    J'ai essayé de mettre le bloc dans la boucle while mais il n'y a pas eu de changement.

    Comment utiliser une ligne ou des variables qui proviennent d'une boucle while?

  20. #40
    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
    Montre nous le code, ça sera plus facile que de nous l'expliquer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 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