Problème de validation de 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 : Problème de validation de checkbox

par cyberalbert » 21 janv. 2006, 16:46

Merci Truc,

Ca marche effectivement nickel :D

Pour Daoud, c'est quand php, je recupère les infos des checkbox sous forme de tableau, donc avec des crochets... et là, sans crochets, je ne récupèrais rien !!!

Voilà, sinon je vais utiliser la méthode de Truc car je suis pressé dans le temps, et mon code est uniquement pour une petite appli temporaire... c'était juste pour que ce soit plus joli.

Merci à tous pour votre aide.

par Truc » 20 janv. 2006, 15:43

voila un code opérationnel:
<html>
<head>
<title></title>
<script type="text/javascript">

function verif_checkbox(checked,value)
{
  
	var choix = document.saisie.choix;
    if((value==0)&&(checked==true))	//s'il s'agit de la case maitre (1ere case)   
	{	
	  for (i = 1; i < choix.length; i++)
			{
				choix[i].checked = true; //on coche toutes les autres
			}
	}
	else choix[0].checked = false;	//si on a cliqué sur une autre case que la maitre alors on la passe a faux	
}

function change_name()
{
	var lg = document.saisie.choix.length;
	for(i=0;i<lg;i++)
	{
		var name='choix'+i;
		document.getElementById(name).name +="[]"; // ajout des [] a l'attribut name lors de la validation
	}
}
</script>
</head>
<body>   
<?
if(isset($_POST['submit']))
{
	echo '<pre>';
	var_dump($_POST['choix']);
	echo '</pre>';
}

?>

  <form name="saisie" action="" method="POST" onsubmit="change_name();">

  <? $checked= ( (isset($_POST['choix']) && in_array("0",$_POST['choix'])) || !isset($_POST['choix']) ) ? "checked=\"checked\"" : "";?>
  <label for="all">  
	<input type="checkbox" name="choix" id="choix0" value="0" onClick="verif_checkbox(this.checked,this.value);" <?echo $checked;?> />Toutes les informations
  </label>
  
  <? $checked= ( (isset($_POST['choix']) && in_array("1",$_POST['choix'])) || !isset($_POST['choix']) ) ? "checked=\"checked\"" : "";?>
  <label for="computer">
	<input type="checkbox" name="choix" id="choix1" value="1"  onClick="verif_checkbox(this.checked,this.value);" <?echo $checked;?> />Ordinateur
  </label>
  
  <? $checked= ( (isset($_POST['choix']) && in_array("2",$_POST['choix'])) || !isset($_POST['choix']) ) ? "checked=\"checked\"" : "";?>
  <label for="network">
	<input type="checkbox"  name="choix" id="choix2" value="2"  onClick="verif_checkbox(this.checked,this.value);" <?echo $checked;?> />Matériels réseau
  </label>
  
  <? $checked= ( (isset($_POST['choix']) && in_array("3",$_POST['choix'])) || !isset($_POST['choix']) ) ? "checked=\"checked\"" : "";?>
  <label for="device">
	<input type="checkbox"   name="choix" id="choix3" value="3"  onClick="verif_checkbox(this.checked,this.value);" <?echo $checked;?> />Périphériques
  </label>
  
  <? $checked= ( (isset($_POST['choix']) && in_array("4",$_POST['choix'])) || !isset($_POST['choix']) ) ? "checked=\"checked\"" : "";?>
  <label for="printer">
	<input type="checkbox"  name="choix" id="choix4" value="4"  onClick="verif_checkbox(this.checked,this.value);" <?echo $checked;?> />Imprimantes
  </label>

  <input type="submit" name="submit" value="valider" >
</form>

</body>
</html>
Si tu ne comprends pas quelque chose suffit de demander :wink:

par daoud » 20 janv. 2006, 14:43

je ne vois pas pourquoi tu dois changer le nom des checkboxes... ça marche très bien comme cela au niveau php. Peux-tu détailler ton problème ?

par Invité » 20 janv. 2006, 14:39

Merci à vous...

Cyrano, même en modifiant la boucle selon tes conseils, ça ne fonctionne pas.

Je pense donc que je vais essayer de modifier le code php en donnant par exemple un nom distinct à chaque checkbox... mais c'est pas super propre niveau PHP... :?

Voilà merci quand même... et je vous tiens au courant si j'ai quelque chose :D

par daoud » 20 janv. 2006, 10:28

Code : Tout sélectionner

