Rechercher : dans
Par :

Php traitement checkbox

Dernière réponse le 29 déc 2007 à 09:36:30 margaux74, le 28 déc 2007 à 16:20:21 
 Signaler ce message aux modérateurs

Bonjour,
je dois réaliser un QCM grâge à php, avec les boutons radio tout se passe bien, en revanche je n'arrive pas à traiter mes checkbox, j'ai essayé avec l'instruction switch mais il ne traite pas les cas particuliers relatifs aux cases cochées, il traite comme si l'utilisateur avait coché tous les choix possibles, je débute et je pense que mon erreur est toute bête mais ca fait des jours que je suis dessus, que je parcours le web en vain ...

Mon code html :

<LI><FONT color="purple">Parmi ces 4 parties du sabot, laquelle/lesquelles ne se trouvent pas SOUS le sabot ?</FONT>
  <br></br>
  
     <input type="checkbox" name="choice8[]" value="0"> La mamelle<br>
     <input type="checkbox" name="choice8[]" value="1"> La pince<br>
     <input type="checkbox" name="choice8[]" value="2"> La sole<br>
     <input type="checkbox" name="choice8[]" value="3"> La fourchette<br> 
  <br></br>


Et mon code php pour traiter les réponses :
avec switch :


if (isset($_POST['choice8']))
	echo ("<p><font color='purple'>Vous avez répondu à la 8ème question :</font><br>"); 
	for ($i=0; $i<sizeof($choice8);$i++)
	
switch ($i) {
case "0":
	echo "La mamelle : c'est une des bonnes réponses, elle vous apporte des points<br>";
	$score +=1.5;
case "1":
	echo "La pince : c'est une des bonnes réponses, elle vous apporte des points<br>";
	$score +=1.5;
case "2":
	echo "La sole : c'est une mauvaise réponse, elle se situe sous le sabot, vous perdez 1 point<br>";
	$score -=1;
case "3":
	echo "La fourchette : c'est une mauvaise réponse, elle se situe sous le sabot, vous perdez 1 point<br>";
	$score -=1;
	break;
default:
    echo "vous n'avez rien répondu, vous ne perdez ni ne gagniez de points<br>";
}

J'ai aussi tenté avec une instruction IF : dans ce cas là il n'affiche carrément plus aucune réponse !

	echo ("<p><font color='purple'>Vous avez répondu à la 8ème question :</font><br>"); 
	
if ($choice8 == "La mamelle")
{ 
	$score +=1.5;
	echo "<font color='green'>La mamelle : c'est une bonne réponse, elle vous apporte des points<br>";
} 
elseif ($choice8 == "La pince")
{ 
	$score +=1.5;
	echo "<font color='green'>La pince : c'est une bonne réponse, elle vous apporte des points<br>";
}
elseif ($choice8 == "La sole")
{ 
	$score -=0.5;
	echo "<font color='green'>La sole : c'est une mauvaise réponse, elle vous fait perdre des points<br>";
}
elseif ($choice8 == "La fourchette")
{ 
	$score -=0.5;
	echo "<font color='green'>La fourchette : c'est une mauvaise réponse, elle vous fait perdre des points<br>";
} 
  
Configuration: Windows XP
Firefox 2.0.0.11

Meilleures réponses pour « php traitement checkbox » dans :
Connexion à une base Oracle en php Voir1. Périmètre Cet article est un exemple de connexion à une base Oracle par le biais d'un script php. Cet article ne traite pas la configuration de votre serveur Oracle, et de votre client Oracle. Nous partons du principe que vous pouvez accéder à...
Il est possible de récupérer le code source PHP d'un site VoirMythe Un utilisateur peut récupérer le code source PHP d'un site web comme il peut récupérer le code HTML. Réalité FAUX Explications Les fichiers PHP (ASP, JSP, etc.) sont des fichiers interprétés côté serveur, ce qui signifie que le serveur...
[Webmaster] Afficher facilement le code php/xhtml de vos pages VoirSi vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

margaux74, le 28 déc 2007 à 16:45:34

Vous remarquerez que j'ai omis les "break" après chaque case de mon switch je l'avais fait exprès pour qu'il traite bien chaque case et non pas qu'il s'arrête dès qu'un est satisfait, je viens de voir dans un autre endroit du forum que cela peut être une erreur, j'ai donc retester en remettant les break : petite amélioration : si on répond juste tout va bien, tout ce que je veux s'affiche correctement. MAIS si on répond faux, l'affichage indique quand même que l'utilisateur à tout bon !

Si quelqun peut m'aider s'il vous plait ...

Répondre à margaux74

2

Linblow, le 29 déc 2007 à 08:55:05
  • +2

Il faut utiliser une boucle spéciale pour ça, voila :

if (isset($_POST['choice8']))
{

$score = 0; // Score obtenu jusqu'à présent

foreach ($_REQUEST['choice8'] as $valeur)
{
switch ($valeur)
{

case '0':
echo 'La mamelle : bonne réponse.<br />';
$score = $score + 1.5;
break;

case 1:
echo 'La pince : bonne réponse.<br />';
$score = $score + 1.5;
break;

case 2:
echo 'La sole : mauvaise réponse.<br />';
$score = $score - 1;
break;

case 3:
echo 'La fourchette : mauvais réponse.<br />';
$score = $score - 1;
break;

default: NULL;
}
}

echo 'Score total : '.$score;

}


A tous les coups, ça marche ; )

Répondre à Linblow

3

 le père, le 29 déc 2007 à 09:36:30

Bonjour


ça peut très bien marcher avec switch , moyennant quelques petites corrections.

Mais d'abord, je te vois utiliser $_POST['choice8'] indifféremment avec $choice8. Ce n'est pas la même variable. De deux choses l'une
. ou tu as register_globals à true dans ta configuration et là ça marche : des variables globales sont automatiquement crées pour chaque élement de $_POST, $_GET etc et c'est un énorme trou de sécurité. Dépêche toi de la mettre à false. Tu as sans doute trouvé des exemples de scripts qui marchent comme ça, il s'agit d'anciens scripts et aujourd'hui plus personne ne devrait faire ça.
. ou tu n' as pas register_globals à true et ta variable $choice8 n'a tout simplement aucun rapport avec $_POST['choice8']. Commence par corriger ce point, dans la suite je suppose que tu as fait toi même $choice8 = $_POST['choice8'].

J'en viens au fonctionnement du switch :
switch ($choice8 [$i]) et non pas switch ($i) et remet les break. si tu ne fais ton test que sur $i, et que ton visiteur a coché une seule check-box, n'importe laquelle, tu ne traiteras que la Mamelle

Avec le if ça ne peut pas marcher : tu compares un tableau $choice8 avec une valeur 'La Mamelle', etc... Un tableau ne peut pas être égal à une valeur seule. De plus, les valeurs renvoyées dans ton formulaire sont 0,1,2,3, et en aucun cas "la mamelle", "La pince" etc...

Répondre à le père