[PHP] selection de toute les chekbox d'1 page

Fermé
maverick56 Messages postés 169 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 22 octobre 2007 - 11 juil. 2007 à 08:38
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 11 juil. 2007 à 16:46
bonjour
je créé un tableau avec des checkbox a l'aide d'un for.
et je voudrais faire un bouton "tout séléctionner" et un autre " tout désélectionner".
mais je sais pas comment faire ...

pourriez vous m'aider svp

merci
A voir également:

6 réponses

Salut !

Ton probleme se résoud plutôt avec du Javascript et non du PHP.
Essaie ce petit bout de code :
<html>

  <head>
    <title>
      Checkboxes
    </title>
  </head>

  <script type="text/javascript">
  <!--
    function select_all() {
      document.check_form.check_1.checked = true;
      document.check_form.check_2.checked = true;
      document.check_form.check_3.checked = true;
    }
    function unselect_all() {
      document.check_form.check_1.checked = false;
      document.check_form.check_2.checked = false;
      document.check_form.check_3.checked = false;
    }
  //-->
  </script>

  <body>
    <form name="check_form" method="post" action="traitement.php">
    <input type="checkbox" name="check_1"> Checkbox 1<br>
    <input type="checkbox" name="check_2"> Checkbox 2<br>
    <input type="checkbox" name="check_3"> Checkbox 3<br>
    </form>
    <input type="button" name="select_all" value="Tout s&eacute;lectionner" onclick="select_all()">
    <input type="button" name="unselect_all" value="Tout D&eacute;s&eacute;lectionner" onclick="unselect_all()">
  </body>

</html>

Ca devrait marcher, bonne chance, n'hésite pas à demander si tu ne comprends pas comment ca marche ce script ;) !
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
11 juil. 2007 à 10:07
Ton tableau étant généré en php, tu ne connais pas forcément à l'avance le nom des checkbox. La solution ? Eh bien... Générer le script en même temps que ton tableau !
Pour ton tableau, j'imagine que quelque part, tu as une boucle. A l'intérieur de cette boucle, tu as une ligne qui génère la case à cocher, j'imagine. A cet endroit-là, en php, tu connais le futur nom de la check box. Disons que c'est un truc du genre "check_".$i, comme dans l'exemple de mr Penguin.
Juste en dessous de cette ligne, rajoute donc
$script_checkall .= "document.check_form.check_".$i.".checked = true;\n"
$script_uncheckall .= "document.check_form.check_".$i.".checked = false;\n"

Ainsi, dans les variables $script_checkall et $script_uncheckall, tu as le contenu des scripts fournis par mr Penguin.

Il te suffit ensuite de l'envoyer à la page :
echo "  <script type=\"text/javascript\">\n";
echo "  <!--\n";
echo "    function select_all() {\n";
echo $script_checkall;
echo "    }\n";
echo "    function unselect_all() {\n";
echo $script_uncheckall;
echo "    }\n";
echo "  //-->\n";
echo "  </script>\n";
Voilà :)

Xavier
0
maverick56 Messages postés 169 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 22 octobre 2007 12
11 juil. 2007 à 10:34
alors voila j'ai trouvé ce code :
Entre <HEAD> et </HEAD> :
<script type="text/javascript">
<!--
// conteneur = id du bloc (<div>, <p> ...) contenant les checkbox
// a_faire = '0' pour tout décocher
// a_faire = '1' pour tout cocher
// a_faire = '2' pour inverser la sélection

function GereChkbox(conteneur, a_faire) {
var blnEtat=null;
var Chckbox = document.getElementById(conteneur).firstChild;
	while (Chckbox!=null) {
		if (Chckbox.nodeName=="INPUT")
			if (Chckbox.getAttribute("type")=="checkbox") {
				blnEtat = (a_faire=='0') ? false : (a_faire=='1') ? true : (document.getElementById(Chckbox.getAttribute("id")).checked) ? false : true;
				document.getElementById(Chckbox.getAttribute("id")).checked=blnEtat;
			}
		Chckbox = Chckbox.nextSibling;
	}
}
//-->
</script>


Entre <BODY> et </BODY> :
<form>
<input type="button" value="Tout cocher" onClick="GereChkbox('div_chck','1');">&nbsp;&nbsp;&nbsp;
<input type="button" value="Tout décocher" onClick="GereChkbox('div_chck','0');">&nbsp;&nbsp;&nbsp;
<input type="button" value="Inverser la sélection" onClick="GereChkbox('div_chck','2');">
<br /><br />
	<div id="div_chck">
	<input type="checkbox" name="checkbox1" id="checkbox1" value="1"><label for="checkbox1">Choix 1</label><br />
	<input type="checkbox" name="checkbox2" id="checkbox2" value="2"><label for="checkbox2">Choix 2</label><br />
	<input type="checkbox" name="checkbox3" id="checkbox3" value="3"><label for="checkbox3">Choix 3</label><br />
	<input type="checkbox" name="checkbox4" id="checkbox4" value="4"><label for="checkbox4">Choix 4</label><br />
	<input type="checkbox" name="checkbox5" id="checkbox5" value="5"><label for="checkbox5">Choix 5</label>
	</div>
