Formulaire type Checkbox

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire type Checkbox

par Freddo31 » 29 juin 2009, 16:30

Ok, merci, après plusieurs tentative, cela fonctionne maintenant :P
Merci beaucoup!!!

maintenant, j'ai un petit soucis...après le traitement, j'arrive à une note...

donc j'explique comment j'opère...
dans mon formulaire, lors de l'envoi pour obtenir la correction, je ré affiche les questions du test en ajoutant la réponse et le nombre de point obtenue.
la ou arrive le soucis, c'est que pour que la question soit ré afficher, il faut absolument qu'une checkbox ai été coché...sinon l'identifiant ne passe pas par la méthode post, et donc ne se ré affiche pas!
donc comme solution, j'ai trouvé de mettre un 5éme choix de réponse "e) je ne sais pas" coché par défault.
si cette case est coché, l'utilisateur obtiendra 0point...
mais la ou est le soucis, c'est que comme c'est un QCM avec éventuellement 1, 2, 3 ou 4 bonne réponse donc si l'utilisateur oubli de décocher l'option "je ne sais pas" du coup ça devient faut...et prend -2 dans les dents...
donc, ce que je me disais...c'est...

est-il possible d'attribuer un comportement de combobox à une checkbox lors du 1er clic par exemple?

de façon à ce que si l'utilisateur clique sur une autre réponse, bin le "je ne sais pas" se décoche tout seul...

par enneite » 29 juin 2009, 15:00

je pense que ce serait plus simple en effet, mais tu peux juste mettre l'identifiant, t'es pas obligé de mettre proposition1, tu peux juste mettre 1

Après tu teste soit en envoyant la reponse dans le hidden, mais c'est plus sur de la recuperer dans la page de traitement.

Dans l'exemple du code qui affiche les question, on a incrémenter avec le nombre $i, mais au lieu de celui là, tu peux et c'est mieux car la liste est aléatoire, differentier les checkbox avec l'ID de ta ligne sql:
echo'<li><input type="checkbox" name="option'.$question["ID"].' _1" value="proposition'.$question["ID"].'_1">'.$question['PROPOSITION1'].'</li>';
il faut remplacer ID par le nom de la clé primaire de ta table.

comme ç a après tu recuperes les reponses tu regardes si elles correspondent aux reponses exactes.

par Freddo31 » 29 juin 2009, 14:51

dans ma colonne réponse, j'ai la réponse en toute lettre...sinon tu veux que je mette le ou les noms des colonnes ou les réponse sont bonnes?

donc comme mes colonnes réponse s'appelle proposition1, proposition2, proposition3, proposition4, il faudrait par exemple que dans la colonne réponse, j'ai "proposition1,proposition3"

par enneite » 29 juin 2009, 14:46

while ($question = mysql_fetch_assoc($req))
{
echo $i.') '.$question['LIBELLE_QUESTION'];
echo'<ol class="lettres_minuscules">';
echo'<li><input type="checkbox" name="option'.$i.' _1" value="proposition'.$i.'_1">'.$question['PROPOSITION1'].'</li>';
echo'<li><input type="checkbox" name="option'.$i.' _2" value="proposition'.$i.'_2">>'.$question['PROPOSITION2'].'</li>';
echo'<li><input type="checkbox" name="option'.$i.' _3" value="proposition'.$i.'_4">>'.$question['PROPOSITION3'].'</li>';
echo'<li><input type="checkbox" name="option'.$i.' _4" value="proposition'.$i.'_4">>'.$question['PROPOSITION4'].'</li>';
echo'</ol>';
echo'<hr />';
echo '<input type="hidden" name="reponse'.$i.'" value="'.$question["REPONSE"].'">
$i++;
}

tu passes la bonne reponse en hidden (champs caché)
RMQ: Pour tout récupére après dans ta page de traitement:
for ($i=1;$i<=20;$i++)
{

$reponse=$_POST["reponse".$i];
if($_POST["option".$i."_1"]!="")$op1_choisi=true;
else $op1_choisi=false;

//après faut que tu traites

}
mais bon dans ta colonne réponse, tu ecris les reponses ou juste le ou les identifiants des propositions qui sont bonnes ??? ce serait plus simple pour traiter les reponses de marquer dans la colonne reponse, les identifiants (1,2,3 ou/et 4) des bonnes reponses :

