Page 1 sur 1

Insertion de données dans la BDD (depuis des questionnaires)

Posté : 08 févr. 2012, 15:43
par Géronimooo
Bonjour,

je développe actuellement un projet de questionnaire permettant à des élèves d'une école d'apporter leurs avis sur les différents cours qu'ils suivent.

Pour le moment, j'ai mis en place un système de questions et, quand la question est de type "QCM", des boutons radios s'affichent.
Si la question est de type "Libre", un textarea s'affiche.

Voici mon code (qui fonctionne) :
<form method="post" action="ajout_reponse.php">
<div id="question">
<?php 
  echo '<b>- ' . $resAff["libelle"]  . '</b><br/><br/>';
  if ($resAff["type"] == "QCM")
    {

	$retour = mysql_query('SELECT texte FROM reponse_qcm');
	while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news.
	{
	  echo '<input type="radio" name="radio" value=""/>';						
	  echo ' '; echo($donnees['texte']); echo '<br/>'; 
	}
	  echo '<br/><br/>';

	}

	else
	{
	  echo '<textarea name="reponse_libre" cols="1000" rows="4" id="reponse_libre"></textarea>' . '<br/><br/><br/>';
	}
	?>

</div> <br/><div style="clear: both;">&nbsp;</div>
	
	<?php	
	}
	?>

<br/><br/><br/><br/>
<center> - - - - - - - - - - - - - - - - - - - - </center><br/><br/>

<center>
    <input type="button"  class="btn" id="button2" value="Annuler" />  &nbsp; &nbsp; &nbsp; 
    <input type="submit" class="btn" id="button2" name="submit" value="Envoyer les résultats" href="index.php"/> <br/>
</center>

</form>
?>
Mon problème actuel est que j'aimerais rendre ce système de questionnaire actif en insérant les données des formulaires dans la table "resultat" de ma BDD, mais je n'y arrive pas trop.

Table resultat à updater à la saisie de réponse : (pièce jointe)

Il faut donc que je travaille sur ma page ajout_reponse.php appelée par le <form action "..">.
J'ai toujours procédé avec des if (isset ...) mais là c'est plus compliqué car il y a, comme on peut le voir sur la table "resultat", quelques clés étrangères que je ne sais comment récupérer ..

Voici pour le moment ce que j'ai fait sur ma page ajout_reponse.php (dans le cas d'une question Libre uniquement) :
<?php
include('connexionBDD.php');

//--------------------------------------------------------
// Insertion de réponse LIBRE ?
//--------------------------------------------------------
if(isset($_POST['reponse_libre'])) 
{
    $reponse = addslashes($_POST['reponse_libre']);	
	
	// Ce n'est pas une modification, on crée une nouvelle entrée dans la table.
	mysql_query("INSERT INTO resultat VALUES('', '', '', '', '', '" . $reponse . "')");
}
print ("<script language = \"JavaScript\">");
print ("location.href = 'index.php';");
print ("</script>"); 
?>

Quelqu'un a une idée de comment procéder pour insérer les réponses de type "Libre" remplies par l'utilisateur dans la BDD ?

Merci à vous.

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 08 févr. 2012, 23:16
par atome13
Je ne suis que débutant en php mais n'y as t'il pas une erreur dans ton code, tu écris :
        mysql_query("INSERT INTO resultat VALUES('', '', '', '', '', '" . $reponse . "')");

Ce ne serait pas :
        mysql_query("INSERT INTO resultat VALUES('', '', '', '', '', '" . $reponse . "');
De plus, il manque une colonne dans ton insert, j'en compte 7 dans ta table et 6 dans ta requête.

En espérant t'avoir aidé. Cordialement

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 09 févr. 2012, 00:48
par moogli
salut,

@atome13 : non il faut fermer la parenthèse du value ;) (insert into table values (,,,,,,); )

Je pense qu'il y a un problème de conception à la base.
Tu ne devrais pas avoir autant de champs "identique" sur une table.

par exemple (un truc rapide)
Image

celui ci ne règle pas le problème du vote "libre"

tu peux ajouter une table pour les votes "libre". (id, id vote, le texte)

après tu fait une requête sur chaque pour savoir s'il y a ou non des vote libre sur le vote en question.


@+

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 09 févr. 2012, 14:42
par Géronimooo
Bonjour et merci de m'avoir répondu !

@ moogli : j'ai passé pas mal de temps sur mon mcd avec mon maître de stage et je pense que ce système tourne bien au niveau de phpmyadmin car la table "resultat" récupère les infos de plusieurs tables pour former les résultats, il est donc normal, je pense, d'avoir autant de clés étrangères !

Mais quand on voit le mcd, c'est tout de suite moins barbare que ce que peut laisser paraître la table SQL ^^

Pas de solutions au niveau du code sinon ?

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 09 févr. 2012, 15:10
par moogli
je rste dubitatif quand à avoir deux champ de réponse dans l table, sans parler des infos multiple qui ne devrait pas y être.

quand je vois libre et QCM à volo dans la table, je me dit que l'unicité des données n'est pas forcément respectées.

enfin bref.