<script language="javascript"> function verif_checkbox(){ //On recupere le tableau des cases var choix = document.saisie.choix; for (i = 0; i < choix.length; i++){ var valeur = choix[i].value; if (valeur == 0){ if (choix[i].checked == true){ for (i = 1; i < choix.length; i=i+1){ choix[i].checked = true; } }else{ for (i = 1; i < choix.length; i=i+1){ choix[i].checked = false; } } } } } </script> <p> <form name="saisie" action="" method="GET"> <label for="all"><input type="checkbox" name="choix" id="choix" value="0" onClick="verif_checkbox();" checked />Toutes les informations</label> <label for="computer"><input type="checkbox" name="choix" id="choix" value="1" onClick="verif_checkbox();" checked />Ordinateur</label> <label for="network"><input type="checkbox" name="choix" id="choix" value="2" onClick="verif_checkbox();" checked />Matériels réseau</label> <label for="device"><input type="checkbox" name="choix" id="choix" value="3" onClick="verif_checkbox();" checked />Périphériques</label> <label for="printer"><input type="checkbox" name="choix" id="choix" value="4" onClick="verif_checkbox();" checked />Imprimantes</label> </form> </p>
Ca marche, mais effectivement j'ai enlevé les crochets à choix... donc à mon avis il va falloir revoir ton code au niveau php.

David

par Cyrano » 19 janv. 2006, 20:38

En regardant vite fait, un truc m'a sauté aux yeux: ton pointeur i est redéfini en cours de boucle alors qu'il ne devrait peut-être pas: essaye comme ça:
function verif_checkbox()
{
    //On recupere le tableau des cases
    var choix = document.saisie.choix;

    for (var i = 1; i < choix.length; i++)
	{
        var valeur = choix[i].value;

        if (valeur == "0")
		{
            if (choix[i].checked == true)
			{
                for (var j = 1; j < choix.length; j++)
				{
                	choix[j].checked = true;
                }
            }
			else
			{
                for (var k = 1; k < choix.length; k++)
				{
                    choix[k].checked = false;
                }
            }
        }
    }
}
Non testé...

par cyberalbert » 19 janv. 2006, 18:36

Salut Daoud,

Bon alors, même à 0, ça ne fonctionne pas !

En fait, je pense que ma variable ne veut pas récupérer le tableau... :?
En effet, si je rajoute un : alert(choix), soit rien ne se passe soit chez "undefined"... :cry:

Je ne vois pas la solution.... :cry: :cry:

Merci de votre aide...

PS : si ça peut aider, je viens de tester une chose... si dans mon code, je mets :
name="choix" au lieu de name="choix[]", ça fonctionne...
Par contre, à ce moment là, c'est mon code de traitement en PHP qui ne fonctionne plus... car je ne peut pas récupérer les valeurs cochées.

par daoud » 19 janv. 2006, 14:26

tu commences ta boucle à 1, il faudrait certainement la commencer à 0...

Problème de validation de checkbox

par CyberAlbert » 18 janv. 2006, 18:20

Bonjour à tous,

Bon je vous explique mon problème...
J'ai un petit formulaire de recherche dans lequel il y a des checkox... 5 pour etre precis.
Le truc, c'est que lorsque que j'en coche un (le "maitre", qui a pour valeur 0), je voudrais que tous les autres se cochent et inversement, il faudrait que le "maitre" se decoche s'il manque un des 4 autres checkbox.

Je vous met mon code dans la page index (le formulaire où les checkbox se trouvent s'appelle "saisie") :
<p>
  <label for="all"><input type="checkbox" name="choix[]" id="choix[]" value="0" onClick="verif_checkbox();" checked />Toutes les informations</label>
  <label for="computer"><input type="checkbox" name="choix[]" id="choix[]" value="1"  onClick="verif_checkbox();" checked />Ordinateur</label>
  <label for="network"><input type="checkbox" name="choix[]" id="choix[]" value="2"  onClick="verif_checkbox();" checked />Matériels réseau</label>
  <label for="device"><input type="checkbox" name="choix[]" id="choix[]" value="3"  onClick="verif_checkbox();" checked />Périphériques</label>
  <label for="printer"><input type="checkbox" name="choix[]" id="choix[]" value="4"  onClick="verif_checkbox();" checked />Imprimantes</label>
</p>
Voilà ma fonction javascript :
function verif_checkbox(){

    //On recupere le tableau des cases
    var choix = document.saisie.choix;

    for (i = 1; i < choix.length; i=i+1){
        var valeur = choix[i].value;

        if (valeur == "0"){
            if (choix[i].checked == true){
                for (i = 1; i < choix.length; i=i+1){
                choix[i].checked = true;
                }
            }else{
                for (i = 1; i < choix.length; i=i+1){
                    choix[i].checked = false;
                }
            }
        }
    }
}
Je ne vois pas ce qui cloche...
Pouvez vous m'aider ?

Merci d'avance pour votre aide.