il y aurait dedans :

2
3
1
2
3,4

..

par Freddo31 » 29 juin 2009, 14:22

oula, je ne comprend pas bien ^^
dans ma table question, j'ai le libelle de la question, proposition1, proposition2...proposition4, et reponse, qui correspond à une des 4 propositions.

mais le problème est que j'aimerais récupérer dans des variables les 20 réponse au 20 question pausé, pour pouvoir ensuite les comparer au réponse réelle, et ainsi attribuer une note...

par enneite » 29 juin 2009, 14:18

while ($question = mysql_fetch_assoc($req))
{
echo $i.') '.$question['LIBELLE_QUESTION'];
echo'<ol class="lettres_minuscules">';
echo'<li><input type="checkbox" name="option'.$i.' _1" value="proposition'.$i.'_1">'.$question['PROPOSITION1'].'</li>';
echo'<li><input type="checkbox" name="option'.$i.' _2" value="proposition'.$i.'_2">>'.$question['PROPOSITION2'].'</li>';
echo'<li><input type="checkbox" name="option'.$i.' _3" value="proposition'.$i.'_4">>'.$question['PROPOSITION3'].'</li>';
echo'<li><input type="checkbox" name="option'.$i.' _4" value="proposition'.$i.'_4">>'.$question['PROPOSITION4'].'</li>';
echo'</ol>';
echo'<hr />';
$i++;
}
C'est un truc comme ça qu'il te faut, après, comme tout est mis aléatoirement, pour récupérer les identifiants de tes checkboxs et les traiter surtout avec plusieurs réponses possibles, tu va un peu galérer.

Il faudrait avoir une colonnedans ta table qui s'appelerai reponse et avec dedans la bonne réponse ou alors les bonnes réponses concaténée avec le symbole ++ par exemple, s'il y a plusieurs bonnes réponses possibles. Et là ça peut être galère aussi.

Bref, là tu es dans un cas ou il faut bien avoir pensé sa table SQL avant de se plonger dans le code au niveau applicatif (ici PHP)

Formulaire type Checkbox

par Freddo31 » 29 juin 2009, 13:40

Bonjour ami codeur PhP!!

je réalise actuellement un site proposant des tests sous formes de QCM.
QCM que j'ai réaliser en PHP avec le code suivant
   <form  name="valider" method="post" onsubmit="./validation_info.php">
        <?php
			$i = 1;
			
			mysql_connect ("localhost", "root", ""); //connexion à la base
			mysql_select_db ("bd_test_eritec");//sélection de la base
			$sql = 'SELECT * FROM question WHERE MATIERE = "info" ORDER BY rand() LIMIT 0,2;';
			$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
			
			echo'<hr />';
			while ($question = mysql_fetch_assoc($req))
			{
				echo $i.')  '.$question['LIBELLE_QUESTION'];		
				echo'<ol class="lettres_minuscules">';
					echo'<li><input type="checkbox" name="option1" value=>'.$question['PROPOSITION1'].'</li>';
					echo'<li><input type="checkbox" name="option1" value=>'.$question['PROPOSITION2'].'</li>';
					echo'<li><input type="checkbox" name="option1" value=>'.$question['PROPOSITION3'].'</li>';
					echo'<li><input type="checkbox" name="option1" value=>'.$question['PROPOSITION4'].'</li>';
				echo'</ol>';
				echo'<hr />';
				$i++;
			}
		?>
        	<input type="submit" value="Envoyer" id="btn_valider" />
        </form>

Le but étant d'avoir 20 question sélectionné aléatoirement dans ma table question.
le random fonctionne bien, mais la ou intervient mon problème est au niveau de la validation...comment je récupère toutes les valeurs entrés par l'utilisateur???
car un "name" correspond à une valeur non?
de plus, comment ça se passe si pour une question 2 réponse sont possibles?