Page 1 sur 1

Traitement des checkbox en PHP

Posté : 27 juil. 2013, 20:01
par street51
Bonjour :)

Je suis en train de réaliser un QCM pour un site de service hospitalier : le script de validation analyse le type de champ, s'il s'agit d'un bouton radio il détecte s'il s'agit de la bonne réponse, par contre je coince pour les checkbox !

J'arrive à ne pas donner de points si une des cases cochées est fausse, mais je n'arrive pas à détecter si toutes les cases justes ont été cochées (en gros, case juste pas cochée = pas de point).

Merci pour votre aide :wink:

Un morceau du formulaire :
<label for="q15">Q9 - Parmi les propositions suivantes, lesquelles sont couvertes par le secret m&eacute;dical ?</label><br />
                                <input type="checkbox" name="9-q[]" value="checkbox-vrai" />Les donn&eacute;es de l'examen clinique<br />
                                <input type="checkbox" name="9-q[]" value="checkbox-vrai" />Les causes d'un d&eacute;c&egrave;s<br />
                                <input type="checkbox" name="9-q[]" value="checkbox-vrai" />Les faits extra-m&eacute;dicaux venant &agrave; la connaissance du m&eacute;decin<br />
                                <input type="checkbox" name="9-q[]" value="checkbox-vrai" />Les r&eacute;sultats d'examens compl&eacute;mentaires<br />
(ouais, le coup du type de champ qui se retrouve dans le name pour pouvoir être récupéré ensuite, c'est pas très joli j'imagine !)

Le script de validation en l'état actuel :
<?
$total = 0;
 
for ($i=1;$i<21;$i++)
{
    $radio = $_GET[$i."-q"];
 
    if (strpos($radio, 'checkbox') === false)
    {
        if (strpos($radio, 'vrai') !== false)
        {
            $total = $total+1;
        }
    }
    else
    {
        // je coince ici :p
    }
}
 
echo $total;
?>

Re: Traitement des checkbox en PHP

Posté : 27 juil. 2013, 23:08
par imikado
Il y a une erreur de conception dans le nom des champs de checkbox

Les checkbox sont gérés via des tableaux, il faut ensuite vérifier les valeurs postées

Code : Tout sélectionner

<label for="q15">Q9 - Parmi les propositions suivantes, lesquelles sont couvertes par le secret m&eacute;dical ?</label><br /> <input type="checkbox" name="9-q[]" value="reponse1 />Les donn&eacute;es de l'examen clinique<br /> <input type="checkbox" name="9-q[]" value="reponse2" />Les causes d'un d&eacute;c&egrave;s<br /> <input type="checkbox" name="9-q[]" value="reponse3" />Les faits extra-m&eacute;dicaux venant &agrave; la connaissance du m&eacute;decin<br /> <input type="checkbox" name="9-q[]" value="reponse4" />Les r&eacute;sultats d'examens compl&eacute;mentaires<br />
Et ainsi coté php, vous vérifiez ainsi
$tQ9=$_POST['9-q'];
if( 
  in_array('reponse1',$tQ9) 
   and 
   in_array('reponse3',$tQ9) 
){
 //c'est ok
}
Dans cet exemple on accepte les reponses 1 et 3

Re: Traitement des checkbox en PHP

Posté : 28 juil. 2013, 10:37
par street51
Je vois l'idée, et j'avance un peu...

Mais après avoir récupérer les réponses justes dans la base de données, comment faire en sorte que le script teste uniquement celles-ci ?
Et du coup, avec cette méthode, si une réponse fausse est cochée, ça ne risque pas de ne pas la considérer comme fausse ?

Désolé si je ne suis pas très clair, j'ai les idées un peu brumeuses à force de bloquer là-dessus...
		$req = mysql_query("SELECT * from qcm_propositions where id_qcm='$_POST[$id_qcm]' and valeur='vrai'") or die ("Erreur requête");
		$res = mysql_num_rows($req);
		{
			$id_prop = mysql_result($req,0,"id_prop");
			$valeur = mysql_result($req,0,"valeur");
		 
		 	$reponse = $_POST[$i."-q"];
			if(
				in_array('1',$reponse)
				and
				in_array('2',$reponse)
				and
				in_array('3',$reponse)
				and
				in_array('4',$reponse)
			){
				echo "C'est juste";
			} 
			else{ 
				echo "C'est faux"; 
			} 
		}

Re: Traitement des checkbox en PHP

Posté : 28 juil. 2013, 13:00
par moogli
salut,

tu mélange un peu tous la.

dans le formulaire tu met en value des checkbox les id des réponses.

pour la validation tu compte le nombre de ligne qui correspondent aux réponsent cochée (dans le tableau correspondant à la checkbox tu n'aura que les id des réponses sélectionnées).

tu peux le faire avec la clause in SQL
<?php
$sql = 'SELECT * from qcm_propositions where id_qcm=$_POST[$id_qcm] and valeur=\'vrai\' and idquestion in ('.implode(',',$_POST[$i."-q"]).')';
par exemple

@+

Re: Traitement des checkbox en PHP

Posté : 28 juil. 2013, 22:57
par street51
Merci, j'ai pu résoudre le problème !