</form>


et puis j'ai essayer de l'adapter pour moi ...
mais moi j'ai un tableau, et la j'ai des gros problemes avec le <div>

voila a peu pres ce que j'ai :
<div id="div_chck">
    <td>
         <input type="checkbox" name="checkbox1" id="checkbox1" value="1"><label for="checkbox1">Choix 1</label>
    </td>
</div>

mais dès que j'ajoute les div, ba ca marche plus ....
:roll:

avez vous une idée de prk ?

merci
0
Houla... Reivax952 et moi t'avons proposé une solution plus simple, je crois que tu vas te compliquer la vie inutilement en utilisant ce script... L'avantage de ce script c'est que t'as pas besoin de savoir comment les <input> se nomment, ni combien y'en a car le script s'en charge... Mais je trouve que passer d'un gosse du DOM à l'autre ca fait lourd :|
Sinon je vois pas d'ou viens le problème sur ce que tu nous montres... peut-être les <td> solitaires qui buggent ?

Sinon tu peux aussi utiliser les fonctions select_all() et unselect_all() que je t'ai un peu modifiée afin qu'elles fassent la même chose que le script que t'as trouvé :
    function select_all() {
      var i = 0;
      while( document.check_form.elements[i] != null )
        if( document.check_form.elements[i].getAttribute("type") == "checkbox" )
          document.check_form.elements[i++].checked = true;
    }
    function unselect_all() {
      var i = 0;
      while( document.check_form.elements[i] != null )
        if( document.check_form.elements[i].getAttribute("type") == "checkbox" )
          document.check_form.elements[i++].checked = false;
    }

De cette manière, peu importe le nombre de checkboxes ou leur nom, elles seront toutes cochées ou décochées.
En espérant que ca t'aideras...
0
maverick56 Messages postés 169 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 22 octobre 2007 12
11 juil. 2007 à 12:35
je le trouve bien ce script, il marche bien tan qu'il n'est pas dans une table ... et ca j'aimerais comprendre pourquoi !!!
une idée ?

sinon le probleme du script que vous proposer c'est qye c'est un POST qui va recharger la page, et ca je veux pas ...
mais merci pour la proposition quand meme ;)
0
maverick56 Messages postés 169 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 22 octobre 2007 12
11 juil. 2007 à 14:34
j'ai trové un bon lien mais j'arrive pas a le faire fonctionner :
https://www.developpez.net/forums/showthread.php?t=306430

une idée svp ?
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ben le problème dans ton cas alors c'est celui la je crois :
dans le script que tu as trouvé, la fonction fait ceci :
var Chckbox = document.getElementById(conteneur).firstChild;

pour obtenir les éléments fils du <div>, donc les <input> et les <label>.
Or il semblerait que dans ton code tu as fait de ces <input> et <label> des éléments fils du <td>, donc la fonction GereChkbox ne va traiter que les <td> mais pas les <input> qui sont au niveau inférieur du DOM.
Essaie ca, je l'ai pas essayé mais ca devrait marcher, remplace ta fonction GereChkbox par celle-ci :
function GereChkbox(conteneur, a_faire) {
var blnEtat=null;
var Chktd = document.getElementById(conteneur).firstChild;
	while (Chktd != null) {
	var Chkbox = document.getElementById(Chktd).firstChild;
		while (Chckbox!=null) {
			if (Chckbox.nodeName=="INPUT")
				if (Chckbox.getAttribute("type")=="checkbox") {
					blnEtat = (a_faire=='0') ? false : (a_faire=='1') ? true : (document.getElementById(Chckbox.getAttribute("id")).checked) ? false : true;
					document.getElementById(Chckbox.getAttribute("id")).checked=blnEtat;
				}
			Chckbox = Chckbox.nextSibling;
		}
	Chcktd = Chcktd.nextSibling;
	}
}
0
Ooops, petite erreur !
Remplace la ligne 5
var Chkbox = document.getElementById(Chktd).firstChild;

par celle-ci :
var Chkbox = Chktd.firstChild;

Et si ca marche pas, ben bonne chance...
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
11 juil. 2007 à 16:46
Il y a aussi un truc bizarre dans ta table :
<div id="div_chck">
    <td>
         <input type="checkbox" name="checkbox1" id="checkbox1" value="1"><label for="checkbox1">Choix 1</label>
    </td>
</div>
Les éléments <td> ne peuvent pas être placés ailleurs que dans un <tr>, qui lui-même ne peut être que dans un <table> (ou <tbody>)

Peut-être que l'analyseur DOM n'aime pas avoir un schéma non valide comme celui-ci...
0