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

Langage PHP Discussion :

Insertion SQL avec boucles foreach


Sujet :

Langage PHP

  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 Insertion SQL avec boucles foreach
    Bonjour,

    En pièces jointes, deux fichiers :
    -fichier_1.php : le fichier (dans lequel tout fonctionne) où j'aimerais ajouter une insertion de sous-chapitre
    -fichier_2.php : le fichier dans lequel j'ai ajouté une boucle foreach pour insérer les sous-chapitres dans la base de données

    Je n'arrive pas à insérer les sous-chapitres par rapport aux chapitres. C'est la même chose que j'ai fait pour l'insertion des chapitres par rapport au cours.

    Ce n'est pas un problème de structure de tables SQL mais de boucles PHP foreach.

    Le problème est qu'il ne reconnait pas $titre_sous_chapitre et $contenu_sous_chapitre. J'essaye de le faire avec des array.

    Comment faire pour insérer les chapitres dans la table chapitres et les sous-chapitres dans la table sous_chapitres ?

    Petite précision : Les questions et réponses attendues tiennent compte uniquement des chapitres.

    Merci de votre aide !

  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
    Ce serait gentil de nous dire exactement sur quel fichier et quelle partie du code tu obtiens quelles erreurs precisemment.
    Parce que tes 400 lignes de code en pagaille c'est assez indigeste.
    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
    Dans fichier_2.php, voici la partie qui traite des sous-chapitres :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach($titre_sous_chapitre_array as $num_sous_chapitre => $titre_sous_chapitre) {
    	$titre_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_sous_chapitre[$num_sous_chapitre]))? $titre_sous_chapitre[$num_sous_chapitre] : ''));
    	$contenu_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_sous_chapitre_array[$num_sous_chapitre]))? $contenu_sous_chapitre_array[$num_sous_chapitre] : ''));
     
     
    	// Insertion des chapitres dans la base de données
    	$query_insertion_sous_chapitre=mysql_query("
            INSERT INTO sous_chapitres (id_cours,id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre)
            VALUES (".$_SESSION['id_cours'].",".$_SESSION['id_chapitre'].",'".$titre_sous_chapitre."','".$contenu_sous_chapitre."',now(),'".$id_utilisateur."')")
            or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre, date de dépot du chapitre, auteur du chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    	$_SESSION['id_sous_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du sous-chapitre)
    }

    $titre_sous_chapitre et $contenu_sous_chapitre ne récupèrent pas les données. En ce qui concerne les chapitres, c'est bon.

    Le but recherché : Insérer tout ce qui concerne les chapitres dans la table chapitres et tout ce qui concerne les sous-chapitres dans la table sous_chapitres.

    En ne gardant que la boucle foreach ci-dessus, j'obtiens l'erreur suivante :
    Erreur lors de l'insertion d'un chapitre d'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre, date de dépot du chapitre, auteur du chapitre)You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''','',now(),'6')' at line 1
    J'en déduis qu'il ne trouve pas $titre_sous_chapitre et $contenu_sous_chapitre que j'essaye de récupérer via ces deux lignes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $titre_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_sous_chapitre[$num_sous_chapitre]))? $titre_sous_chapitre[$num_sous_chapitre] : ''));
    $contenu_sous_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_sous_chapitre_array[$num_sous_chapitre]))? $contenu_sous_chapitre_array[$num_sous_chapitre] : ''));

    Voici plus d'explications :
    -titre_sous_chapitre : voici la zone de texte <input name="titre_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" type="text" />-contenu_sous_chapitre_array : voici la zone de texte <textarea name="contenu_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" rows="" cols=""></textarea></p>
    -num_sous_chapitre : c'est la variable qu'utilise la boucle for

    Je récupère les deux array avec :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $titre_sous_chapitre_array = (!empty($_POST['titre_sous_chapitre']))? $_POST['titre_sous_chapitre'] : NULL;
    $contenu_sous_chapitre_array = (!empty($_POST['contenu_sous_chapitre']))? $_POST['contenu_sous_chapitre'] : NULL;

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_sous_chapitre[$num_sous_chapitre]))? $titre_sous_chapitre[$num_sous_chapitre] : ''));
    C'est le concours de la syntaxe la plus affreuse ?

    1 - stripcslashes et htmlspecialchars ne servent a rien ici, je te l'ai déjà dit
    2 - il n'y a pas à definir des valeurs par défaut pour chacun de tes champs : soit la valeur existe et tu peux faire l'insertion, soit elle n'existe pas et tout arrête tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_POST['titre_sous_chapitre'], $_POST['contenu_sous_chapitre'])) {
              // insertion
    }
    else {
        // pas d'insertion
    }
    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
    Ok pour la syntaxe.

    Mais, ce sont tableaux array.

    Au maximum, il est possible d'insérer dans la base de données (boucles for dans le formulaire) :
    -4 chapitres
    -5 sous-chapitres
    -5 questions

    Il faut traiter ça avec des tableaux, non ? L'utilisateur peut insérer uniquement que 2 chapitres, 3 sous-chapitre et 1 question par exemple.

    En résumé, j'utilise les tableaux pour exécuter les requêtes SQL INSERT INTO.
    Il faut insérer dans la base de données (au minimum) :
    -dans la table cours : les informations générales du cours,
    -dans la table chapitres : il faut insérer les données des chapitres (identifiant du cours, titre du chapitre, contenu du chapitre,
    -dans la table sous_chapitres : il faut insérer les données des sous-chapitres (identifiant du bon chapitre, titre du sous-chapitre, contenu du sous-chapitre)
    -dans la table questions : il faut insérer les données des questions (identifiant du chapitre, la question)

    Je pense qu'il faut utiliser des boucles foreach pour alimenter les tables : chapitres, sous_chapitres, questions avec les bons identifiants. Concernant la table cours, ce n'est pas la peine.

    Pour information, voici le formulaire HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      <form method="post">
        <input name="titre_cours_tp" type="text" />
        <input name="auteur_cours" type="text" value="<?php if(isset($_SESSION['pseudo_utilisateur'])) {echo $_SESSION['pseudo_utilisateur'];}?>"/>
        <input type="text" name="date_publication_tp" size="200" value='<?php $jour = array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");$mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");$dateDuJour = $jour[date("w")]." ".date("d")." ".$mois[date("n")]." ".date("Y"); echo $dateDuJour;?>'/>
        <input type="date" name="date_debut_validation_cours_tp" />
        <input type="date" name="date_cloture_validation_cours_tp" />
        <textarea name="introduction_cours" rows="" cols=""></textarea>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    // on boucle (par exemple) pour 4 CHAPITRES 
    for($num_chapitre=1; $num_chapitre<5; $num_chapitre++)
    { 
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <p><b>Titre du chapitre <?php echo $num_chapitre; ?> </b>:
        <input name="titre_chapitre[<?php echo $num_chapitre; ?>]" type="text" />
      </p>
      <p><b>Contenu du chapitre <?php echo $num_chapitre; ?> </b>:
        <textarea name="contenu_chapitre[<?php echo $num_chapitre; ?>]" rows="" cols=""></textarea>
      </p>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    	// on boucle (par exemple) pour 5 SOUS-CHAPITRES
    	for($num_sous_chapitre=1; $num_sous_chapitre<6; $num_sous_chapitre++) 
    	{ 
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <p><i>Titre du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :
        <input name="titre_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" type="text" />
      </i></p>
      <p><i>Contenu du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :</i>
        <textarea name="contenu_sous_chapitre[<?php echo $num_sous_chapitre; ?>]" rows="" cols=""></textarea></p>

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    	// on boucle (par exemple) pour 5 QUESTIONS 
    	for($num_question=1; $num_question<6; $num_question++) 
    	{ 
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <p>Question <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="question_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>]" type="text" />
      </p>
      <p>Réponse <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="reponse_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>]" type="text" />
      </p>
     </p>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
     	// FIN MODULE
    } // fin boucle chapitre 
    	} // fin boucle question
    } // fin boucle sous-chapitre 
     
    ?>

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <textarea name="conclusion_cours" rows="" cols=""></textarea>
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    </form>

    Comme tu peux le voir, j'ai nommé les zones de texte comme ça (sous forme de tableaux) : nom_champs[numero_(sous_)chapitre][numero_question].

  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
    Il s'agit pour toi d'écrire un script cohérent dans son déroulement.
    Actuellement ce n'est pas le cas.
    1 - on verifie si les données nécessaires au traitement de la requête existent
    2 - on fait la requête.
    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
    Comment faire pour traiter ce formulaire ?

    A mon avis, il faut faire des boucles foreach pour (le nombre est variable) :
    -les chapitres
    -les sous-chapitres
    -les questions

    Peux-tu m'aider à les faire STP ?

  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
    Commence par écrire un traitement cohérent comme je te l'ai expliqué.
    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 le traitement PHP du formulaire qui ne demande qu'à être modifié :
    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
    <?php 
    // RECUPERATION / TRAITEMENT
    $matiere_choisie=mysql_real_escape_string($_POST['matieres']);
    $classe_choisie=mysql_real_escape_string($_POST['classes']);
    $titre_cours_tp=mysql_real_escape_string($_POST['titre_cours_tp']);
    $date_publication_tp=mysql_real_escape_string($_POST['date_publication_tp']);
    $date_cloture_validation_cours_tp=mysql_real_escape_string($_POST['date_cloture_validation_cours_tp']);
    $date_debut_validation_cours_tp=mysql_real_escape_string($_POST['date_debut_validation_cours_tp']);
    $auteur_cours=mysql_real_escape_string($_POST['auteur_cours']);
    $introduction_cours=mysql_real_escape_string($_POST['introduction_cours']);
    $conclusion_cours=mysql_real_escape_string($_POST['conclusion_cours']);
    // 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;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
    $titre_sous_chapitre_array = (!empty($_POST['titre_sous_chapitre']))? $_POST['titre_sous_chapitre'] : NULL;
    $contenu_sous_chapitre_array = (!empty($_POST['contenu_sous_chapitre']))? $_POST['contenu_sous_chapitre'] : NULL;
     
    if (is_array($titre_chapitre_array)) {  
    	if(isset($_POST['poster_cours_tp'])) {		
    	// => on enregistre en BDD si les zones de texte sont remplies - informations générales du Cours/TP
    		//if ($_POST['titre_cours_tp']==''||($_POST['auteur_cours']==''||($_POST['date_publication_tp']==''||($_POST['date_debut_validation_cours_tp']==''||($_POST['date_cloture_validation_cours_tp']==''))))) {  
    			//echo "Veuillez saisir les informations générales de votre Cours/TP dynamique.";
    			//exit();
    		//}
    		//else
    			$query_insertion_cours_tp=mysql_query("INSERT INTO cours (titre_cours,id_auteur,introduction_cours,conclusion_cours,date_publication_cours,date_cloture_validation_cours,date_debut_validation_cours,matiere_cours,classe_cours) SELECT '$titre_cours_tp',CONCAT(test_site_utilisateur.prenom_utilisateur,' ',test_site_utilisateur.nom_utilisateur),'$introduction_cours','$conclusion_cours',now(),'$date_cloture_validation_cours_tp','$date_debut_validation_cours_tp','$matiere_choisie','$classe_choisie' FROM test_site_utilisateur") or die('Erreur lors de l\'insertion d\'un Cours/TP (titre du cours, auteur du cours, introduction du cours, conclusion du cours, date de publication du cours, date de cloture de validation du cours, date de début de validation du cours, la matière et la classe)'.mysql_error()); // Envoie une requête à un serveur MySQL
    			$_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 les identifiants du cours et du chapitr pour les mettre dans les requêtes SQL d'insertion
    			$query_selection_cours_chapitre=mysql_query("SELECT cours.id_cours,chapitres.id_chapitre FROM cours,chapitres WHERE cours.titre_cours='$titre_cours_tp' AND cours.date_publication_cours=now() AND chapitres.id_auteur_chapitre='$id_utilisateur' AND chapitres.date_depot=now()") or die('Erreur lors de la sélection des identifiants du Cours/TP et du chapitre'.mysql_error()); // Envoie une requête à un serveur MySQL
    			// Boucle pour récupérer les identifiants du Cours/TP et des Chapitres - DEBUT
    			while($recuperation_identifiants_cours_chapitre = mysql_fetch_assoc($query_selection_cours_chapitre)) {
    				$recuperation_identifiants_cours_chapitre['id_cours'];
    				$_SESSION['id_cours']=$recuperation_identifiants_cours_chapitre['id_cours'];
    				$recuperation_identifiants_cours_chapitre['id_chapitre'];
    				$_SESSION['id_chapitre']=$recuperation_identifiants_cours_chapitre['id_chapitre'];
    			}
    			// Boucle pour récupérer les identifiants du Cours/TP et des Chapitres - FIN
     
    			// Boucle pour les Chapitres
    			foreach($titre_chapitre_array as $num_chapitre => $titre_chapitre) {
    				$titre_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : ''));
    				$contenu_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : ''));
    				// Insertion des chapitres dans la base de données
    				$query_insertion_chapitre=mysql_query("INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) VALUES (".$_SESSION['id_cours'].",'$titre_chapitre','$contenu_chapitre',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre, date de dépot du chapitre, auteur du chapitre)'.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 pour les Sous-Chapitre
    			foreach ($_POST['titre_sous_chapitre'] as $_SESSION['id_chapitre'] => $titre_sous_chapitre) {
    				$titre_sous_chapitre = mysql_real_escape_string(!empty($titre_sous_chapitre_array[$_SESSION['id_chapitre']]))? $titre_sous_chapitre_array[$_SESSION['id_chapitre']] : '';
    				$contenu_chapitre = mysql_real_escape_string(!empty($contenu_sous_chapitre_array[$_SESSION['id_chapitre']]))? $contenu_sous_chapitre_array[$_SESSION['id_chapitre']] : '';
     
    				// Insertion des sous-chapitres dans la base de données - à voir s'il faut faire deux requêtes SQL (une pour les titre et l'autre pour les contenu
    				$query_insertion_sous_chapitre=mysql_query("INSERT INTO sous_chapitres (id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES (".$_SESSION['id_chapitre'].",'".mysql_real_escape_string($titre_sous_chapitre)."','".mysql_real_escape_string($contenu_sous_chapitre)."',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un sous chapitre d\'un Cours/TP (identifiant du cours, titre du sous-chapitre, contenu du sous-chapitre, date de dépot du sous-chapitre, auteur du sous-chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    				$_SESSION['id_sous_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du sous-chapitre)
    			}
    			// Boucle pour les Questions/Réponses
    			foreach($question_chapitre_array[$num_chapitre] as $num_question => $question_chapitre) {
    				$question_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : ''));
    				$reponse_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($reponse_chapitre_array[$num_chapitre][$num_question]))? $reponse_chapitre_array[$num_chapitre][$num_question] : ''));
    				// Insertion des questions/réponses dans la base de données
    				$query_insertion_questions=mysql_query("INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question) VALUES (".$_SESSION['id_chapitre'].",'$question_chapitre',now(),'".$id_utilisateur."','1')") or die('Erreur lors de l\'insertion d\'une question d\'un chapitre d\'un Cours/TP (identifiant du chapitre, contenu de la question, date de dépot de la question, auteur de la question)'.mysql_error()); // Envoie une requête à un serveur MySQL
    				$_SESSION['id_question']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la question)
    				$query_insertion_reponses=mysql_query("INSERT INTO reponses (id_question,texte_reponse_attendue,date_depot) VALUES (".$_SESSION['id_question'].",'$reponse_chapitre',now())") or die('Erreur lors de l\'insertion d\'une réponse à une question d\'un Cours/TP (identifiants du cours/du chapitre/de la réponse, contenu de la réponse, date de dépot de la réponse'.mysql_error()); // Envoie une requête à un serveur MySQL
    				$_SESSION['id_reponse']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la reponse)
    			}
    		}
    		echo "Votre Cours/TP a été posté.";
    	}
    ?>

    Est-ce que tu peux m'aider à le changer STP ?
    La table cours se remplit avec 5 enregistrements.
    La table chapitres se remplit.
    La table questions se remplit sans les contenus des questions.
    La table sous_chapitre ne se remplit pas.

  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
    Tu nous montres un code ou tu as toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_real_escape_string(htmlspecialchars(stripcslashes(
    Donc tu n'as encore rien fait du tout.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $question_chapitre = mysql_real_escape_string(htmlspecialchars(stripcslashes(!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : ''));
    Est-ce qu'une $question_chapitre peut être vide ?
    Si ce n'est possible pourquoi tu fais l'insertion quand même quand elle est vide ?

    Pourquoi tu utilises des sessions PHP ?
    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
    Actuellement, c'est ce code qui s'occupe des insertions des cours (informations générales, chapitres, sous-chapitres, questions et leurs réponses respectives).

    Selon moi, il faut faire des boucles foreach pour les chapitres, les sous-chapitres, les questions et leurs réponses respectives.

    Sur une autre page, j'ai cette boucle :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Boucle pour modifier les titres des chapitres
    foreach ($_POST['titre_chapitre'] as $id_chapitre_titre => $titre_chapitre) {
    	$sql_chapitre_titre="
    	UPDATE chapitres
    	SET titre_chapitre='".mysql_real_escape_string($titre_chapitre)."',date_maj_chapitre=now(), id_auteur_chapitre='".$_SESSION['id_utilisateur']."'
    	WHERE id_chapitre='".$id_chapitre_titre."'
    	AND id_cours='".$_SESSION['id_cours']."'";
    	mysql_query($sql_chapitre_titre)
    	or die('Erreur sur la requête SQL qui met à jour les titres des chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    }

    Je récupère $id_chapitre_titre dans la base de données.

    Pour régler mon problème, à mon avis il faut commencer par là. Néanmoins, une différence existe : je ne peux pas récupérer des données ($id_chapitre_titre) dans la base de données puisque j'essaye de faire des insertions !
    Comment adapter cette boucle foreach à mon problème d'insertion d'un cours (informations générales, chapitres, sous-chapitres, questions et leurs réponses respectives attendues ?

    En cherchant des exemples de boucles foreach, j'ai trouvé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($_POST as $key=>$val) 
    { 
       $list .= "'".$val."',"; 
    }

    Il faudrait en faire 3 et remplacer $_POST par les chapitres, les sous-chapitres et les questions.

    Les sessions PHP ne servent à rien. J'ai supprimé les htmlspecialchars(stripcslashes.

    C'est de l'insertion multiple dans différentes tables (chapitres, sous_chapitres, questions, reponses).

    J'avance ! Voici le code actualisé avec lequel tout fonctionne sauf qu'il insère des chaines vides dans la table sous_chapitre pour les champs titre_sous_chapitre et contenu_sous_chapitre (en gras) :
    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
    <?php 
    // RECUPERATION / TRAITEMENT
    $matiere_choisie=mysql_real_escape_string($_POST['matieres']);
    $classe_choisie=mysql_real_escape_string($_POST['classes']);
    $titre_cours_tp=mysql_real_escape_string($_POST['titre_cours_tp']);
    $date_publication_tp=mysql_real_escape_string($_POST['date_publication_tp']);
    $date_cloture_validation_cours_tp=mysql_real_escape_string($_POST['date_cloture_validation_cours_tp']);
    $date_debut_validation_cours_tp=mysql_real_escape_string($_POST['date_debut_validation_cours_tp']);
    $auteur_cours=mysql_real_escape_string($_POST['auteur_cours']);
    $introduction_cours=mysql_real_escape_string($_POST['introduction_cours']);
    $conclusion_cours=mysql_real_escape_string($_POST['conclusion_cours']);
    // 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;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
    $titre_sous_chapitre_array = (!empty($_POST['titre_sous_chapitre']))? $_POST['titre_sous_chapitre'] : NULL;
    $contenu_sous_chapitre_array = (!empty($_POST['contenu_sous_chapitre']))? $_POST['contenu_sous_chapitre'] : NULL;
     
    if (is_array($titre_chapitre_array)) {  
    	if(isset($_POST['poster_cours_tp'])) {
    		$query_insertion_cours_tp=mysql_query("INSERT INTO cours (titre_cours,id_auteur,introduction_cours,conclusion_cours,date_publication_cours,date_cloture_validation_cours,date_debut_validation_cours,matiere_cours,classe_cours) VALUES ('$titre_cours_tp','$id_utilisateur','$introduction_cours','$conclusion_cours',now(),'$date_cloture_validation_cours_tp','$date_debut_validation_cours_tp','$matiere_choisie','$classe_choisie')") or die('Erreur lors de l\'insertion d\'un Cours/TP (titre du cours, auteur du cours, introduction du cours, conclusion du cours, date de publication du cours, date de cloture de validation du cours, date de début de validation du cours, la matière et la classe)'.mysql_error()); // Envoie une requête à un serveur MySQL
    		$_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)			
    		// Boucle pour les Chapitres
    		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] : '';
    			// Insertion des chapitres dans la base de données
    			$query_insertion_chapitre=mysql_query("INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) VALUES (".$_SESSION['id_cours'].",'$titre_chapitre','$contenu_chapitre',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre, date de dépot du chapitre, auteur du chapitre)'.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 pour les Sous-Chapitres
    		foreach ($titre_sous_chapitre_array as $num_sous_chapitre => $titre_sous_chapitre) {
    			$titre_sous_chapitre = mysql_real_escape_string(!empty($titre_sous_chapitre_array[$num_sous_chapitre]))? $titre_sous_chapitre_array[$num_sous_chapitre] : '';
    			$contenu_sous_chapitre = mysql_real_escape_string(!empty($contenu_sous_chapitre_array))? $contenu_sous_chapitre_array : '';
    			// Insertion des sous-chapitres dans la base de données
    			$query_insertion_sous_chapitre=mysql_query("INSERT INTO sous_chapitres (id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('".$_SESSION['id_chapitre']."','".mysql_real_escape_string($titre_sous_chapitre)."','".mysql_real_escape_string($contenu_sous_chapitre)."',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un sous chapitre d\'un Cours/TP (identifiant du chapitre, titre du sous-chapitre, contenu du sous-chapitre, date de dépot du sous-chapitre, auteur du sous-chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    			
    		// Boucle pour les Questions/Réponses
    		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] : '';
    			// Insertion des questions/réponses dans la base de données
    			$query_insertion_questions=mysql_query("INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question) VALUES (".$_SESSION['id_chapitre'].",'$question_chapitre',now(),'".$id_utilisateur."','1')") or die('Erreur lors de l\'insertion d\'une question d\'un chapitre d\'un Cours/TP (identifiant du chapitre, contenu de la question, date de dépot de la question, auteur de la question)'.mysql_error()); // Envoie une requête à un serveur MySQL
    			$_SESSION['id_question']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la question)
    			$query_insertion_reponses=mysql_query("INSERT INTO reponses (id_question,texte_reponse_attendue,date_depot) VALUES (".$_SESSION['id_question'].",'$reponse_chapitre',now())") or die('Erreur lors de l\'insertion d\'une réponse à une question d\'un Cours/TP (identifiants du cours/du chapitre/de la réponse, contenu de la réponse, date de dépot de la réponse'.mysql_error()); // Envoie une requête à un serveur MySQL
    			$_SESSION['id_reponse']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la reponse)
    		}
    	}	
    }
    echo "OK.";
    }
    }
    ?>

    Je confirme que le problème c'est que $titre_sous_chapitre et $contenu_sous_chapitre sont vides. Pour les chapitres, les deux variables ne sont pas vides, elles se remplissent.

    En mettant $titre_sous_chapitre = mysql_real_escape_string(!empty($titre_sous_chapitre_array[$num_sous_chapitre]))? $titre_sous_chapitre_array[$num_sous_chapitre] : ''; et $contenu_sous_chapitre = mysql_real_escape_string(!empty($contenu_sous_chapitre_array[$num_sous_chapitre]))? $contenu_sous_chapitre_array[$num_sous_chapitre] : '';, rien ne s'insère.

    Par contre, si je mets $titre_sous_chapitre = mysql_real_escape_string(!empty($titre_sous_chapitre_array))? $titre_sous_chapitre_array : ''; et $contenu_sous_chapitre = mysql_real_escape_string(!empty($contenu_sous_chapitre_array))? $contenu_sous_chapitre_array : '';, le mot "Array" s'insère dans les champs titre_sous_chapitre et contenu_sous_chapitre.

    Comment faire pour insérer les bonnes données dans ces deux champs ? A noter que les autres champs s'insèrent avec les bonnes valeurs.

    La boucle foreach qui concerne les chapitres fonctionne (titre_chapitre et contenu_chapitre ne sont pas vides). Si je la copie en remplaçant titre_chapitre_array par titre_sous_chapitre_array, num_chapitre par num_sous_chapitre, titre_chapitre par titre_sous_chapitre, les titres et les contenus sont vides. Voici les déclarations : $titre_sous_chapitre_array = (!empty($_POST['titre_sous_chapitre']))? $_POST['titre_sous_chapitre'] : NULL; et $contenu_sous_chapitre_array = (!empty($_POST['contenu_sous_chapitre']))? $_POST['contenu_sous_chapitre'] : NULL;.

    Pourquoi l'insertion des chapitres fonctionne alors que l'insertion des sous-chapitres non ? C'est dû aux deux variables $titre_sous_chapitre et $contenu_sous_chapitre qui restent vides. Pourquoi ?

    En mettant $titre_sous_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL; et $contenu_sous_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;, les deux variables ne sont pas vides, elles prennent les données du chapitre.
    Pourquoi avec les sous-chapitres, elles sont vides ?!

    J'ai modifié les noms des zones de texte du titre du sous-chapitre et du contenu du sous-chapitre en ajoutant le numéro du chapitre ce qui donne <input name="titre_sous_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_sous_chapitre; ?>]" type="text" /> et <textarea name="contenu_sous_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_sous_chapitre; ?>]" rows="" cols=""></textarea></p>, j'ai mis à jour les deux variables $titre_sous_chapitre = mysql_real_escape_string(!empty($titre_sous_chapitre_array[$num_chapitre][$num_sous_chapitre]))? $titre_sous_chapitre_array[$num_chapitre][$num_sous_chapitre] : ''; et $contenu_sous_chapitre = mysql_real_escape_string(!empty($contenu_sous_chapitre_array[$num_chapitre][$num_sous_chapitre]))? $contenu_sous_chapitre[$num_chapitre][$num_sous_chapitre] : ''; mais elles sont toujours vides.

    Pour tester, j'ai mis dans la boucle foreach (après les deux déclarations):
    echo $num_sous_chapitre." : ".$titre_sous_chapitre."<br />";.
    En testant ça, il affiche : 1 : .

    Pour que vous voyez concrètement, en pièce jointe vous trouverez le fichier. J'ai mis des commentaires pour que vous voyez où je bloque.

  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
    J'essaye depuis hier et je n'y arrive pas ! J'aimerais faire ce que j'ai fait pour les chapitres avec les sous chapitres.

    Voici le formulaire HTML (simplifié) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <form method="post">
    <?php 
    // on boucle (par exemple) pour 4 CHAPITRES 
    for($num_chapitre=1; $num_chapitre<5; $num_chapitre++)
    { 
    ?>  <p><b>Titre du chapitre <?php echo $num_chapitre; ?> </b>:
        <input name="titre_chapitre[<?php echo $num_chapitre; ?>]" type="text" />
      </p>
      <p><b>Contenu du chapitre <?php echo $num_chapitre; ?> </b>:
        <textarea name="contenu_chapitre[<?php echo $num_chapitre; ?>]" rows="" cols=""></textarea>
      </p> 
    <?php 
            // on boucle (par exemple) pour 5 SOUS-CHAPITRES
            for($num_sous_chapitre=1; $num_sous_chapitre<6; $num_sous_chapitre++) 
            { 
    ?>  <p><i>Titre du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :
        <input name="titre_sous_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_sous_chapitre; ?>]" type="text" />
      </i></p>
      <p><i>Contenu du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :</i>
        <textarea name="contenu_sous_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_sous_chapitre; ?>]" rows="" cols=""></textarea></p>
     
    <?php 
            // FIN MODULE
    } // fin boucle chapitre 
    } // fin boucle sous-chapitre 
     
    ?>
      <br />
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
      </form>

    Comme vous le voyez, il y a 2 boucles pour les chapitres et les sous-chapitres.
    Les 2 objectifs sont :
    -enregistrer tout ce qui concerne les chapitres dans la table chapitres -> OK
    -enregistrer tout ce qui concerne les sous-chapitres dans la table sous_chapitres -> Pas OK

    Afin de faire cela, j'utilise des boucles foreach.
    -Pour alimenter la table chapitre, tout fonctionne.
    -Pour alimenter la table sous_chapitre, je bloque sur l'insertion du titre et du contenu du sous-chapitres. Il insère des chaines vides.

    Voici le traitement PHP (en gras les deux variables qui posent problème : elles sont toujours vides) :
    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
      <?php 
    // RECUPERATION / TRAITEMENT
    // 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;
    $titre_sous_chapitre_array = (!empty($_POST['titre_sous_chapitre']))? $_POST['titre_sous_chapitre'] : NULL;
    $contenu_sous_chapitre_array = (!empty($_POST['contenu_sous_chapitre']))? $_POST['contenu_sous_chapitre'] : NULL;
    
    	if(isset($_POST['poster_cours_tp'])) {
    		// Boucle pour les Chapitres
    		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] : '';
    			// Insertion des chapitres dans la base de données
    			$query_insertion_chapitre=mysql_query("INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) VALUES ('1','$titre_chapitre','$contenu_chapitre',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre, date de dépot du chapitre, auteur du chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    			}
    		foreach($titre_sous_chapitre_array as $num_sous_chapitre => $titre_sous_chapitre) {
    			$titre_sous_chapitre = mysql_real_escape_string(!empty($titre_sous_chapitre_array[$num_sous_chapitre]))? $titre_sous_chapitre_array[$num_sous_chapitre] : '';
    			$contenu_sous_chapitre = mysql_real_escape_string(!empty($contenu_sous_chapitre_array[$num_sous_chapitre]))? $contenu_sous_chapitre_array[$num_sous_chapitre] : '';
    			// Insertion des chapitres dans la base de données
    			$query_insertion_sous_chapitre=mysql_query("INSERT INTO sous_chapitres (id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('1','".$titre_sous_chapitre."','".$contenu_sous_chapitre."',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un sous chapitre d\'un Cours/TP (identifiant du chapitre, titre du sous-chapitre, contenu du sous-chapitre, date de dépot du sous-chapitre, auteur du sous-chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    			}
    
    }
    echo "OK.";
    ?>

    J'ai mis en gras les deux variables qui bloquent (elles sont vides).

    Depuis hier, je cherche mais je ne trouve pas.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    Toujours pareil : est-ce qu'un titre de chapitre peut être vide ?
    Je pense que non, donc a quoi sert cette ligne ?

    Exactement pareil pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $titre_chapitre = mysql_real_escape_string(!empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    Ensuite tu n'as pas compris le fonctionnement de foreach.
    Tu remarqueras que dans ta ligne foreach, tu as une variable $titre_sous_chapitre mais que tu ne l'utilises pas après, c'est un peu dommage.

    Et pour debuguer, tu oublies que tu as des alliés précieux : echo, print_r, var_dump.
    Tu as un tableau $_POST pour lequel tu as du mal a exploiter les données.
    et contrôle sa structure.
    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
    Pour les chapitres, tout fonctionne.

    Je continue de chercher mais j'ai du mal avec les boucles foreach.

    Voici ce que je crois savoir des boucles foreach :
    Elles servent à parcourir un tableau et la valeur courante.

    Dans mon cas, il faut parcourir le tableau des sous-chapitres (titre_sous_chapitre_array) et la valeur courante ($num_sous_chapitre). Il faut insérer dans la base de données chaque élément trouvé (le titre et le contenu du sous-chapitre) s'il n'est pas vide grâce à une requête SQL INSERT INTO.

    Je pense savoir ce qu'il faut faire mais je bloque sur la construction de cette boucle foreach.

    Peux-tu m'aider à développer cette boucle foreach pour traiter les sous-chapitres avec du code STP ?

  15. #15
    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
    Tant que tu n'auras pas nettoyer ton code, il n'y a rien à faire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    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
    Dis-moi les modifications à faire STP avec le code.

    Je reprends ce que tu as dit plus haut : s'il n'y a pas de titre (s'il est vide) ce n'est pas la peine de l'insérer.

    Est-ce qu'il faut que je supprimes les deux lignes que tu as posté au dessus ?

    Eclaires-moi STP avec du code.

    Ce n'est pas faute d'essayer mais là je suis bloqué.

    Si je fait un print_r($_POST);, je vois :
    Array ( [matieres] => texte [classes] => classe [titre_cours_tp] => titre [auteur_cours] => auteur [date_publication_tp] => date [date_debut_validation_cours_tp] => date [date_cloture_validation_cours_tp] => date [introduction_cours] => introduction [titre_chapitre] => Array ( [1] => Titre du Premier Chapitre [2] => [3] => [4] => ) [contenu_chapitre] => Array ( [1] => Voici le contenu du Premier Chapitre. [2] => [3] => [4] => ) [titre_sous_chapitre] => Array ( [1] => Array ( [1] => texte [2] => [3] => [4] => [5] => ) [2] => Array ( [1] => [2] => [3] => [4] => [5] => ) [3] => Array ( [1] => [2] => [3] => [4] => [5] => ) [4] => Array ( [1] => [2] => [3] => [4] => [5] => ) ) [contenu_sous_chapitre] => Array ( [1] => Array ( [1] => [2] => [3] => [4] => [5] => ) [2] => Array ( [1] => [2] => [3] => [4] => [5] => ) [3] => Array ( [1] => [2] => [3] => [4] => [5] => ) [4] => Array ( [1] => [2] => [3] => [4] => [5] => ) ) [question_chapitre] => Array ( [1] => Array ( [1] => [2] => [3] => [4] => [5] => ) [2] => Array ( [1] => [2] => [3] => [4] => [5] => ) [3] => Array ( [1] => [2] => [3] => [4] => [5] => ) [4] => Array ( [1] => [2] => [3] => [4] => [5] => ) ) [reponse_chapitre] => Array ( [1] => Array ( [1] => [2] => [3] => [4] => [5] => ) [2] => Array ( [1] => [2] => [3] => [4] => [5] => ) [3] => Array ( [1] => [2] => [3] => [4] => [5] => ) [4] => Array ( [1] => [2] => [3] => [4] => [5] => ) ) [conclusion_cours] =>conclusion [poster_cours_tp] => Poster ce Cours/TP )
    Avec ça on voit qu'il trouve les bonnes valeurs. Il faut les insérer dans les bonnes tables.

    Peux-tu m'aider avec du code STP, je suis bloqué ?

    Ce qui me gêne c'est que pour les chapitres, ça fonctionne : je ne dois pas être loin.

  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
    Comme tu me l'as suggéré, je te met le code nettoyé que j'ai totalement refait. Néanmoins, ça fait toujours pareil !
    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
    foreach ($_POST['titre_chapitre'] as $num_chapitre => $titre_chapitre) {
    	$query_insertion_titre_chapitre=mysql_query("INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) VALUES ('1','".$titre_chapitre."','".$contenu_chapitre."',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (titre du chapitre)'.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)
    }
    foreach ($_POST['contenu_chapitre'] as $num_chapitre => $contenu_chapitre) {
    	$query_maj_contenu_chapitre=mysql_query("
    	UPDATE chapitres
    	SET titre_chapitre='".mysql_real_escape_string($contenu_chapitre)."',date_depot=now(), id_auteur_chapitre='".$id_utilisateur."'
    	WHERE id_chapitre='".$_SESSION['id_chapitre']."'") or die('Erreur sur la requête SQL qui met à jour les contenus des chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL;
    }
    foreach ($_POST['titre_sous_chapitre'] as $num_sous_chapitre => $titre_sous_chapitre) {
    	$query_insertion_sous_chapitre=mysql_query("INSERT INTO sous_chapitres (id_chapitre,titre_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('1','".$titre_sous_chapitre."',now(),'".$id_utilisateur."')") or die('Erreur lors de l\'insertion d\'un sous chapitre d\'un Cours/TP (identifiant du chapitre, titre du sous-chapitre, date de dépot du sous-chapitre, auteur du sous-chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    	$_SESSION['id_sous_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du sous-chapitre)
    }
    foreach ($_POST['contenu_sous_chapitre'] as $num_sous_chapitre => $contenu_sous_chapitre) {
    	$query_maj_contenu_sous_chapitre=mysql_query("
    	UPDATE sous_chapitres
    	SET contenu_sous_chapitre='".mysql_real_escape_string($contenu_sous_chapitre)."',date_depot=now(), id_auteur_sous_chapitre='".$id_utilisateur."'
    	WHERE id_sous_chapitre='".$_SESSION['id_sous_chapitre']."'") or die('Erreur sur la requête SQL qui met à jour les contenus des sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL;
    }

    J'ai fait 4 boucles foreach :
    -une pour les titres des chapitres
    -une pour les contenus des chapitres
    -une pour les titres des sous-chapitres
    -une pour les contenus des sous-chapitres

    Avec ce code, je ne traite pas les questions.

    Ce qui m'énerve avec le code précédent, c'est que tout fonctionne sauf qu'il ne capte pas les titres des sous chapitres et les contenus des sous-chapitres.

    Peux-tu me répondre avec un code complet qui traite tout STP ? Depuis deux jours, je cherche et je ne trouve pas.

    Merci d'avance.

  18. #18
    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
    C'est bien on progresse c'est plus clair à lire.

    Maintenant il te reste à éliminer tes utilisations de sessions qui n'ont rien à faire ici.
    Egalement ton systeme ou tu fais un INSERT suivi d'un UPDATE est tordu.
    Recupere le deux sous le même nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <p><i>Titre du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :
        <input name="sous_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_sous_chapitre; ?>][titre]" type="text" />
      </i></p>
      <p><i>Contenu du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :</i>
        <textarea name="sous_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_sous_chapitre; ?>][contenu]" rows="" cols=""></textarea></p>
    Ca ne te fais plus qu'une seule boucle et une seule requête.
    Même chose pour les chapitres.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    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
    Puisque tu m'as dit qu'on progresse, voici le formulaire en intégralité (avec les chapitres, avec les sous-chapitre et avec les questions) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <form method="post">
    Poster un Cours/TP</b> <br />
    <?php 
    // on boucle (par exemple) pour 4 CHAPITRES 
    for($num_chapitre=1; $num_chapitre<5; $num_chapitre++)
    { 
    ?>  <p><b>Titre du chapitre <?php echo $num_chapitre; ?> </b>:
        <input name="titre_chapitre[<?php echo $num_chapitre; ?>]" type="text" />
      </p>
      <p><b>Contenu du chapitre <?php echo $num_chapitre; ?> </b>:
        <textarea name="contenu_chapitre[<?php echo $num_chapitre; ?>]" rows="" cols=""></textarea>
      </p> 
    <?php 
            // on boucle (par exemple) pour 5 SOUS-CHAPITRES
            for($num_sous_chapitre=1; $num_sous_chapitre<6; $num_sous_chapitre++) 
            { 
    ?>  <p><i>Titre du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :
        <input name="sous_chapitre[<?php echo $num_sous_chapitre; ?>]" type="text" />
      </i></p>
      <p><i>Contenu du sous chapitre <?php echo $num_chapitre.'-'.$num_sous_chapitre; ?> :</i>
        <textarea name="sous_chapitre[<?php echo $num_sous_chapitre; ?>]" rows="" cols=""></textarea></p>
    <?php 
            // on boucle (par exemple) pour 5 QUESTIONS 
            for($num_question=1; $num_question<6; $num_question++) 
            { 
    ?>
      <p>Question <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="question_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>]" type="text" />
      </p>
      <p>Réponse <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="reponse_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>]" type="text" />
      </p>
     </p>
    <?php 
            // FIN MODULE
    } // fin boucle chapitre 
    } // fin boucle sous-chapitre 
    } // fin boucle question 
    ?>
      <br />
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    </form>

    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
    33
    34
    35
    36
    37
    <?php
    // Boucle Chapitres - DEBUT
    foreach ($_POST['titre_chapitre'] as $num_chapitre => $titre_chapitre) {
    	$query_insertion_chapitre=mysql_query("
            INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) 
    	VALUES ('1','".$titre_chapitre."','".$contenu_chapitre."',now(),'".$id_utilisateur."')")
    	or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (titre du chapitre)'.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 Chapitres - FIN
    // Boucle Sous-Chapitres - DEBUT
    foreach ($_POST['titre_sous_chapitre'] as $num_sous_chapitre => $titre_sous_chapitre) {
    	$query_insertion_sous_chapitre=mysql_query("
            INSERT INTO sous_chapitres (id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre)
    	VALUES ('1','".$titre_sous_chapitre."','".$contenu_sous_chapitre."',now(),'".$id_utilisateur."')")
    	or die('Erreur lors de l\'insertion d\'un sous chapitre d\'un Cours/TP (identifiant du chapitre, titre du sous-chapitre, date de dépot du sous-chapitre, auteur du sous-chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    	$_SESSION['id_sous_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du sous-chapitre)
    }
    // Boucle Sous-Chapitres - FIN
    // Boucle Questions/Réponses - DEBUT
    foreach ($_POST['question_chapitre'][$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] : '';
    	// Insertion des questions/réponses dans la base de données
    	$query_insertion_questions=mysql_query("
            INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question)
    	VALUES (".$_SESSION['id_chapitre'].",'$question_chapitre',now(),'".$id_utilisateur."','1')")
    	or die('Erreur lors de l\'insertion d\'une question d\'un chapitre d\'un Cours/TP (identifiant du chapitre, contenu de la question, date de dépot de la question, auteur de la question)'.mysql_error()); // Envoie une requête à un serveur MySQL
    	$_SESSION['id_question']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la question)
    	$query_insertion_reponses=mysql_query("INSERT INTO reponses (id_question,texte_reponse_attendue,date_depot)
    	VALUES (".$_SESSION['id_question'].",'$reponse_chapitre',now())") 
    	or die('Erreur lors de l\'insertion d\'une réponse à une question d\'un Cours/TP (identifiants du cours/du chapitre/de la réponse, contenu de la réponse, date de dépot de la réponse'.mysql_error()); // Envoie une requête à un serveur MySQL
    	$_SESSION['id_reponse']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la reponse)
    }
    // Boucle Questions/Réponses - FIN
    echo "OK";
    ?>

    Dis-moi ce qu'il faut modifier aussi bien dans le formulaire HTML que dans le traitement PHP STP. Proposes-moi le tien en te basant sur celui-ci STP.

    Il faut insérer :
    -dans la table chapitres tout ce qui concerne les chapitres (identifiant du cours, titre du chapitre, contenu du chapitre, etc...)
    -dans la table sous_chapitres tout ce qui concerne les sous-chapitres (identifiant du chapitre, le titre du sous-chapitre, le contenu du sous-chapitre, etc...)
    -dans la table questions tout ce qui concerne les questions (identifiant du chapitre, contenu de la question, etc...)

    Comment faire pour insérer les bons identifiants sans utiliser les variables de sessions ?

    Etant donné que, comme tu me l'as suggéré, j'ai changé le name des sous-chapitres (le même pour les titres et les contenus des sous-chapitres), je pense qu'il faut modifier $titre_sous_chapitre de la boucle foreach en le remplaçant par $sous_chapitre.
    Comment récupérer les titres et les contenus des sous-chapitres ? Est-ce qu'il faut faire une concaténation du chapitre et du sous-chapitre ? Pareil pour les questions ?

    Avec ce code :
    -le titre du chapitre s'insère mais le contenu du chapitre non (chaine vide) dans la table chapitres
    -il n'y a pas d'insertion dans les tables questions, sous_chapitres et reponses

    Peux-tu me proposer un code qui insère tout dans les bonnes tables avec les bons identifiants STP ?
    L'autre code fonctionnait bien sauf qu'il ne gérait pas l'insertion des sous-chapitres.

  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
    Pouvez-vous m'aider à ajuster le code ci-dessus pour que toutes les données s'insèrent dans les bonnes tables avec les bons identifiants SVP ?

    J'ai modifié le traitement PHP. Cette fois, le champs contenu_chapitre de la table chapitre s'insère avec une valeur vide. De plus, voici l'erreur obtenue lors des essais (concerne les questions) :
    Erreur lors de l'insertion d'une question d'un chapitre d'un Cours/TP (identifiant du chapitre, contenu de la question, date de dépot de la question, auteur de la question)You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''',now(),'','1')' at line 1.

    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
    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
    <?php
    // Récupération, protection et traitement des variables
    $matiere_choisie=mysql_real_escape_string($_POST['matieres']);
    $classe_choisie=mysql_real_escape_string($_POST['classes']);
    $titre_cours_tp=mysql_real_escape_string($_POST['titre_cours_tp']);
    $date_publication_tp=mysql_real_escape_string($_POST['date_publication_tp']);
    $date_cloture_validation_cours_tp=mysql_real_escape_string($_POST['date_cloture_validation_cours_tp']);
    $date_debut_validation_cours_tp=mysql_real_escape_string($_POST['date_debut_validation_cours_tp']);
    $auteur_cours=mysql_real_escape_string($_POST['auteur_cours']);
    $introduction_cours=mysql_real_escape_string($_POST['introduction_cours']);
    $conclusion_cours=mysql_real_escape_string($_POST['conclusion_cours']);
     
    // Récupération des arrays (Titres et Contenus des Chapitres, Questions et Réponses)
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    $contenu_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
     
    if(isset($_POST['poster_cours_tp'])) {
    	if ($_POST['titre_cours_tp']==''||($_POST['auteur_cours']==''||($_POST['date_publication_tp']==''||($_POST['date_debut_validation_cours_tp']==''||($_POST['date_cloture_validation_cours_tp']==''))))) {
    		echo "Veuillez saisir les informations générales de votre Cours/TP dynamique.";
    		exit();
    	}
    	else
    		$query_insertion_cours_tp=mysql_query("INSERT INTO cours (titre_cours,id_auteur,introduction_cours,conclusion_cours,date_publication_cours,date_cloture_validation_cours,date_debut_validation_cours,matiere_cours,classe_cours) VALUES ('".$titre_cours_tp."','".$id_utilisateur."','".$introduction_cours."','".$conclusion_cours."',now(),'".$date_cloture_validation_cours_tp."','".$date_debut_validation_cours_tp."','".$matiere_choisie."','".$classe_choisie."')") or die('Erreur lors de l\'insertion d\'un Cours/TP (titre du cours, auteur du cours, introduction du cours, conclusion du cours, date de publication du cours, date de cloture de validation du cours, date de début de validation du cours, la matière et la classe)'.mysql_error()); // Envoie une requête à un serveur MySQL
    	$_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)
     
    	// Boucle Titres Chapitres - DEBUT
    	foreach ($titre_chapitre_array as $num_chapitre => $titre_chapitre) {
     
    		$query_insertion_titre_chapitre="INSERT INTO chapitres (id_cours,titre_chapitre,date_depot,id_auteur_chapitre) 
    		VALUES ('".$_SESSION['id_cours']."','".$titre_chapitre."',now(),'".$id_utilisateur."')";
    		mysql_query($query_insertion_titre_chapitre) or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (titre du chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    		$_SESSION['id_titre_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du chapitre)
    	}
    	// Boucle Titres Chapitres - FIN
    	// Boucle Contenu Chapitres - DEBUT
    	foreach ($contenu_chapitre_array as $num_chapitre => $contenu_chapitre) {
    		$contenu_chapitre = mysql_real_escape_string(!empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    		$query_insertion_contenu_chapitre="
    		UPDATE chapitres
    		SET id_cours='".$_SESSION['id_cours']."',contenu_chapitre='".mysql_real_escape_string($contenu_chapitre)."',date_depot=now(), id_auteur_chapitre='".$_SESSION['id_utilisateur']."'
    		WHERE id_chapitre='".$_SESSION['id_titre_chapitre']."'
    		AND id_cours='".$_SESSION['id_cours']."'";
    		mysql_query($query_insertion_contenu_chapitre) or die('Erreur sur la requête SQL qui insère les contenus des chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		$_SESSION['id_contenu_chapitre']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant du chapitre)
    	}
    	// Boucle Contenu Chapitres - FIN
    	// Boucle Questions - 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] : '';
    		// Insertion des questions dans la base de données - Cette requête ne fonctionne pas
    		$query_insertion_questions="INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question) VALUES (".$_SESSION['id_chapitre'].",'".$question_chapitre."',now(),'".$id_utilisateur."','1')";
    		mysql_query($query_insertion_questions) or die('Erreur lors de l\'insertion d\'une question d\'un chapitre d\'un Cours/TP (identifiant du chapitre, contenu de la question, date de dépot de la question, auteur de la question)'.mysql_error()); // Envoie une requête à un serveur MySQL
    		$_SESSION['id_question']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la question)
    	}
    	// Boucle Questions - FIN
    	// Boucle Réponses - DEBUT
    	foreach($reponse_chapitre_array[$num_chapitre] as $num_question => $reponse_chapitre) {
    		$reponse_chapitre = mysql_real_escape_string(!empty($reponse_chapitre_array[$num_chapitre][$num_question]))? $reponse_chapitre_array[$num_chapitre][$num_question] : '';
     
    		$query_insertion_reponses="INSERT INTO reponses (id_question,texte_reponse_attendue,date_depot) VALUES (".$_SESSION['id_question'].",'".$reponse_chapitre."',now())";
    		mysql_query($query_insertion_reponses) or die('Erreur lors de l\'insertion d\'une réponse à une question d\'un Cours/TP (identifiant de la question, contenu de la réponse, date de dépot de la réponse'.mysql_error()); // Envoie une requête à un serveur MySQL
    		$_SESSION['id_reponse']=mysql_insert_id(); // On met sous session l'identifiant généré par la dernière requête (identifiant de la réponse)
    	}
    	// Boucle Réponses - FIN
    }
    ?>

    Je penses qu'il est temps que tu proposes ton code afin de m'aider concrètement.

    Si ce n'est pas la peine d'utiliser les variables de sessions, merci de me proposer un code adéquat.

    Merci d'avance

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

Discussions similaires

  1. Problème insertion SQL avec Java
    Par lemzo84 dans le forum Persistance des données
    Réponses: 11
    Dernier message: 28/10/2012, 15h58
  2. Réponses: 1
    Dernier message: 25/03/2011, 11h10
  3. [MySQL] Problème avec boucle foreach
    Par dschaefer79 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/07/2010, 18h42
  4. [PHP 5.0] Fonction avec boucle "foreach"
    Par ju0123456789 dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2010, 19h12
  5. problème insert into avec boucle for
    Par nokia1600 dans le forum VB.NET
    Réponses: 8
    Dernier message: 30/10/2009, 16h08

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