IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Traitement PHP d'un formulaire [MySQL]


Sujet :

PHP & Base de données

  1. #21
    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
    Pas du tout, j'ai cherché et l'avertissement ne s'affiche plus.

    Voici le code en intégralité (dans le body) :
    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    <form method="post">
    Poster un Cours/TP</b> <br />
      <u>Matière :</u>
      <select name="matieres">
        <?php
    // Variables de session - DEBUT
    $query_recuperation_identifiant_connecte=$_SESSION['id_utilisateur'];
    // Variables de session - FIN
    $matiere = "SELECT matiereenseignee_utilisateur
    FROM test_site_utilisateur
    WHERE id_utilisateur='$query_recuperation_identifiant_connecte'"; 
    $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
    $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 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++) 
    { 
    	// DEBUT MODULE
    ?>
      <p>Titre du chapitre <?php echo $num_chapitre; ?> :
        <input name="titre_chapitre[<?php echo $num_chapitre; ?>]" type="text" />
      </p>
      <p>Contenu du chapitre <?php echo $num_chapitre; ?> :
        <textarea name="contenu_chapitre[<?php echo $num_chapitre; ?>]" rows="" cols=""></textarea>
      </p>
      <div>Questions/Réponses</div>
    <?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>
    <?php 
    	} // fin boucle question 
    	// FIN MODULE
    } // fin boucle chapitre 
     // 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;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
    // ---------------
    if (is_array($titre_chapitre_array)) {
    	foreach($titre_chapitre_array as $num_chapitre => $titre_chapitre){
    	//$num_chapitre
    	$titre_chapitre = (empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    	$contenu_chapitre = (empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    	// => on enregistre en BDD
    		// Questions / Réponses
    		if(!empty($question_chapitre_array[$num_chapitre])){
    			foreach($question_chapitre_array[$num_chapitre] as $num_question => $question_chapitre) {
    				// $num_question
    				$question_chapitre = (!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : '';
    				$reponse_chapitre = (!empty($reponse_chapitre_array[$num_chapitre][$num_question]))? $reponse_chapitre_array[$num_chapitre][$num_question] : '';
    				// => on enregistre en BDD
    		}
    	}
    }
    }
    ?>
    <div>Conclusion :
        <textarea name="conclusion_cours" rows="" cols=""></textarea>
      </div>
      <br />
      <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    </form>

    J'ai rajouté un test if donc ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if (is_array($titre_chapitre_array)) {
    dans lequel il y a la boucle .

  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
    Dans ce code, comment faire les requêtes SQL ? Je sais où je dois les mettre grâce aux commentaires. Comment gérer les erreurs de saisie ?

    Dans le code suivant, je vous met la boucle où j'ai fait les requêtes SQL :
    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
    <?php 
    	} // fin boucle question 
    	// FIN MODULE
    } // fin boucle chapitre 
     // 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;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
    // ---------------
    if (is_array($titre_chapitre_array)) {
    	foreach($titre_chapitre_array as $num_chapitre => $titre_chapitre){
    	//$num_chapitre
    	$titre_chapitre = (empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    	$contenu_chapitre = (empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    	// => on enregistre en BDD
    	$query_insertion_chapitre=mysql_query("INSERT INTO   test_site_chapitres_v2 (id_cours,titre_chapitre,contenu_chapitre) VALUES ('','$titre_chapitre_array','$contenu_chapitre_array')") or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL
     
    		// Questions / Réponses
    		if(!empty($question_chapitre_array[$num_chapitre])){
    			foreach($question_chapitre_array[$num_chapitre] as $num_question => $question_chapitre) {
    				// $num_question
    				$question_chapitre = (!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : '';
    				$reponse_chapitre = (!empty($reponse_chapitre_array[$num_chapitre][$num_question]))? $reponse_chapitre_array[$num_chapitre][$num_question] : '';
    				// => on enregistre en BDD
    					$query_insertion_questions=mysql_query("INSERT INTO test_site_questions_v2 (id_chapitre,contenu_question) VALUES ('','$question_chapitre_array')") or die('Erreur lors de l\'insertion d\'une question d\'un chapitre d\'un Cours/TP (identifiant du chapitre, contenu de la question'.mysql_error()); // Envoie une requête à un serveur MySQL
     
    		}
    	}
    }
    }
    ?>

    Je vais maintenant faire les codes de vérification.

    Concernant les requêtes SQL, vous pourrez voir comment j'ai inséré les valeurs.

    A noter que j'ai pas fait pour insérer les identifiants.

    Voilà pour maintenant, je vais faire le code de vérification et je reviens.

  3. #23
    Invité
    Invité(e)
    Par défaut
    Il serait plus judicieux de faire le TRAITEMENT... au bon moment.
    C-à-d APRES clic sur le bouton "Valider" !

    Tu as toute la soirée pour remettre les ACTIONS dans l'ordre.

    Et... la nuit porte conseil...

  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
    Je te mets le code en intégralité (formulaire + traitement).
    Le traitement se trouve après le bouton "Valider".
    De plus, j'ai ajouté le traitement qui permet de vérifier si l'utilisateur a correctement rempli le formulaire.
    Enfin, j'ai ajouté deux requêtes SQL qui permettent de :
    1) récupérer l'identifiant du cours pour le mettre dans les requêtes SQL d'insertion
    2) récupérer l'identifiant du chapitre pour le mettre dans les requêtes SQL d'insertion

    Voici le formulaire (avec la boucle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <form method="post">
    Poster un Cours/TP</b> <br />
      <u>Matière :</u>
      <select name="matieres">
        <?php
    // Variables de session - DEBUT
    $query_recuperation_identifiant_connecte=$_SESSION['id_utilisateur'];
    // Variables de session - FIN
    $matiere = "
    SELECT matiereenseignee_utilisateur
    FROM test_site_utilisateur
    WHERE id_utilisateur='$query_recuperation_identifiant_connecte'"; 
    $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
    $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 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++) 
    { 
    	// DEBUT MODULE
    ?>
      <p>Titre du chapitre <?php echo $num_chapitre; ?> :
        <input name="titre_chapitre[<?php echo $num_chapitre; ?>]" type="text" />
      </p>
      <p>Contenu du chapitre <?php echo $num_chapitre; ?> :
        <textarea name="contenu_chapitre[<?php echo $num_chapitre; ?>]" rows="" cols=""></textarea>
      </p>
      <div>Questions/Réponses</div>
    <?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>
    <?php 
    	} // fin boucle question 
    	// FIN MODULE
    } // fin boucle chapitre 
    ?>
    <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 son traitement (entre le bouton "Valider" et la balise ) :
    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
      <?php 
    // RECUPERATION / TRAITEMENT
    $matiere_choisie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['matieres'])));
    $classe_choisie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['classes'])));
    $titre_cours_tp=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['titre_cours_tp'])));
    $auteur_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['auteur_cours'])));
    $introduction_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['introduction_cours'])));
    $conclusion_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['conclusion_cours'])));
     
    // On récupère des array
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    $contenu_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
     
    // On récupére l'identifiant du cours pour le mettre dans les requêtes SQL d'insertion
    $query_selection_cours=mysql_query("
    SELECT id_cours
    FROM test_site_cours_v2
    WHERE titre_cours='$titre_cours_tp'")
    or die('Erreur lors de la sélection de l\'identifiant du Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
    // On récupère l'identifiant du chapitre pour le mettre dans les requêtes SQL d'insertion
    $query_selection_chapitre=mysql_query("
    SELECT id_chapitre
    FROM  test_site_chapitres_v2
    WHERE id_cours='$query_selection_cours'")
    or die('Erreur lors de la sélection d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
     
     
    if(isset($_POST['poster_cours_tp'])){
    	if (is_array($titre_chapitre_array)) {
    	// => 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_cloture_validation_cours_tp']==''||$_POST['introduction_cours']=='') {
    			echo "Veuillez saisir les informations générales du Cours/TP.";
    		}
    		else
    			$query_insertion_cours_tp=mysql_query(
    "INSERT INTO  test_site_cours_v2 (titre_cours,auteur_cours,introduction_cours,conclusion_cours,date_publication_cours,date_cloture_validation_cours,matiere_cours,classe_cours)
    VALUES ('$titre_cours_tp','$auteur_cours','$introduction_cours','$conclusion_cours',now(),'$date_cloture_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)'.mysql_error()); // Envoie une requête à un serveur MySQL
     
    			// => on enregistre en BDD si les zones de texte sont remplies
    			if ($_POST['titre_chapitre_array']==''||$_POST['contenu_chapitre_array']==''||$_POST['question_chapitre_array']==''||$_POST['reponse_chapitre_array']=='') {
    				echo "Veuillez saisir au moins un chapitre et au moins une question.";
                                    exit();
    			}
    			elseif ($_POST['question_chapitre_array']==''||$_POST['reponse_chapitre_array']=='') {
    				echo "Veuillez saisir au moins une question (libellé de la question et réponse de la question).";
                                    exit();
    			}
    			else
    				foreach($titre_chapitre_array as $num_chapitre => $titre_chapitre) {
    					//$num_chapitre
    					$titre_chapitre = (empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    					$contenu_chapitre = (empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    					$query_insertion_chapitre=mysql_query("
    INSERT INTO   test_site_chapitres_v2 (id_cours,titre_chapitre,contenu_chapitre) 
    VALUES ('$query_selection_cours','$titre_chapitre_array','$contenu_chapitre_array')")
    or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL - il faut récupérer l'identifiant du cours pour l'enregistrer dans la base de données
     
    					// Questions / Réponses
    					if(!empty($question_chapitre_array[$num_chapitre])){
    						foreach($question_chapitre_array[$num_chapitre] as $num_question => $question_chapitre) {
    							// $num_question
    							$question_chapitre = (!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : '';
    							$reponse_chapitre = (!empty($reponse_chapitre_array[$num_chapitre][$num_question]))? $reponse_chapitre_array[$num_chapitre][$num_question] : '';
     
    							// => on enregistre en BDD si les zones de texte sont remplies - à voir pour les réponses aux questions					
    							$query_insertion_questions=mysql_query("
    INSERT INTO test_site_questions_v2 (id_chapitre,contenu_question)
    VALUES ('$query_selection_chapitre','$question_chapitre_array')")
    or die('Erreur lors de l\'insertion d\'une question d\'un chapitre d\'un Cours/TP (identifiant du chapitre, contenu de la question'.mysql_error()); // Envoie une requête à un serveur MySQL - il faut récupérer l'identifiant du chapitre pour l'enregistrer dans la base de données (ce que j'ai fait, à voir si c'est bon) et voir si il faut ajouter un champs id_cours
    					}
    				}
    			}
    	}
    }
    ?>

    Est-ce que c'est dans l'ordre ?
    Je pense que ce n'est pas comme ça qu'il faut faire pour vérifier les saisies dans les zones de texte (sachant que ce sont des tableaux PHP).
    Qu'est-ce que vous en pensez ?

  5. #25
    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
    Bonjour,

    A mon avis le bloc de vérification de saisie d'un tableau donc celui-là ne va pas :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ($_POST['titre_chapitre_array']==''||$_POST['contenu_chapitre_array']==''||$_POST['question_chapitre_array']==''||$_POST['reponse_chapitre_array']=='') {
    	echo "Veuillez saisir au moins un chapitre et au moins une question.";
    	echo "Le contenu du chapitre est : ".$_POST['contenu_chapitre_array'].". Le contenu des question est : ".$_POST['question_chapitre_array'];
    	exit();
    }
    elseif ($_POST['question_chapitre_array']==''||$_POST['reponse_chapitre_array']=='') {
    	echo "Veuillez saisir au moins une question (libellé de la question et réponse de la question).";
    	exit();
    }
    .

    J'ai remplacé ce bloc par :
    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
    if(sizeof($titre_chapitre_array) ){   
    	echo "Le tableau TITRE CHAPITRE n'est pas vide !";   
    }   
    else
    	echo "Tableau TITRE CHAPITRE vide";
    if(sizeof($contenu_chapitre_array) ){   
    	echo "Le tableau CONTENU CHAPITRE n'est pas vide !";   
    }   
    else
    	echo "Tableau CONTENU CHAPITRE vide";
    if(sizeof($question_chapitre_array) ){   
    	echo "Le tableau QUESTION n'est pas vide !";   
    }   
    else
    	echo "Le tableau QUESTION vide";
    if(sizeof($reponse_chapitre_array) ){   
    	echo "Le tableau n'est pas vide !";   
    }
    .
    Après ce bloc, il y a la boucle donc :
    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
    else
    	foreach($titre_chapitre_array as $num_chapitre => $titre_chapitre) {
    		//$num_chapitre
    		$titre_chapitre = (empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    		$contenu_chapitre = (empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    		$query_insertion_chapitre=mysql_query("INSERT INTO   test_site_chapitres_v2 (id_cours,titre_chapitre,contenu_chapitre) VALUES ('$query_selection_cours','$titre_chapitre_array','$contenu_chapitre_array')") or die('Erreur lors de l\'insertion d\'un chapitre d\'un Cours/TP (identifiant du cours, titre du chapitre, contenu du chapitre)'.mysql_error()); // Envoie une requête à un serveur MySQL - il faut récupérer l'identifiant du cours pour l'enregistrer dans la base de données
    		// Questions / Réponses
    		if(!empty($question_chapitre_array[$num_chapitre])){
    			foreach($question_chapitre_array[$num_chapitre] as $num_question => $question_chapitre) {
    				// $num_question
    				$question_chapitre = (!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : '';
    				$reponse_chapitre = (!empty($reponse_chapitre_array[$num_chapitre][$num_question]))? $reponse_chapitre_array[$num_chapitre][$num_question] : '';
    				// => on enregistre en BDD si les zones de texte sont remplies - à voir pour les réponses aux questions					
    				$query_insertion_questions=mysql_query("INSERT INTO test_site_questions_v2 (id_chapitre,contenu_question) VALUES ('$query_selection_chapitre','$question_chapitre_array')") or die('Erreur lors de l\'insertion d\'une question d\'un chapitre d\'un Cours/TP (identifiant du chapitre, contenu de la question'.mysql_error()); // Envoie une requête à un serveur MySQL - il faut récupérer l'identifiant du chapitre pour l'enregistrer dans la base de données (ce que j'ai fait, à voir si c'est bon) et voir si il faut ajouter un champs id_cours
    		}
    	}

    Déjà, est-ce qu'il y a du progrès dans le code posté dans le dernier post ?

    Qu'en penses-tu ?

    Comment faire la gestion des erreurs sur des tableaux PHP ?

  6. #26
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu ne peux pas nous pondre un message toutes les 2 secondes.

    On n'est pas là pour t'enseigner le PHP.
    Et je ne suis pas sûr que tu comprennes bien ce que tu fais (ci-dessus, tu te trompe entre empty et !empty), ou les propositions qu'on te fait.

    Il existe de très bon cours sur DVP, notamment sur les array.
    => à commencer par : PHP : Le tutoriel pour grands débutants pressés - IV. PHP ETAPE 4
    => et aussi : FAQ PHP - tableaux
    => PHP Manual : Les tableaux
    On ne peut pas apprendre à ta place. C'est à TOI de faire des efforts.

    D'autres liens utiles :
    => Opérateurs de comparaison
    Voir notamment "L'opérateur ternaire" : $var = (condition) ? (si vrai) : (si faux);.

    Surtout que tu marches à reculons dans le noir avec un bandeau sur les yeux.
    Tu n'as pas une vision global de ton projet.
    Tu fais (NOUS faisons pour toi) des bouts de code par ci par là, en espérant qu'au final, tout colle ensemble !...
    Dernière modification par Invité ; 26/10/2013 à 11h47.

  7. #27
    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
    Il faut adapter ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $search_array = array('premier' => 1, 'second' => 4);
    if (array_key_exists('premier', $search_array)) {
        echo "L'élément 'premier' existe dans le tableau";
    exit();
    }

    à

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    $contenu_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;

    c'est ça ?

  8. #28
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 206
    Points : 4 680
    Points
    4 680
    Par défaut
    pratique l'autisme

    ta perle était (est toujours ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $titre_chapitre = (empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    se traduit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    si $num_chapitre est vide(="") alors
          $titre_chapitre = $num_chapitre(="")
    sinon //(est non vide)
         $titre_chapitre= ""
    vinceom92 l'anti

  9. #29
    Invité
    Invité(e)
    Par défaut
    Si je n'avais vraiment rien à faire, je t'écrirais le code...

    .. mais là... je vais aller prendre un bon bain bien chaud...

    Bon week-end.

  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
    Je fais des recherches mais si vous voulez m'aider, n'hésitez-pas...

  11. #31
    Invité
    Invité(e)
    Par défaut
    Faire des recherches, c'est bien.

    Savoir quoi rechercher, c'est mieux !

    Savoir quoi faire que ce qu'on trouve, c'est encore mieux !!

  12. #32
    Invité
    Invité(e)
    Par défaut
    Un petit conseil (avant d'aller me plonger dans mon bain !) :
    • commence par une formulaire SIMPLE : 1 seul chapitre, 1 titre (input), 1 contenu (textarea)!
    • laisse de coté les questions/réponses pour commencer.
    • formulaire + traitement SIMPLE.
    • tu ajouteras la gestion d'erreurs plus tard
    • tu ajouteras plusieurs chapitres plus tard
    • tu ajouteras les questions/réponses plus tard

  13. #33
    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
    Ce que je cherche à faire :
    Vérification du contenu des quatre tableaux : titre_chapitre, contenu_chapitre, question_chapitre, reponse_chapitre que je récupère en faisant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    $contenu_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
    . Si l'utilisateur n'a pas rempli le formulaire alors affichage d'un message d'erreur sinon requête SQL INSERT INTO.

  14. #34
    Invité
    Invité(e)
    Par défaut
    Rainman, enlève tes œillères et va prendre l'air.

    Ça te fera du bien.

    En revenant, tu suivras le conseil que je t'ai donné ci-dessus.
    Dernière modification par Invité ; 26/10/2013 à 14h31.

  15. #35
    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
    Citation Envoyé par jreaux62 Voir le message
    Un petit conseil (avant d'aller me plonger dans mon bain !) :
    • commence par une formulaire SIMPLE : 1 seul chapitre, 1 titre (input), 1 contenu (textarea)!
    • laisse de coté les questions/réponses pour commencer.
    • formulaire + traitement SIMPLE.
    • tu ajouteras la gestion d'erreurs plus tard
    • tu ajouteras plusieurs chapitres plus tard
    • tu ajouteras les questions/réponses plus tard
    Ok mais ce sont les traitements des tableaux PHP qui me posent soucis...

  16. #36
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 239
    Points : 8 508
    Points
    8 508
    Billets dans le blog
    17
    Par défaut
    Vérification du contenu des quatre tableaux : titre_chapitre, contenu_chapitre, question_chapitre, reponse_chapitre
    Salut !

    Dans l'extrait collé tu ne récupères pas le contenu de 4 tableaux, mais tu récupères 4 éléments d'un tableau $_POST. (je corrige pour que tu aies les idées bien au clair)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    $contenu_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
    C'est moche et sans grand intérêt.

    . Si l'utilisateur n'a pas rempli le formulaire alors affichage d'un message d'erreur sinon requête SQL INSERT INTO.
    Quels sont les champs obligatoires ?

  17. #37
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par vinceom92 Voir le message
    Ok mais ce sont les traitements des tableaux PHP qui me posent soucis...
    Tu m'étonnes, Elton !

    En réalité, on t'a écrit 80% du code, et ce sont les 20% restant qui te posent problème !

    Mais bon. Si Séb. veut bien s'y coller...

  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
    Citation Envoyé par Séb. Voir le message
    Quels sont les champs obligatoires ?
    C'est simple, toutes les zones de texte sont obligatoire.

    En résumé, je traite mon formulaire avec quatre tableaux (titre_chapitre, contenu_chapitre, question_chapitre, reponse_chapitre).

    Je souhaiterais faire un système de vérification du contenu des zones de texte (système avec les tableaux) : si l'utilisateur a oublié de saisir un champs texte alors afficher un message d'erreur et tout arrêter. Au contraire si l'utilisateur a correctement saisi le formulaire alors insertion dans la base de données suivant :
    - si ce sont les informations générales du cours alors enregistrer dans la table test_site_cours_v2,
    - si ce sont un chapitre alors enregistrer dans la table test_site_chapitres_v2,
    - si ce sont des questions alors enregistrer dans la table test_site_questions_v2,
    - si ce sont des réponses alors enregistrer dans la table test_site_reponses_v2 Je ne l'ai pas encore fait ce cas. Ajouté le 28/10/13 - Modification du traitement PHP.

    Voici le formulaire :

    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</b> <br />
      <u>Matière :</u>
      <select name="matieres">
        <?php
    // Variables de session - DEBUT
    $query_recuperation_identifiant_connecte=$_SESSION['id_utilisateur'];
    // Variables de session - FIN
    $matiere = "
    SELECT matiereenseignee_utilisateur
    FROM test_site_utilisateur
    WHERE id_utilisateur='$query_recuperation_identifiant_connecte'"; 
    $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
    $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 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++) 
    { 
            // DEBUT MODULE
    ?>
      <p>Titre du chapitre <?php echo $num_chapitre; ?> :
        <input name="titre_chapitre[<?php echo $num_chapitre; ?>]" type="text" />
      </p>
      <p>Contenu du chapitre <?php echo $num_chapitre; ?> :
        <textarea name="contenu_chapitre[<?php echo $num_chapitre; ?>]" rows="" cols=""></textarea>
      </p>
      <div>Questions/Réponses</div>
    <?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>
    <?php 
            } // fin boucle question 
            // FIN MODULE
    } // fin boucle chapitre 
    ?>
    <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 traitement PHP du formulaire : (entre
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="poster_cours_tp" value="Poster ce Cours/TP" />
    et ) :

    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
     
     <?php 
    // RECUPERATION / TRAITEMENT
    $matiere_choisie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['matieres'])));
    $classe_choisie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['classes'])));
    $titre_cours_tp=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['titre_cours_tp'])));
    $auteur_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['auteur_cours'])));
    $introduction_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['introduction_cours'])));
    $conclusion_cours=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['conclusion_cours'])));
     
    // On récupère des array
    $titre_chapitre_array = (!empty($_POST['titre_chapitre']))? $_POST['titre_chapitre'] : NULL;
    $contenu_chapitre_array = (!empty($_POST['contenu_chapitre']))? $_POST['contenu_chapitre'] : NULL;
    $question_chapitre_array = (!empty($_POST['question_chapitre']))? $_POST['question_chapitre'] : NULL;
    $reponse_chapitre_array = (!empty($_POST['reponse_chapitre']))? $_POST['reponse_chapitre'] : NULL;
     
    // On récupère l'identifiant du cours pour le mettre dans les requêtes SQL d'insertion
    $query_selection_cours=mysql_query("
    SELECT id_cours
    FROM test_site_cours_v2
    WHERE titre_cours='$titre_cours_tp'")
    or die('Erreur lors de la sélection de l\'identifiant du Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
    // On récupère l'identifiant du chapitre pour le mettre dans les requêtes SQL d'insertion
    $query_selection_chapitre=mysql_query("
    SELECT id_chapitre
    FROM  test_site_chapitres_v2
    WHERE id_cours='$query_selection_cours'")
    or die('Erreur lors de la sélection d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
     
     
    if(isset($_POST['poster_cours_tp'])){
    	if (is_array($titre_chapitre_array)) {
    	// => 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['introduction_cours']=='') {
    			echo "Veuillez saisir les informations générales du Cours/TP.";
    			exit();
    		}
    		else
    			$query_insertion_cours_tp=mysql_query("
    INSERT INTO  test_site_cours_v2 (titre_cours,auteur_cours,introduction_cours,conclusion_cours,date_publication_cours,date_cloture_validation_cours,matiere_cours,classe_cours)
    VALUES ('$titre_cours_tp','$auteur_cours','$introduction_cours','$conclusion_cours',now(),'$date_cloture_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)'.mysql_error()); // Envoie une requête à un serveur MySQL
     
    			// => on enregistre en BDD si les zones de texte sont remplies
    // Bloc à modifier - DEBUT - j'ai modifié ce bloc et les variables dans les requêtes SQL INSERT INTO
    			if(empty($titre_chapitre_array)&&empty($contenu_chapitre_array)&&empty($question_chapitre_array)&&empty($reponse_chapitre_array)) {
    				echo "Veuillez saisir au moins un chapitre et au moins une question sans oublier sa réponse.";
    				exit();
    			}
    // Bloc à modifier - FIN
    			else
    				foreach($titre_chapitre_array as $num_chapitre => $titre_chapitre) {
    					//$num_chapitre
    					$titre_chapitre = (!empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    					$contenu_chapitre = (!empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    					$query_insertion_chapitre=mysql_query("
    INSERT INTO test_site_chapitres_v2 (id_cours,titre_chapitre,contenu_chapitre,date_depot)
    VALUES ('$query_selection_cours','$titre_chapitre','$contenu_chapitre',now())") 
    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)'.mysql_error()); // Envoie une requête à un serveur MySQL - il faut récupérer l'identifiant du cours pour l'enregistrer dans la base de données
     
    					// Questions / Réponses
    					if(!empty($question_chapitre_array[$num_chapitre])){
    						foreach($question_chapitre_array[$num_chapitre] as $num_question => $question_chapitre) {
    							// $num_question
    							$question_chapitre = (!empty($question_chapitre_array[$num_chapitre][$num_question]))? $question_chapitre_array[$num_chapitre][$num_question] : '';
    							$reponse_chapitre = (!empty($reponse_chapitre_array[$num_chapitre][$num_question]))? $reponse_chapitre_array[$num_chapitre][$num_question] : '';
     
    							// => on enregistre en BDD si les zones de texte sont remplies				
    							$query_insertion_questions=mysql_query("
    INSERT INTO test_site_questions_v2 (id_chapitre,contenu_question,date_depot)
    VALUES ('$query_selection_chapitre','$question_chapitre',now())")
    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)'.mysql_error()); // Envoie une requête à un serveur MySQL - il faut récupérer l'identifiant du chapitre pour l'enregistrer dans la base de données (ce que j'ai fait, à voir si c'est bon) et voir si il faut ajouter un champs id_cours
     
    							// => on enregistre en BDD si les zones de texte sont remplies	- A mon avis, problème pour question_reference		
    							$query_insertion_reponses=mysql_query("
    INSERT INTO test_site_reponses_v2 (question_reference,date_depot)
    VALUES ('$question_chapitre',now())")
    or die('Erreur lors de l\'insertion d\'une réponse à une question d\'un Cours/TP (question référence, contenu de la réponse, date de dépot de la réponse'.mysql_error()); // Envoie une requête à un serveur MySQL - il faut récupérer l'identifiant de la question pour l'enregistrer dans la base de données
     
    							// Insertion de la relation Cours-TP/Utilisateurs/Chapitres/Questions/Réponses dans la base de données
    							$query_insertion_relation_cours_tp_utilisateur=mysql_query("
    INSERT INTO test_site_relation_cours_tp_utilisateur_v2 (id_cours_tp,id_utilisateur,id_chapitre,id_question,id_reponse)
    SELECT t1.id_cours,t2.id_utilisateur,t3.id_chapitre,t4.id_question,t5.id_reponse
    FROM test_site_cours_v2 t1,test_site_utilisateur t2,test_site_chapitres_v2 t3,test_site_questions_v2 t4,test_site_reponses_v2 t5
    WHERE pseudo_utilisateur='$pseudo_utilisateur'
    AND titre_cours='$titre_cours_tp'")
    or die('Erreur lors de l\'insertion de la relation Cours-TP/Utilisateur avec Chapitres+Questions+Réponses (pour assurer l\'affichage)'.mysql_error()); // Envoie une requête à un serveur MySQL
     
    	echo "Votre Cours/TP a été posté.";
     
    					}
    				}
    			}
    	}
    }
    ?>

    Comme vous le voyez, j'ai mis : "Bloc à modifier" là où je pense que ça ne va pas.
    En résumé, je récupère via des tableaux PHP les titres des chapitres, les contenus des chapitres, les questions par chapitres et les réponses aux questions. Quant aux informations générales du cours (titre, auteur, date de publication, date de clôture, etc...), je les traite normalement. De plus, j'ai fait deux requêtes SQL qui permettent de récupérer l'identifiant du cours et l'identifiant du chapitre pour le mettre dans les requêtes SQL d'insertion.

    Je continue mais je compte sur vous...

    PS : Je sais que dans une condition d'une requête SQL, il faut toujours rechercher l'identifiant et pas le titre (pour une meilleure sécurité).
    Dans la requête SQL qui permet de récupérer l'identifiant du cours, j'ai fait
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE titre_cours='$titre_cours_tp'
    .
    Au contraire dans la requête SQL qui permet de récupérer l'identifiant d'un chapitre, j'ai fait
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id_cours='$query_selection_cours'
    .

    Note du 28/10/13 : J'ai ajouté le traitement PHP des réponses aux questions.

    Voici les :
    test_site_cours_v2
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE IF NOT EXISTS `test_site_cours_v2` (
      `id_cours` int(11) NOT NULL AUTO_INCREMENT,
      `titre_cours` varchar(255) CHARACTER SET utf8 NOT NULL,
      `auteur_cours` varchar(255) CHARACTER SET utf8 NOT NULL,
      `introduction_cours` longtext CHARACTER SET utf8 NOT NULL,
      `conclusion_cours` longtext CHARACTER SET utf8 NOT NULL,
      `date_publication_cours` datetime NOT NULL,
      `date_cloture_validation_cours` datetime NOT NULL,
      `matiere_cours` varchar(255) CHARACTER SET utf8 NOT NULL,
      `classe_cours` varchar(255) CHARACTER SET utf8 NOT NULL,
      PRIMARY KEY (`id_cours`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

    test_site_chapitres_v2 (A 18 heures, j'ai rajouté un champs date_depot)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE IF NOT EXISTS `test_site_chapitres_v2` (
      `id_chapitre` int(11) NOT NULL AUTO_INCREMENT,
      `id_cours` int(11) NOT NULL,
      `titre_chapitre` varchar(255) CHARACTER SET utf8 NOT NULL,
      `contenu_chapitre` longtext CHARACTER SET utf8 NOT NULL,
      `date_depot` datetime NOT NULL,
      PRIMARY KEY (`id_chapitre`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

    test_site_questions_v2 (A 18 heures, j'ai rajouté un champs date_depot)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE IF NOT EXISTS `test_site_questions_v2` (
      `id_question` int(11) NOT NULL AUTO_INCREMENT,
      `id_chapitre` int(11) NOT NULL,
      `titre_question` varchar(255) CHARACTER SET utf8 NOT NULL,
      `contenu_question` varchar(255) CHARACTER SET utf8 NOT NULL,
      `reponse_question` varchar(255) CHARACTER SET utf8 NOT NULL,
      `date_depot` datetime NOT NULL,
      PRIMARY KEY (`id_question`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;

    test_site_reponses_v2 (A 18 heures, j'ai rajouté un champs date_depot)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE IF NOT EXISTS `test_site_reponses_v2` (
      `id_reponse` int(11) NOT NULL AUTO_INCREMENT,
      `texte_reponse` longtext CHARACTER SET utf8 NOT NULL,
      `question_reference` int(11) NOT NULL DEFAULT '0',
      `id_test_site_cours_tp` int(11) NOT NULL,
      `type_devoir` int(11) NOT NULL,
      `date_depot` datetime NOT NULL,
      PRIMARY KEY (`id_reponse`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=81 ;

    test_site_relation_cours_tp_utilisateur_v2 (Table relationnelle)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE IF NOT EXISTS `test_site_relation_cours_tp_utilisateur_v2` (
      `id_rel_cours_user` int(11) NOT NULL AUTO_INCREMENT,
      `id_cours_tp` int(11) NOT NULL,
      `id_utilisateur` int(11) NOT NULL,
      `id_chapitre` int(11) NOT NULL,
      `id_question` int(11) NOT NULL,
      `id_reponse` int(11) NOT NULL,
      PRIMARY KEY (`id_rel_cours_user`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

    J'aimerais régler le problème du traitement de cette page, je continue d'essayer mais n'hésitez pas...

    Note de 11 heures 09 : Comme tu le vois, j'ai modifié le bloc de vérification et les requêtes SQL (changement de variables)
    .
    Quand je teste, ce message s'affiche : Veuillez saisir au moins un chapitre et au moins une question sans oublier sa réponse.
    Quand je regarde sur PHPMyAdmin, les informations générales du cours (table test_site_cours_v2) s'insèrent. Les autres tables ( test_site_chapitres_v2, test_site_questions_v2, test_site_reponses_v2) ne se remplissent pas. De plus, les requêtes SQL ont besoin d'être modifiées notamment la requête SQL qui permet d'insérer les réponses (question_reference).

    Peux-tu m'aider à rendre fonctionnel ce code STP ?

    Note de 17 heures 15 :
    J'ai remplacé ce bloc :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($_POST['titre_chapitre'.$num_chapitre]==''||$_POST['contenu_chapitre'.$num_chapitre]==''||$_POST['question_chapitre'.$num_chapitre]==''&&$_POST['reponse_chapitre'.$num_chapitre]=='') {
    				echo "Veuillez saisir au moins un chapitre et au moins une question sans oublier sa réponse.";
    				exit();}
    par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		if(empty($titre_chapitre_array)&&empty($contenu_chapitre_array)&&empty($question_chapitre_array)&&empty($reponse_chapitre_array)) {
    				echo "Veuillez saisir au moins un chapitre et au moins une question sans oublier sa réponse.";
    				exit();
    			}

    Note de 20 heures 00 :
    Ca commence à fonctionner... J'ai mis à jour le traitement PHP ci-dessus. J'ai essayé en mettant qu'un chapitre (titre, contenu, question et la réponse attendue à la question). De plus, j'ai ajouté une requête SQL qui permet d'insérer les relations Cours-TP/Utilisateurs/Chapitres/Questions/Réponses.

    Je vous explique ce que ça fait quand je soumets le formulaire :
    - insertion des informations générales du Cours/TP (titre, introduction, conclusion, auteur, date de publication, date de clôture de validation) dans la table test_site_cours_v2,
    - insertion de 4 enregistrements (alors que j'ai fait un essai avec qu'un chapitre) dans la table test_site_chapitres_v2. Le champs id_cours s'enregistre avec la valeur 0 et pas l'identifiant du bon cours. Dans les deux autres champs "titre_chapitre" et "contenu_chapitre", il y a rien (aucune valeur). A 22 heures 30, j'ai fait en sorte que ces deux champs s'enregistrent. J'ai mis à la place de
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    					$titre_chapitre = (empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    					$contenu_chapitre = (empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    ce code
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    					$titre_chapitre = (!empty($titre_chapitre_array[$num_chapitre]))? $titre_chapitre_array[$num_chapitre] : '';
    					$contenu_chapitre = (!empty($contenu_chapitre_array[$num_chapitre]))? $contenu_chapitre_array[$num_chapitre] : '';
    . Toutefois, il y a toujours un problème dans cette table : le champs "id_cours" ne s'enregistre pas (il est égal à 0).
    - insertion de 20 enregistrements (alors que j'ai fait un essai avec qu'un chapitre) dans les tables test_site_questions_v2 et test_site_reponses_v2. Le champs "contenu_question" contient la question que j'ai faite. Dans les champs "titre_question" et "reponse_question", il y a rien (aucune valeur). Le champs "id_chapitre" s'enregistre avec la valeur 0 et pas l'identifiant du bon chapitre.
    - aucune donnée s'enregistre dans la table relationnelle test_site_relation_cours_tp_utilisateur_v2.
    - le message "Votre Cours/TP a été posté." s'affiche plusieurs fois.

    Voilà, j'avance : maintenant, ça passe dans les boucles... Il faut, toutefois, régler de nombreux problèmes...

    Qu'est-ce que vous en pensez ?

    Bonjour

    Voici les problèmes à régler :

    - le champs id_cours de la table test_site_chapitres_v2 s'enregistre avec comme valeur "0". Je voudrais qu'il aille chercher l'identifiant du cours dans la table test_site_cours_v2. J'ai essayé de faire une requête SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ... SELECT ...
    ,
    - les champs id_cours et id_chapitre de la table test_site_questions_v2 s'enregistrent avec comme valeur "0". Je voudrais qu'il aille chercher l'identifiant du cours dans la table test_site_cours_v2 et l'identifiant du chapitre dans la table test_site_chapitres_v2,
    - il faudrait rajouter un système qui permet de lui dire d'enregistrer le nombre de chapitre, le nombre de questions et le nombre de réponses écrit et pas le nombre de chapitre dans la boucle,
    - le message Votre Cours/TP a été posté. s'affiche plusieurs fois,
    - la table relationnelle test_site_relation_cours_tp_utilisateur_v2 ne se remplie pas.

    Si vous pouvez m'aider, ce serait bien.

    Note de jeudi 31 octobre 2013 : J'ai ajouté une clé étrangère en faisant la requête SQL suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE test_site_chapitres_v2 ADD FOREIGN KEY (id_cours) REFERENCES test_site_cours_v2(id_cours);
    .
    Toutefois, le champs id_cours de la table test_site_chapitres_v2 s'enregistre toujours avec comme valeur "0".

    Pouvez-vous m'aider ? Je continue de chercher...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/04/2015, 09h13
  2. [MySQL] Le fichier de traitement.php de formulaire ne remonte rien
    Par Jean-Michel G dans le forum PHP & Base de données
    Réponses: 76
    Dernier message: 13/03/2015, 18h01
  3. Récupérer $POST de formulaire créer par JAVASCRIPT pour traitement PHP
    Par rodblochon dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/03/2010, 06h14
  4. Traitement php d'un formulaire dynamique !
    Par Argol dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 05/03/2009, 16h10
  5. traitement en php d'un formulaire de contact
    Par dedel53 dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2007, 10h52

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