[RESOLU] Traitement des checkbox en PHP

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 : [RESOLU] Traitement des checkbox en PHP

Re: Traitement des checkbox en PHP

par street51 » 28 juil. 2013, 22:57

Merci, j'ai pu résoudre le problème !

Re: Traitement des checkbox en PHP

par moogli » 28 juil. 2013, 13:00

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

par street51 » 28 juil. 2013, 10:37

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

par imikado » 27 juil. 2013, 23:08

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

Traitement des checkbox en PHP

par street51 » 27 juil. 2013, 20:01

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;
?>