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

Vue hybride

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Par défaut 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
    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 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
    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
    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 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
    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
    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 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
    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) ?

  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
    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

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

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