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. #21
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai dis :
    Maintenant il te reste à éliminer tes utilisations de sessions qui n'ont rien à faire ici.
    Ce n'est pas fait.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  2. #22
    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 formulaire HTML (avec les boucles) :
    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
    <form method="post">
    Poster un Cours/TP<br />
      <u>Matière :</u>
      <select name="matieres">
        <?php
    $matiere = "SELECT matiereenseignee_utilisateur FROM test_site_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 "; 
    $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 />
      <div><b>Rédigez votre cours</b></div>
      <p>Titre du cours :
        <input name="titre_cours_tp" type="text" />
      </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 de ce Cours/TP (Pas obligatoire)
        <input type="date" name="date_debut_validation_cours_tp" />
        <br />
        Date de clôture des validations de ce Cours/TP (Pas obligatoire)
        <input type="date" name="date_cloture_validation_cours_tp" />
        <br />
        Introduction :
        <textarea name="introduction_cours" rows="" cols=""></textarea>
     
    <?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 
    ?>
      <div>Conclusion :
        <textarea name="conclusion_cours" rows="" cols=""></textarea>
      </div>
    <br />
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    </form>
    Voici le code sans les variables de sessions :
    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
    // 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
     
    	// 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 ('','".$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
    	}
    	// 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='',contenu_chapitre='".mysql_real_escape_string($contenu_chapitre)."',date_depot=now(), id_auteur_chapitre=''
    		WHERE id_chapitre=''
    		AND 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
    	}
    	// 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 ('','".$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
    	}
    	// 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 ('','".$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
    	}
    	// Boucle Réponses - FIN
    }
    ?>

    Il faudra modifier les requêtes SQL.

    Juste pour rappel, il faut insérer :
    -dans la table cours : les informations générales du cours (première requête SQL),
    -dans la table chapitres : les informations des chapitres (identifiant du cours, l'identifiant de l'auteur du chapitre, le titre du chapitre, le contenu du chapitre, la date du dépôt)
    -dans la table sous_chapitres : les informations des sous-chapitres (identifiant du chapitre, titre du sous-chapitre, contenu du sous-chapitre, la date du dépôt, l'identifiant de l'auteur du sous-chapitre)
    -dans la table questions : les informations des questions (identifiant du chapitre, l'identifiant de l'auteur de la question, situation_question, le contenu de la question) : En ce qui concerne le champs situation_question, il faut insérer "1".
    -dans la table reponses les informations des réponses (identifiant de la question, l'identifiant de l'auteur de la réponse, la réponse attendue, la date du dépôt)

    Hormis la table cours, il faut bien entendu insérer l'intégralité des données saisies non vides.
    Tu m'avais dit aussi de faire qu'une boucle pour les titres et pour les contenus des chapitres et pour les questions et leurs réponses respectives : je l'ai fait mais pas sur ce code.

  3. #23
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $question_chapitre = mysql_real_escape_string(!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : '';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    tiens c'est revenu ces horreurs ?
    depuis le debut je te dis que ca n'a aucun sens tout ça car un titre_chapitre ne doit pas être vide ou null par exemple.
    Si $_POST['titre_chapitre'] est vide, ton traitemenbt s'arrête, il n'y a pas a lui donner une valeur NULL.
    c'est encore pire pour $question_chapitre_array qui est un tableau et auquel tu donnes la valeur d'une chaine vide.

    je l'ai fait mais pas sur ce code.
    Montre nous la bonne version du code alors
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #24
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    J'ai supprimé ces trois lignes (avec $question_chapitre_array). On va partir de ce code.

    Peux-tu proposer ton traitement PHP pour traiter ce formulaire STP ?

    Pour info, le voici actualisé :
    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
    <?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']);
     
    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
     
    	// Boucle Titres Chapitres - DEBUT
    	foreach ($_POST['titre_chapitre'] as $num_chapitre => $titre_chapitre) {
    		$query_insertion_titre_chapitre="INSERT INTO chapitres (id_cours,titre_chapitre,date_depot,id_auteur_chapitre) 
    		VALUES ('','".$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
    	}
    	// Boucle Titres Chapitres - FIN
    	// Boucle Contenu Chapitres - DEBUT
    	foreach ($_POST['contenu_chapitre'] as $num_chapitre => $contenu_chapitre) {
    		$query_insertion_contenu_chapitre="
    		UPDATE chapitres
    		SET id_cours='',contenu_chapitre='".mysql_real_escape_string($contenu_chapitre)."',date_depot=now(), id_auteur_chapitre=''
    		WHERE id_chapitre=''
    		AND 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
    	}
    	// Boucle Contenu Chapitres - FIN
            // Boucle Titres Sous-Chapitres - DEBUT
    	foreach ($_POST['titre_sous_chapitre'] as $num_sous_chapitre => $titre_sous_chapitre) {
    		$query_insertion_titre_sous_chapitre="INSERT INTO sous_chapitres (id_chapitre,titre_sous_chapitre,contenu_sous_chapitre,date_depot,id_auteur_sous_chapitre) 
    		VALUES ('','".$titre_sous_chapitre."','".$contenu_sous_chapitre."',now(),'".$id_utilisateur."')";
    		mysql_query($query_insertion_titre_sous_chapitre) or die('Erreur lors de l\'insertion d\'un sous-chapitre d\'un Cours/TP (titre et contenu du sous-chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
    	}
    	// Boucle Titres Sous-Chapitres - FIN
    	// Boucle Questions - DEBUT
    	foreach($_POST['contenu_question'][$num_chapitre] as $num_question => $question_chapitre) {
    		// 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 ('','".$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
    	}
    	// Boucle Questions - FIN
    	// Boucle Réponses - DEBUT
    	foreach($_POST['contenu_reponse'][$num_chapitre] as $num_question => $reponse_chapitre) {
    		$query_insertion_reponses="INSERT INTO reponses (id_question,texte_reponse_attendue,date_depot) VALUES ('','".$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
    	}
    	// Boucle Réponses - FIN
    }
    ?>

    Je ne m'en sors pas avec ce traitement PHP alors si tu pouvais le faire, ce serait bien. Ce n'est pas faute d'essayer, ça fait depuis plusieurs jours que j'y suis. Je pense qu'il faudra aussi supprimer $titre_chapitre_array, $reponse_chapitre et $contenu_chapitre_array (tout les déclarations array), non ?

    Je comprends ce qu'il faut faire mais je ne sais pas comment le coder. Pour chaque titre/contenu des chapitres, chaque sous-chapitre et chaque titre/contenu des sous-chapitres, il faut insérer les données saisies dans les tables correspondantes avec les bons identifiants (du cours ou du chapitre correspondant).
    Il faut insérer les questions avec l'identifiant du chapitre correspondant. Il faut insérer les chapitres avec l'identifiant du cours. Il faut insérer les sous-chapitres avec l'identifiant du chapitre correspondant. Il faut insérer les questions avec l'identifiant du chapitre. Il faut insérer les réponses avec l'identifiant de la question correspondante.

    Merci d'avance.

    PS : Pour que tu puisses voir concrètement, je te mets le fichier en pièce jointe.

  5. #25
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu_chapitre = mysql_real_escape_string(!empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    y'en a encore.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #26
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Je l'ai mis à jour dans le code ci-dessus.

    Je penses qu'il n'y en a plus, là !

    Qu'est-ce qu'il y a d'autre à supprimer ou à modifier et par quoi ?

    Prends ce code et modifie le STP.

  7. #27
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ou est défini $contenu_sous_chapitre ?

    "id_chapitre" c'est la clef de la table "sous_chapitre" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #28
    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
    $contenu_sous_chapitre n'est pas défini.

    Il faut trouver un moyen pour que :
    -$titre_chapitre récupère toutes les valeurs non vides de titre_chapitre[<?php echo $num_chapitre; ?>],
    -$contenu_chapitre récupère toutes les valeurs non vides de contenu_chapitre[<?php echo $num_chapitre; ?>],
    -$question_chapitre récupère toutes les valeurs non vides de question_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>],
    -$reponse_chapitre récupère toutes les valeurs non vides de reponse_chapitre[<?php echo $num_chapitre; ?>][<?php echo $num_question; ?>],
    -$titre_sous_chapitre récupère toutes les valeurs (titres des sous-chapitres) non vides de sous_chapitre[<?php echo $num_sous_chapitre; ?>] (tu m'as dit qu'il fallait mettre le même name pour les titres et contenus des sous-chapitres),
    -les contenus des sous-chapitres soient récupérés pour les insérer dans la base de données (comme les autres)

    id_chapitre n'est pas la clé primaire de la table sous_chapitres. La clé primaire de cette table est id_sous_chapitre. Au niveau de la structure SQL c'est bon, je ne m'en sors pas dans le traitement PHP qui permet d'insérer correctement les valeurs non vides dans les différentes tables (avec les bons identifiants).

    Peux-tu me proposer ton traitement PHP en intégralité qui s'occupe de ce formulaire (insertion de toutes les données saisies dans les bonnes tables avec les bons identifiants (du cours, des chapitres, des questions) STP ?

    Si c'est plus simple pour toi, proposes-moi un formulaire (informations générales, chapitres, sous-chapitres, questions et leurs réponses attendues respectives) ainsi que son traitement PHP complet qui tient compte des identifiants. Pour ma part, je suis bloqué. Je l'étudierai afin de comprendre.

  9. #29
    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
    $contenu_sous_chapitre n'est pas défini.
    Il faut le définir alors.
    C'est evident que ton insertion est incomplète si tu ne mets pas toutes les valeurs.

    id_chapitre n'est pas la clé primaire de la table sous_chapitres. La clé primaire de cette table est id_sous_chapitre.
    Dans ta requête $query_insertion_titre_sous_chapitre tu as mis "id_chapitre" comme une clef autoincrementé et "id_sous_chapitre" n'est pas mentionnée.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #30
    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 ? Où ? Il faut aussi qu'il tienne compte du numéro du sous-chapitre aussi !

    Sur ce code, je n'y arrive pas à le résoudre pourtant ce n'est pas faute d'essayer. J'y suis arrivé sans tenir compte des sous-chapitres. Est-ce que tu peux poster un traitement PHP STP ?

  11. #31
    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
    D'ou vient contenu_sous_chapitre ? il n'est pas mentionné dans la liste que tu as faite au dessus.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #32
    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
    En attendant de tout faire marcher avec ta technique, j'ai fait trois fichiers qui s'occupent de toutes les insertions et ils fonctionnent que je te mets en pièces jointes.

    Désormais, il faut les regrouper en un fichier.
    Est-ce que tu peux m'aider à en faire qu'un seul fichier STP ?

    J'ai regroupé les chapitres et les sous-chapitres. Il ne manque plus qu'à regrouper les questions/réponses respectives.

    Le fichier des questions et leurs réponses respectives fonctionne tout seul. Quand j'essaye de l'ajouter dans le fichier chapitres/sous-chapitres, il ne marche pas.

  13. #33
    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 ferais mieux de te concentrer sur un code propre et cohérent plutôt que de faire deux choses à la fois.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #34
    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
    Oui je suis d'accord : proposes moi un formulaire HTML qui traite tout (chapitres, sous-chapitres, questions, réponses) et son traitement PHP qui insère toutes les données dans les bonnes tables avec les bons identifiants sur lesquels je pourrais m'appuyer STP.

    Pour cette fois, je n'y arrive pas (ce n'est pas faute de s'y pencher dessus !).

    Le mieux, c'est que tu me proposes un formulaire et son traitement PHP complet avec lesquels je pourrais avancer efficacement.

    Si tu veux, on commence d'une page vierge et tu me dis comment faire ce formulaire et comment bien le gérer. Par contre, il faudra que tu me guides bien parce que là, je ne sais pas faire ce formulaire !

    Est-ce que tu veux que je mettes ce sujet en RESOLU et que j'en poste un nouveau sur lequel je demanderais comment insérer dans des différentes tables SQL des données issues d'un formulaire HTML pour partir sur de bonnes bases ?

    Merci d'avance.

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Vince, le prends pas mal mais ça fait quasiment 2 pages, qu'à chacun de tes messages, tu lui demandes de travailler à ta place.
    Je pense qu'au bout de la troisième page, tu pourras t'arrêter.

    Au passage, un array en php, ça commence à 0 et non à 1, comme tu le fais dans ton formulaire.

  16. #36
    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
    Lud0o, je cherche mais je n'y arrive pas. C'est pour cela que je lui demande son formulaire HTML et son traitement PHP pour pouvoir partir sur de bonnes bases.

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Les bonnes bases, ce sont des fichiers vierges où tu réajouteras les éléments au fur et à mesure pour isoler les erreurs. Voire dumper des variables pour savoir ce qui transite en mémoire.

  18. #38
    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 [sabotage] Traitement PHP d'un formulaire
    Bonjour,

    Je ne m'en sors pas pour insérer les données d'un formulaire HTML dans des différentes tables en tenant compte qu'il faut gérer les inscriptions des identifiants des différentes catégories.

    Voici le formulaire HTML (avec les 3 boucles : chapitres, sous-chapitres, questions/réponses) (Afin de ne pas devoir réécrire à chaque test les données, j'ai mis par défaut des valeurs.) :
    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="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="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="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="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="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>

    Est-ce que les zones de texte sont bien nommées pour pouvoir être traitées correctement (chapitres, sous-chapitres, questions, réponses) ?

    Voici le traitement PHP (avec 6 boucles foreach) (Pour le débogage, j'ai mis en commentaire les tests et remplacé $id_utilisateur par 1.) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <?php 
    if(isset($_POST['poster_cours_tp'])) {
    	$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 titres des chapitres - DEBUT
    		  foreach ($_POST['titre_chapitre'] as $id_chapitre_titre => $titre_chapitre) {
    			  $sql_insertion_chapitre_titre="
    			  INSERT INTO chapitres (id_cours,titre_chapitre,date_depot,id_auteur_chapitre)
    			  VALUES (".$id_cours.",'".$titre_chapitre."',now(),'1')";//".$id_utilisateur."
    			  mysql_query($sql_insertion_chapitre_titre)
    			  or die('Erreur sur la requête SQL qui insère les titres des chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les titres des chapitres - FIN
     
    		  // Boucle pour modifier les contenus des chapitres - DEBUT
    		  foreach ($_POST['contenu_chapitre'] as $id_chapitre_contenu => $contenu_chapitre) {
    			  $sql_chapitre_contenu="
    			  UPDATE chapitres
    			  SET contenu_chapitre='".$contenu_chapitre."',date_maj_chapitre=now() WHERE id_chapitre='".$id_chapitre_titre."'";
    			  //echo "Requête SQL : ".$sql_chapitre_contenu."<br />";
    			  mysql_query($sql_chapitre_contenu)
    			  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
    		  }
    		  // Boucle pour modifier les contenus des chapitres - FIN
     
    		  // Boucle pour insérer les titres des sous-chapitres - DEBUT
    		  foreach ($_POST['titre_sous_chapitre'] as $id_sous_chapitre_titre => $titre_sous_chapitre) {
    			  $sql_insertion_sous_chapitre_titre="
    			  INSERT INTO sous_chapitres (	id_chapitre,titre_sous_chapitre,date_depot,id_auteur_sous_chapitre) VALUES ('".$id_chapitre_contenu."','".$titre_sous_chapitre."',now(),'1')";//".$id_utilisateur."
    			  mysql_query($sql_insertion_sous_chapitre_titre)
    			  or die('Erreur sur la requête SQL qui insère les titres des sous-chapitres du cours.'.mysql_error()); // Envoie une requête à un serveur MySQL
    		  }
    		  // Boucle pour insérer les titres des sous-chapitres - FIN
     
    		  // Boucle pour modifier les contenus des sous-chapitres - DEBUT
    		  foreach ($_POST['contenu_sous_chapitre'] as $id_sous_chapitre_contenu => $contenu_sous_chapitre) {
    			  $sql_modification_sous_chapitre_contenu="
    			  UPDATE sous_chapitres
    			  SET contenu_sous_chapitre='".mysql_real_escape_string($contenu_sous_chapitre)."',id_auteur_sous_chapitre='1'
    			  WHERE id_sous_chapitre='".$id_sous_chapitre_titre."'";//".$id_utilisateur."
    			  mysql_query($sql_modification_sous_chapitre_contenu)
    			  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
    		  }
    		  // Boucle pour modifier les contenus des 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`
     
     
    		  // Débogage -  DEBUT
    		  echo "var_dump (titre du chapitre) : ".var_dump($titre_chapitre)."<br />";
    		  echo "var_dump (contenu du chapitre) : ".var_dump($contenu_chapitre)."<br />";
    		  echo "var_dump (titre du sous-chapitre) : ".var_dump($titre_sous_chapitre)."<br />";
    		  echo "var_dump (contenu du sous-chapitre) : ".var_dump($contenu_sous_chapitre)."<br />";
    		  echo "var_dump (contenu de la question) : ".var_dump($contenu_question)."<br />";
    		  echo "var_dump (contenu de la réponse) : ".var_dump($reponse_chapitre)."<br />";
    		  echo "print_r (titre du chapitre) : ".print_r($titre_chapitre)."<br />";
    		  echo "print_r (contenu du chapitre) : ".print_r($contenu_chapitre)."<br />";
    		  echo "print_r (titre du sous-chapitre) : ".print_r($titre_sous_chapitre)."<br />";
    		  echo "print_r (contenu du sous-chapitre) : ".print_r($contenu_sous_chapitre)."<br />";
    		  echo "print_r (contenu de la question) : ".print_r($contenu_question)."<br />";
    		  echo "print_r (contenu de la réponse) : ".print_r($reponse_chapitre)."<br />";
    		  echo "$_POST : ".$_POST."<br />";
    		  // Débogage - FIN
     
    		  echo "Message OK (Inscriptions correctement exécutées).";
    }
    ?>

    Avec ce code :
    - la table "cours" s'insère avec les bonnes valeurs
    - la table "chapitres" s'insère avec le titre mais pas le contenu
    - la table "sous_chapitres" : le champs "id_chapitre" est égal à "0" et le champs "contenu_sous_chapitre" est vide
    - la table "questions", aucune insertion, une erreur due à $id_chapitre_titre qui ne contient pas le bon identifiant du chapitre : du coup, le traitement PHP s'arrête là du coup le débogage ne s'effectue pas
    - la table "reponses", aucune insertion

    Sachant qu'un chapitre ou un sous-chapitre a obligatoirement un titre et un contenu, j'ai fait deux boucles foreach : dans la seconde, j'essaye de mettre une condition sur l'identifiant du chapitre pour modifier uniquement le bon sous-chapitre.
    Comment faire pour que les tables chapitres (titre du chapitre, contenu du chapitre) sous_chapitres (identifiant du chapitre, titre du sous-chapitre, contenu du sous-chapitre) s'insèrent avec les bonnes valeurs ? Pour la table questions, l'identifiant du bon chapitre doit s'insérer et pour la table reponses, l'identifiant de la bonne question doit s'insérer.
    Faut-il faire deux boucles foreach imbriquées pour récupérer les bons identifiants ?

    Pour réparer ce problème, il faut insérer les bons identifiants (cours, chapitre, question) en mettant les deux valeurs (titre, contenu).

    En ce qui concerne les boucles qui s'occupent des contenus des chapitres et des contenus des sous-chapitres, il y a un problème sur la condition sur l'identifiant du chapitre pour qu'il mette à jour les bons chapitres. Je pense que c'est ça qui ne vas pas : il faut arriver à retrouver le bon identifiant du chapitre c'est à dire que la condition WHERE id_chapitre doit être comparé à l'identifiant du chapitre de la boucle précédente, ce n'est pas $id_chapitre_contenu (puisqu'il est égal à 1, 2, 3, etc... mais l'identifiant du chapitre de la requête $sql_insertion_chapitre_titre).

    Comme vous le voyez, j'arrive avec un code, la structure SQL est bonne. Il faut s'occuper de ce traitement afin qu'il insère toutes les données correctement (avec les bons identifiants, avec toutes les données).

  19. #39
    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
    Comme je t'ai déjà dit, tu n'as pas besoin d'une boucle pour le titre et une boucle pour le contenu puisqu'ils vont ensemble.
    En conséquence, tu n'as pas besoin d'une requête UPDATE mais seulement d'un INSERT qui insère le titre et le contenu provenant du formulaire.

    Encore une fois, pour debuguer, il faut que tu regardes ce que tu recois du formulaire dans son ensemble (print_r($_POST); et contrôler les valeurs individuelles qui passent dans tes boucles foreach.
    Cela ne demande pas d'expertise, juste de la patience et de la rigueur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #40
    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
    D'accord mais comment fait-on pour récupérer en une fois le titre et le contenu d'un chapitre ou d'un sous-chapitre ?

    Il faut faire avec des tableaux à deux dimensions.

    Si je mets print_r($_POST); après if(isset($_POST['poster_cours_tp'])) {, toutes les valeurs s'affichent.

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