soit tu stock les ref dans un tableau en session, soit dans des champs cachées, soit tu les récupères dans la base avant insertion parce que bon ces infos s'y trouve, il te suffit de véhiculer la clef primaire de la question.

@+

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 09 févr. 2012, 15:26
par Géronimooo
Oui mais c'est une table regroupant les résultats globaux des évaluations, donc les résultats des questions de types QCM et Libre.
Chaque réponse à une question libre donne lieu à une entrée dans la table "resultat".
Dans le cas de la réponse QCM, si on y répond pour la première fois, une ligne est ajoutée.
Si on répond à la même question et par la même réponse, un compteur incrémente le nombre de résultats sur cette réponse.

Merci de tes conseils en tout cas

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 09 févr. 2012, 15:37
par moogli
pour le compteur sql propose la focntion count :)

@+

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 09 févr. 2012, 15:45
par Géronimooo
En effet oui, mais même pour chaque entrée en dynamique ?

j'avais commencé à faire un truc du genre :

UPDATE RESULTAT, QUESTION
SET compteur_reponseqcm = compteur_reponseqcm + 1
WHERE ...

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 10 févr. 2012, 12:40
par moogli
ben c 'est toi qui vois mais c'est de la donnée qui n'est pas forcément nécessaire :)


@+

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 14 févr. 2012, 15:06
par Géronimooo
UP :)

J'ai réussi à récupérer l'id de l'évaluation en cours grâce aux sessions et à l'insérer dans ma BDD au moment de l'insertion de données.

Cependant, j'éprouve quelques difficultés à récupérer l'id de mes questions auxquelles je réponds... En effet, j'aimerais que 1 insertion se fasse dans la BDD pour CHAQUE question à laquelle je répond, hors là ça ne prend qu'une réponse en compte.

Voici mon code d'insertion actuel :
session_start();
include("connexionBDD.php");
$sqlEval = mysql_query("SELECT eval_id
					    FROM EVAL
					    WHERE EVAL.eval_fk_matiere='".$_SESSION['matiere_id']."' ");
$resEval = mysql_fetch_assoc($sqlEval);

echo $resEval['eval_id'];

//--------------------------------------------------------
// Insertion de réponse LIBRE ?
//--------------------------------------------------------
if(isset($_POST['reponse_libre']))
{
    $reponse = addslashes($_POST['reponse_libre']);	
	
	// Ce n'est pas une modification, on crée une nouvelle entrée dans la table.
	mysql_query("INSERT INTO resultat VALUES('', '".$resEval['eval_id']."', '1', 'Libre', 'NULL', '1', '" . $reponse . "')") or die(mysql_error());
}
Avec ce code, j'arrive à insérer dans ma BDD le contenu du textarea et à récupérer l'id de l'évaluation à laquelle je répond, pour une seule question uniquement.

Mes questions sont :
- Premièrement, comment récupérer l'id (ou les id) de la question à laquelle j'ai répondu pour pouvoir renseigner dans ma table "resultat" au moment de l'insertion, l'id de la question à laquelle est rattachée la réponse ?
- Comment faire en sorte qu'il y ai une entrée dans la BDD pour CHAQUE réponse donnée ?

Pour schématiser, on doit avoir, au moment de l'insertion :

Cas d'une réponse de type "Libre" : (pour une seule réponse)
resultat_id resultat_fk_eval resultat_fk_question resultat_fk_question_type resultat_fk_reponseqcm compteur_reponseqcm libre
37 4 1 Libre NULL 1 ma_réponse

ou bien (pour plusieurs réponses) :
resultat_id resultat_fk_eval resultat_fk_question resultat_fk_question_type resultat_fk_reponseqcm compteur_reponseqcm libre
37 4 1 Libre NULL 1 ma_réponse 1
resultat_id resultat_fk_eval resultat_fk_question resultat_fk_question_type resultat_fk_reponseqcm compteur_reponseqcm libre
37 4 2 Libre NULL 1 ma_réponse 2
resultat_id resultat_fk_eval resultat_fk_question resultat_fk_question_type resultat_fk_reponseqcm compteur_reponseqcm libre
37 4 3 Libre NULL 1 ma_réponse 3

Help :cry:

Merci à vous.

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 15 févr. 2012, 10:19
par Géronimooo
UP !

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 15 févr. 2012, 11:40
par moogli
ben soit tu valide directement chaque question et insère ensuite dans la base, soit tu stock le tout en session et après tu boucle sur le tableau de stockage des questions réponses.

dans tous les cas tu doit gérer l'id de la question courante (par le formulaire ou en session). et en fin de question un foreach avec la requete dedans.

pour infos ton jeux de donnée ne peux être bon, une clef primaire est, par définition, unique et la y trois fois 37 ^^

perso je pense que tu doit prévoir ton appli sur le papier avant et ça ira mieux ;)

@+

Re: Insertion de données dans la BDD (depuis des questionnai

Posté : 15 févr. 2012, 12:39
par Géronimooo
Merci moogli, normal pour la clé primaire j'ai fait des copiés-collés de cette ligne ! J'ai oublié de modifier les clés primaires lors de mon post :D