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. #41
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Par défaut
    J'ai suivi ton conseil.

    Voici le formulaire HTML sur lequel j'ai modifié les name des chapitres et des sous-chapitres.
    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
    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
      <form method="post">
      <u>Matière :</u>
      <select name="matieres">
        <?php
    $matiere = "SELECT matiereenseignee_utilisateur FROM test_site_utilisateur "; //WHERE id_utilisateur='".$id_utilisateur."'
    $result = mysql_query($matiere) or die("Erreur sur la requête SQL concernant la matière du professeur.");
    echo '<option value="">Choisissez votre matière.</option>';
    while ($row=mysql_fetch_array($result)) // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
    { 
     echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
    }  
    ?>
      </select>
      <br />
      <u>Classe :</u>
      <select name="classes">
        <?php
              // A modifier
    $classes = "SELECT classe_utilisateur FROM test_site_utilisateur,  test_site_classe WHERE classe_utilisateur=classe_nom "; //AND id_utilisateur='".$id_utilisateur."'
    $result = mysql_query($classes) or die("Erreur sur la requête SQL concernant les classes.");
    echo '<option value="">Choisissez une de vos classes.</option>';
    while ($row=mysql_fetch_array($result)) { // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
            echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
    } ?>
      </select>
      <br />
      <p>Titre du cours :
        <input name="titre_cours_tp" type="text" value="TITRE COURS/TP" />
      </p>
      <p>Auteur :
        <input name="auteur_cours" type="text" value="Vincent Salvador <?php if(isset($_SESSION['pseudo_utilisateur'])) {echo $_SESSION['pseudo_utilisateur'];}?>"/>
      <p>Date de publication
        <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;?>'/>
        <br />
        Date de début (Pas obligatoire)
        <input type="date" name="date_debut_validation_cours_tp" value="2014-06-10" />
        <br />
        Date de clôture des validations (Pas obligatoire)
        <input type="date" name="date_cloture_validation_cours_tp" value="2014-07-10" />
        <br />
        Introduction :
        <textarea name="introduction_cours" rows="" cols="" >INTRODUCTION</textarea>
    <?php 
    // on boucle (par exemple) pour 4 CHAPITRES 
    for($num_chapitre=1; $num_chapitre<5; $num_chapitre++) 
    { 
            // DEBUT MODULE CHAPITRES
    ?>
      <p>Titre du chapitre <?php echo $num_chapitre; ?> :
        <input name="chapitre[titre_chapitre['<?php echo $num_chapitre; ?>']]" type="text" value="TITRE CHAPITRE <?php echo $num_chapitre; ?>" />
      </p>
      <p>Contenu du chapitre <?php echo $num_chapitre; ?> :
        <textarea name="chapitre[contenu_chapitre['<?php echo $num_chapitre; ?>']]" rows="" cols="">CONTENU CHAPITRE <?php echo $num_chapitre; ?></textarea>
      </p>
      <?php 
    // on boucle (par exemple) pour 3 SOUS-CHAPITRES 
    for($num_sous_chapitre=1; $num_sous_chapitre<4; $num_sous_chapitre++) 
    { 
            // DEBUT MODULE SOUS-CHAPITRES
    ?>
      <p>Titre du sous-chapitre <?php echo $num_chapitre." - ".$num_sous_chapitre; ?> :
        <input name="sous_chapitre[titre_sous_chapitre['<?php echo $num_sous_chapitre; ?>']]" type="text" value="TITRE SOUS CHAPITRE <?php echo $num_sous_chapitre; ?>" />
      </p>
      <p>Contenu du sous-chapitre <?php echo $num_chapitre." - ".$num_sous_chapitre; ?> :
        <textarea name="sous_chapitre[contenu_sous_chapitre['<?php echo $num_sous_chapitre; ?>']]" rows="" cols="">CONTENU SOUS CHAPITRE <?php echo $num_sous_chapitre; ?></textarea>
      </p>
     
      <div>Questions/Réponses</div>
    <?php 
            // on boucle (par exemple) pour 5 QUESTIONS 
            for($num_question=1; $num_question<6; $num_question++) 
            { 
            // DEBUT MODULE QUESTIONS
    ?>
      <p>Question <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="question_chapitre['<?php echo $num_question; ?>']" type="text" value="QUESTION CHAPITRE <?php echo $num_question; ?>"/>
      </p>
      <p>Réponse <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="reponse_chapitre['<?php echo $num_question; ?>']" type="text" value="REPONSE CHAPITRE <?php echo $num_question; ?>" />
      </p>
    <?php 
            } // fin boucle question 
            // FIN MODULE
    } // fin boucle sous-chapitre 
    } // fin boucle chapitre 
    ?>
    <div>Conclusion :
        <textarea name="conclusion_cours" rows="" cols="">CONCLUSION</textarea>
      </div>
      <br />
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" /></form>

    Voici le traitement PHP du formulaire :
    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
    <?php 
    if(isset($_POST['poster_cours_tp'])) {
    	print_r($_POST);
     
    	$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']);
    	// Vérification de la saisie minimale
    	//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="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."')";
    		  mysql_query($query_insertion_cours_tp) 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
    		  $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 insérer les chapitres - DEBUT
    		  foreach ($_POST['chapitre'] as $id_chapitre_titre => $titre_chapitre) {
    			  foreach ($_POST['chapitre'] as $id_chapitre_contenu => $contenu_chapitre) {
    				  $sql_insertion_chapitre="
    				  INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre)
    				  VALUES (".$id_cours.",'".$titre_chapitre."','".$contenu_chapitre."',now(),'1')";//".$id_utilisateur."
    				  mysql_query($sql_insertion_chapitre)
    				  or die('Erreur sur la requête SQL qui insère les chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    				}
    		  }
    		  // Boucle pour insérer les chapitres - FIN
     
    		  // Boucle pour insérer les sous-chapitres - DEBUT
    		  foreach ($_POST['sous_chapitre'] as $id_sous_chapitre_titre => $titre_sous_chapitre) {
    			  foreach ($_POST['sous_chapitre'] as $id_sous_chapitre_contenu => $contenu_sous_chapitre) {
    				  $sql_insertion_sous_chapitre="INSERT INTO sous_chapitres (	id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('".$id_chapitre_contenu."','".mysql_real_escape_string($titre_sous_chapitre)."','".mysql_real_escape_string($contenu_sous_chapitre)."',now(),'1')";
    			  mysql_query($sql_insertion_sous_chapitre)
    			  or die('Erreur sur la requête SQL qui insère les sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    			  }
    		  }
    		  // Boucle pour insérer les sous-chapitres - FIN
     
    		  // Boucle pour insérer les questions - DEBUT
    		  foreach ($_POST['question_chapitre'] as $id_question => $contenu_question) {
    			  $sql_question="
    			  INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question)
    			  VALUES (".$id_chapitre_titre.",'".$contenu_question."',now(),'1','1')";//".$id_utilisateur."
    			  mysql_query($sql_question)
    			  or die('Erreur sur la requête SQL qui insère les questions du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les questions - FIN
     
    		  // Boucle pour insérer les réponses - DEBUT
    		  foreach ($_POST['reponse_chapitre'] as $id_reponse => $reponse_chapitre) {
    			  $sql_reponse="
    			  INSERT INTO reponses (id_question,id_auteur_reponse,texte_reponse_attendue,date_depot) VALUES (".$id_question.",'".$id_utilisateur."','".$reponse_chapitre."',now())";
    			  mysql_query($sql_reponse)
    			  or die('Erreur sur la requête SQL qui insère les réponses aux questions respectives du cours'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les réponses - FIN`
     
    		  echo "OK.";
    }
    ?>

    Comme tu le vois, j'ai suivi ton conseil en supprimant deux boucles foreach. A la place, j'ai ajouté deux boucles foreach imbriquées pour insérer les deux valeurs (le titre et le contenu des chapitres et des sous-chapitres).

    Avec ce code :
    -la table "cours" s'insère avec les bonnes valeurs
    -la table "chapitres" : il y a un problème dans les boucles foreach puisqu'après avoir insérer uniquement le premier titre, il insère le contenu des chapitres dans le champs "titre_chapitre". En ce qui concerne le champs "contenu_chapitre", à chaque fois il insère le titre et le contenu.
    -la table "sous_chapitres" : même problème que pour les chapitres.
    -la table "questions" : le or die s'affiche.
    -la table "reponses" : aucune insertion.

    Comme tu le constates, je n'y arrive pas avec ce code et ce n'est pas faute d'essayer. Peux-tu STP m'aider avec du code ?

    J'ai compris qu'il faut uniquement une boucle foreach pour insérer les titres et les contenus des chapitres et des sous-chapitres.

    Il faut lui dire : pour chaque titre et contenu du chapitre ou du sous-chapitre, il faut que tu l'insère dans la table chapitres ou dans la table sous_chapitres en tenant compte des bons identifiants. C'est la même chose pour les tables questions et reponses.
    Je sais ce qu'il faut faire, j'ai le traitement en tête mais je n'arrive pas à le coder pourtant ce n'est pas faute d'essayer. Je pense que voir le code qui traiterait correctement ce formulaire m'aiderait plus. Ce n'est pas parce que je ne veux pas m'embêter à chercher mais je pourrais ainsi comparer les deux codes afin de voir ce qui ne va pas.

    En cherchant sur Internet comment insérer plusieurs données en utilisant une boucle foreach, j'ai trouvé ce lien : http://www.jeux-lothi.com/post/80072...rtion-multiple . Je ne veux pas en faire une fonction, je veux juste faire un code qui marche.
    Sur ce lien http://rcadhikari.blogspot.fr/2013/0...ng-single.html, la requête SQL n'est pas dans la boucle foreach insère les données après les avoir rassemblées.

  2. #42
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Je me permet d'intervenir pour essayer d'aider.

    Les 2 boucles imbriquées des chapitres sont fausses. De plus, il ne faut qu'une seule boucle !

    Je n'ai peut-être pas bien suivi la totalité du projet, donc il est éventuellement possible qu'il faille utiliser 2 boucles, mais quand j'entends parler de "chapitre" et "sous-chapitre" ça m'étonnerait. Concernant le fait qu'elles soient "fausses" c'est tout simplement parce que boucler 2 fois exactement sur le même array, ça n'a aucun sens !

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    foreach ($_POST['chapitre']['titre_chapitre'] AS $num_chapitre => $titre_chapitre) {
    	$contenu_chapitre = $_POST['chapitre']['contenu_chapitre'][$num_chapitre];
    	$sql_insertion_chapitre="
    		  INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre)
    		  VALUES (".$id_cours.",'".$titre_chapitre."','".$contenu_chapitre."',now(),'1')";//".$id_utilisateur."
    		  mysql_query($sql_insertion_chapitre)
    		  or die('Erreur sur la requête SQL qui insère les chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    }

    Il en est exactement de même pour les sous-chapitres.

    Pour ce qui est de la table "reponses", c'est normal vu qu'il y a un eu die(). Plus rien n'est interprété après un die()

    NB: pensez à lire et à fournir les messages d'erreur SQL qui peuvent nous faire gagner un temps précieux ;-)

  3. #43
    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
    Merci de votre contribution.

    Je suis prêt à suivre vos conseils.

    Voici le code :
    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
     // Boucle pour insérer les chapitres - DEBUT
    foreach ($_POST['chapitre']['titre_chapitre'] as $num_chapitre => $titre_chapitre) {
    	$contenu_chapitre = $_POST['chapitre']['contenu_chapitre'][$num_chapitre];
    	$sql_insertion_chapitre="INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) VALUES ('".$id_cours."','".mysql_real_escape_string($titre_chapitre)."','".mysql_real_escape_string($contenu_chapitre)."',now(),'1')";//".$id_utilisateur."
    	 mysql_query($sql_insertion_chapitre)
    	or die('Erreur sur la requête SQL qui insère les chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    }
    // Boucle pour insérer les chapitres - FIN
     
    // Boucle pour insérer les sous-chapitres - DEBUT
    foreach ($_POST['sous_chapitre']['titre_sous_chapitre'] as $num_sous_chapitre => $titre_sous_chapitre) {
    	$contenu_sous_chapitre = $_POST['sous_chapitre']['contenu_sous_chapitre'][$num_sous_chapitre];
    	$sql_insertion_sous_chapitre="INSERT INTO sous_chapitres (	id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('".$id_chapitre_contenu."','".mysql_real_escape_string($titre_sous_chapitre)."','".mysql_real_escape_string($contenu_sous_chapitre)."',now(),'1')";
    	mysql_query($sql_insertion_sous_chapitre)
    	or die('Erreur sur la requête SQL qui insère les sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    }
    // Boucle pour insérer les sous-chapitres - FIN
     
    // Boucle pour insérer les questions - DEBUT
    foreach ($_POST['question_chapitre'] as $id_question => $contenu_question) {
    	$sql_question="INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question) VALUES (".$id_chapitre_titre.",'".$contenu_question."',now(),'1','1')";//".$id_utilisateur."
    	mysql_query($sql_question)
    	or die('Erreur sur la requête SQL qui insère les questions du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    }
    // Boucle pour insérer les questions - FIN
     
    // Boucle pour insérer les réponses - DEBUT
    foreach ($_POST['reponse_chapitre'] as $id_reponse => $reponse_chapitre) {
    	$sql_reponse="INSERT INTO reponses (id_question,id_auteur_reponse,texte_reponse_attendue,date_depot) VALUES (".$id_question.",'1','".$reponse_chapitre."',now())";
    	 mysql_query($sql_reponse)
    	or die('Erreur sur la requête SQL qui insère les réponses aux questions respectives du cours'.mysql_error()); // Envoie une requête à un serveur MySQL
    }
    // Boucle pour insérer les réponses - FIN

    Lors de l'essai, ces deux avertissements apparaissent : Warning: Invalid argument supplied for foreach(). sur les lignes foreach ($_POST['chapitre']['titre_chapitre'] as $num_chapitre => $titre_chapitre) { et foreach ($_POST['sous_chapitre']['titre_sous_chapitre'] as $num_sous_chapitre => $titre_sous_chapitre) {.
    En ce qui concerne le formulaire : pour les chapitres, je les nomme chapitre[titre_chapitre['<?php echo $num_chapitre; ?>']] et chapitre[contenu_chapitre['<?php echo $num_chapitre; ?>']].
    En ce qui concerne les sous-chapitres, sous_chapitre[titre_sous_chapitre['<?php echo $num_sous_chapitre; ?>']] et sous_chapitre[contenu_sous_chapitre['<?php echo $num_sous_chapitre; ?>']]. Aucune table se remplie à part la table "cours".

    Je suis prêt à modifier le code suivant vos conseils, j'avoue que je n'arrive pas avec ce code mais ce n'est pas faute de ne pas essayer ni de ne pas être persévérant.

  4. #44
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Effectivement, je comprends pourquoi j'avais du mal à lire vos attributs "name" tout à l'heure =D

    En fait, je ne préconise pas cette façon d'écrire les name car vous perdez tout l'intérêt des array !
    Il suffit de changer un crochet pour avoir quelque chose de totalement différent !


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <!-- si vous écrivez : -->
    name="chapitre[contenu_chapitre]['<?php echo $num_chapitre; ?>']"
    <!-- AU LIEU DE -->
    name="chapitre[contenu_chapitre['<?php echo $num_chapitre; ?>']]"
    <!-- vous passez d'un simple tableau à 2 tableaux imbriqués, beaucoup plus facilement manipulables. -->
    (le dernier crochet fermant (tout à droite) se met juste après "contenu_chapitre", "contenu_chapitre" devient alors une clé (qui a un array comme valeur )


    Vous trouverez un petit test vite fait ici : http://tests.pierre-roels.com/input_names_array.php
    Validez le formulaire, et vous aurez un aperçu de ce que vous recevez en PHP, et dès lors, le code que je vous ai donné plus tôt fonctionnera... ou en tout cas, l'erreur Warning: Invalid argument supplied for foreach() n’apparaîtra plus !

  5. #45
    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
    Voici le formulaire HTML :
    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
    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
      <form method="post">
      <u>Matière :</u>
      <select name="matieres">
        <?php
    $matiere = "SELECT matiereenseignee_utilisateur FROM test_site_utilisateur "; //WHERE id_utilisateur='".$id_utilisateur."'
    $result = mysql_query($matiere) or die("Erreur sur la requête SQL concernant la matière du professeur.");
    echo '<option value="">Choisissez votre matière.</option>';
    while ($row=mysql_fetch_array($result)) // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
    { 
     echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
    }  
    ?>
      </select>
      <br />
      <u>Classe :</u>
      <select name="classes">
        <?php
              // A modifier
    $classes = "SELECT classe_utilisateur FROM test_site_utilisateur,  test_site_classe WHERE classe_utilisateur=classe_nom "; //AND id_utilisateur='".$id_utilisateur."'
    $result = mysql_query($classes) or die("Erreur sur la requête SQL concernant les classes.");
    echo '<option value="">Choisissez une de vos classes.</option>';
    while ($row=mysql_fetch_array($result)) { // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
            echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
    } ?>
      </select>
      <br />
      <p>Titre du cours :
        <input name="titre_cours_tp" type="text" value="TITRE COURS/TP" />
      </p>
      <p>Auteur :
        <input name="auteur_cours" type="text" value="<?php if(isset($_SESSION['pseudo_utilisateur'])) {echo $_SESSION['pseudo_utilisateur'];}?>"/>
      <p>Date de publication
        <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;?>'/>
        <br />
        Date de début (Pas obligatoire)
        <input type="date" name="date_debut_validation_cours_tp" value="2014-06-10" />
        <br />
        Date de clôture des validations (Pas obligatoire)
        <input type="date" name="date_cloture_validation_cours_tp" value="2014-07-10" />
        <br />
        Introduction :
        <textarea name="introduction_cours" rows="" cols="" >INTRODUCTION</textarea>
    <?php 
    // on boucle (par exemple) pour 4 CHAPITRES 
    for($num_chapitre=1; $num_chapitre<5; $num_chapitre++) 
    { 
            // DEBUT MODULE CHAPITRES
    ?>
      <p>Titre du chapitre <?php echo $num_chapitre; ?> :
        <input name="chapitre[titre_chapitre['<?php echo $num_chapitre; ?>']" type="text" value="TITRE CHAPITRE <?php echo $num_chapitre; ?>" />
      </p>
      <p>Contenu du chapitre <?php echo $num_chapitre; ?> :
        <textarea name="chapitre[contenu_chapitre['<?php echo $num_chapitre; ?>']" rows="" cols="">CONTENU CHAPITRE <?php echo $num_chapitre; ?></textarea>
      </p>
      <?php 
    // on boucle (par exemple) pour 3 SOUS-CHAPITRES 
    for($num_sous_chapitre=1; $num_sous_chapitre<4; $num_sous_chapitre++) 
    { 
            // DEBUT MODULE SOUS-CHAPITRES
    ?>
      <p>Titre du sous-chapitre <?php echo $num_chapitre." - ".$num_sous_chapitre; ?> :
        <input name="sous_chapitre[titre_sous_chapitre['<?php echo $num_sous_chapitre; ?>']" type="text" value="TITRE SOUS CHAPITRE <?php echo $num_sous_chapitre; ?>" />
      </p>
      <p>Contenu du sous-chapitre <?php echo $num_chapitre." - ".$num_sous_chapitre; ?> :
        <textarea name="sous_chapitre[contenu_sous_chapitre['<?php echo $num_sous_chapitre; ?>']" rows="" cols="">CONTENU SOUS CHAPITRE <?php echo $num_sous_chapitre; ?></textarea>
      </p>
     
      <div>Questions/Réponses</div>
    <?php 
            // on boucle (par exemple) pour 5 QUESTIONS 
            for($num_question=1; $num_question<6; $num_question++) 
            { 
            // DEBUT MODULE QUESTIONS
    ?>
      <p>Question <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="question_chapitre['<?php echo $num_question; ?>']" type="text" value="QUESTION CHAPITRE <?php echo $num_question; ?>"/>
      </p>
      <p>Réponse <?php echo $num_chapitre.'-'.$num_question; ?> :
        <input name="reponse_chapitre['<?php echo $num_question; ?>']" type="text" value="REPONSE CHAPITRE <?php echo $num_question; ?>" />
      </p>
    <?php 
            } // fin boucle question 
            // FIN MODULE
    } // fin boucle sous-chapitre 
    } // fin boucle chapitre 
    ?>
    <div>Conclusion :
        <textarea name="conclusion_cours" rows="" cols="">CONCLUSION</textarea>
      </div>
      <br />
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    </form>

    Voici le traitement PHP en intégralité :
    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
    <?php 
    if(isset($_POST['poster_cours_tp'])) {
    	print_r($_POST);
     
    	$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']);
    	// Vérification de la saisie minimale
    	//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="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."')";
    		  mysql_query($query_insertion_cours_tp) 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
    		  $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 insérer les chapitres - DEBUT
    		  foreach ($_POST['chapitre']['titre_chapitre'] as $num_chapitre => $titre_chapitre) {
    			  $contenu_chapitre = $_POST['chapitre']['contenu_chapitre'][$num_chapitre];
    			  $sql_insertion_chapitre="INSERT INTO chapitres (id_cours,titre_chapitre,contenu_chapitre,date_depot,id_auteur_chapitre) VALUES ('".$id_cours."','".mysql_real_escape_string($titre_chapitre)."','".mysql_real_escape_string($contenu_chapitre)."',now(),'1')";//".$id_utilisateur."
    			  mysql_query($sql_insertion_chapitre)
    			  or die('Erreur sur la requête SQL qui insère les chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les chapitres - FIN
     
    		  // Boucle pour insérer les sous-chapitres - DEBUT
    		  foreach ($_POST['sous_chapitre']['titre_sous_chapitre'] as $num_sous_chapitre => $titre_sous_chapitre) {
    			  $contenu_sous_chapitre = $_POST['sous_chapitre']['contenu_sous_chapitre'][$num_sous_chapitre];
     
    			  $sql_insertion_sous_chapitre="INSERT INTO sous_chapitres (	id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('".$id_chapitre_contenu."','".mysql_real_escape_string($titre_sous_chapitre)."','".mysql_real_escape_string($contenu_sous_chapitre)."',now(),'1')";
    			  mysql_query($sql_insertion_sous_chapitre)
    			  or die('Erreur sur la requête SQL qui insère les sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les sous-chapitres - FIN
     
    		  // Boucle pour insérer les questions - DEBUT
    		  foreach ($_POST['question_chapitre'] as $id_question => $contenu_question) {
    			  $sql_question="
    			  INSERT INTO questions (id_chapitre,contenu_question,date_depot,id_auteur_question,situation_question)
    			  VALUES (".$id_chapitre_titre.",'".$contenu_question."',now(),'1','1')";//".$id_utilisateur."
    			  mysql_query($sql_question)
    			  or die('Erreur sur la requête SQL qui insère les questions du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les questions - FIN
     
    		  // Boucle pour insérer les réponses - DEBUT
    		  foreach ($_POST['reponse_chapitre'] as $id_reponse => $reponse_chapitre) {
    			  $sql_reponse="
    			  INSERT INTO reponses (id_question,id_auteur_reponse,texte_reponse_attendue,date_depot) VALUES (".$id_question.",'1','".$reponse_chapitre."',now())";
    			  mysql_query($sql_reponse)
    			  or die('Erreur sur la requête SQL qui insère les réponses aux questions respectives du cours'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les réponses - FIN
     
    		  echo "OK.";
    }
    ?>

    Je cherche mais je ne trouve pas.

    Dites-moi ce qu'il faut changer autant dans le formulaire HTML que dans son traitement PHP SVP.

    J'ai mis var_dump($_POST['chapitre']['titre_chapitre']); juste avant la boucle qui s'occupe des chapitres. J'ai essayé et "NULL" s'affiche. A mon avis, c'est pour ça qu'il y a les deux avertissements qui s'affichent. Comment régler ce problème ?
    Je suis arrivé à insérer les titres et les contenus des chapitres mais il insère tout dans le champs "titre_chapitre" au lieu d'insérer les titres dans "titre_chapitre" et les contenus dans "contenu_chapitre". Comment faire ?

    En pièces jointes, vous trouverez :
    -le fichier PHP (à modifier)
    -les 4 fichiers des tables SQL (je ne mets pas la table "reponse" car il y sa une limite de 5 fichiers mais elle ressemble à la table "questions".

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

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, 14h58
  2. Réponses: 1
    Dernier message: 25/03/2011, 10h10
  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, 17h42
  4. [PHP 5.0] Fonction avec boucle "foreach"
    Par ju0123456789 dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2010, 18h12
  5. problème insert into avec boucle for
    Par nokia1600 dans le forum VB.NET
    Réponses: 8
    Dernier message: 30/10/2009, 15h08

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