Cocher ttes checkbox (j'ai le script) dans une boucle php ...

Eléphanteau du PHP | 16 Messages

05 mars 2008, 20:04

Bonjour,
J'ai cherché sur internet, mais je n'ai rien trouvé de super, ou je n'arrive pas à trouver les bon mots clés.

Je crée un objet affichage qui gère mon affichage (oki, logique ^^).
J'appelle mon script PHP pour pouvoir tout cocher, tout déco, ou inverser (celui ) en include.

Voici ce que cela donne :
if ($lire === FALSE)
		{
			echo "<form action='admin.php' method='POST'><table>";
			
			echo "<input type='button' value='Tout cocher' onClick='GereChkbox('div_chck','1');' />";
			echo "<input type='button' value='Tout décocher' onClick='GereChkbox('div_chck','0');' />";
			echo "<input type='button' value='Inverser la sélection' onClick='GereChkbox('div_chck','2');' />";
			
			echo "<div id='div_chck'>";
			
			$boucle = 1;
			while ($row = $sth->fetch())
			{
				$Aid = $row->Aid;
				$Atitre1 = $row->Atitre1;
				
				echo "<td><tr>";
				echo "<input type='checkbox' name='delete' value='".$Aid.$boucle."'/>";
				echo "</tr><tr>";
				$this->supprimer ($type, $Aid);
				echo "</tr><tr>";
				$this->modifier ($type, $Aid);
				echo "</tr><tr>";
				$this->titrelien($type, $Atitre1, $Aid);
				echo "</tr></td>";
				$boucle = $boucle + 1;
			}
			echo "</div>";
			echo "<input type='submit' value='Supprimer la sélection' /><br />";
			echo "</table></form>";
		}
Cela ne fonctionne pas ... je ne sais pas pourquoi et je n'arrive pas à trouver.
Quand je clique sur les bouton pour tout cocher, décocher ou autre, cela ne fait rien.
Le script fonctionne en pur HTML.

Si quelqu'un à une idée, merci bien ;)
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image

d0m
Mammouth du PHP | 1141 Messages

06 mars 2008, 09:50

Salut,

premièrement il faut que tu différencies 2 choses :
- le PHP qui construit ici ta page :
if ($lire === FALSE){
  echo "...";
  echo "...";
            ...
- le javascript : c'est le script que tu appelles lorsque tu cliques sur tout cocher/tout décocher

Les erreurs PHP s'affichent dans la page si il y a un soucis.
Pour les erreurs javascript, tu ne les voient pas directement. Par exemple sous IE6, en bas à gauche, dans ta barre d'état tu as un point d'exclamation qui s'affiche si il y a une erreur javascript. en cliquant dessus il te donne l'erreur.
As tu une erreur javascript?

*edit : je pense voir d'où vient l'erreur : c'est une erreur de quotes.
echo "<input type='button' value='Tout cocher' onClick='GereChkbox('div_chck','1');' />";
Cette ligne va être interprétée par PHP et va afficher comme code source HTML de la page :

Code : Tout sélectionner

<input type='button' value='Tout cocher' onClick='GereChkbox('div_chck','1');' />
Le p^roblème vient précisiement d'ici :

Code : Tout sélectionner

onClick='GereChkbox('div_chck','1');'
tu utilise les mêmes quotes pour entourer le contenu l'événement onClick que pour entourer la chaine div_chck

Pour html ca commence à 'Ge.... et s'arrete à ox(' puis recommence à ',' ....

Il faudrait par exemple, comme dans l'exemple du script récupéré que le code html soit :

Code : Tout sélectionner

<input type="button" value="Tout cocher" onClick="GereChkbox('div_chck','1');" />
Mais comment mettre cette chaine avec ces quotes dans une chaine PHP pour faire un echo?

Là tu as 2 solutions :
- mettre tout ton code html entre simple quote et échapper toutes les simples quotes contenues à l'intérieur :
echo '<input type="button" value="Tout cocher" onClick="GereChkbox(\'div_chck\',\'1\');" />';
- te passer de l'echo qui évite d'échapper les quotes et en plus de faire du code html propre, comme si tu codais simplement en html (saut d eligne etc...). Pour cela il faut sortir des balises <?php ?> :
<?php
if ($lire === FALSE)
      {?>
<form action="admin.php" method="POST">
<table>
  <input type="button" value="Tout cocher" onClick="GereChkbox('div_chck','1');" />
  ....
</table>
</form>
<?php } ?>
            

Eléphanteau du PHP | 16 Messages

06 mars 2008, 11:33

Bonjour et merci pour la réponse,
Donc, j'ai déjà fait pas mal de teste, dont les échappement et la fermeture des balises PHP.
Je viens de les refaire (au cas où), mais cela ne change pas mon problème.

Niveau erreur JavaScript, j'ai IE7 mais je ne vois aucun pt d'exclamation ou autre. J'ai firefox avec la webdevelopper, j'ai 4erreurs mais qui concerne mon code js. Lui est bon, je l'ai testé plusieurs fois sans y faire de modification, et via la même méthode d'appel (en include donc).
Sous opera et safari, aucune indication d'erreur.

Si cela peut aider quelques esprits, je vous remets mon bout de code PHP avec le code par defaut du script et qui fonctionne, puis mon code :
<?php
if ($lire === FALSE)
		{
			?>
			<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>
			<?php
			echo "<form action='admin.php' method='POST'><table>";
			
			echo "<input type='button' value='Tout cocher' onClick='GereChkbox(\"div_chck\",\"1\");' />";
			echo "<input type='button' value='Tout décocher' onClick='GereChkbox(\"div_chck\",\"0\");' />";
			echo "<input type='button' value='Inverser la sélection' onClick='GereChkbox(\"div_chck\",\"2\");' />";
			
			echo "<div id='div_chck'>";
			
			$boucle = 1;
			while ($row = $sth->fetch()) 
			{
				$Aid = $row->Aid;
				$Atitre1 = $row->Atitre1;
				
				echo "<td><tr>";
				echo "<input type='checkbox' name='delete' value='".$Aid.$boucle."'/>";
				echo "</tr><tr>";
				$this->supprimer ($type, $Aid);
				echo "</tr><tr>";
				$this->modifier ($type, $Aid);
				echo "</tr><tr>";
				$this->titrelien($type, $Atitre1, $Aid);
				echo "</tr></td>";
				$boucle = $boucle + 1;
			}
			echo "</div>";
			echo "<input type='submit' value='Supprimer la sélection' /><br />";
			echo "</table></form>";
		}
Je ne vois toujours pas ce qui fait "crotter" mon code ...


EDIT (10h35-06/03/2008) : Je viens de voir que ma div ne fonctionnerait pas correctement, elle ne prend pas correctement le code que je créée dans mon while. Le problème, à mon avis, viendrait de cela ... à savoir pourquoi ...
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image

d0m
Mammouth du PHP | 1141 Messages

06 mars 2008, 11:40

Déjà la méthode d'inclusion du script javascript n'est pas bonne.

Préfères mettre ce script le head de la page html :

Code : Tout sélectionner

<HTML> <HEAD> <script type="text/javascript"> <!-- // ========================== // Script réalisé par Eric Marcus - Aout 2006 // ========================== // 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> </HEAD> <BODY> .... </BODY>
ou alors dans un fichier script.js que tu inclus de cette manière :

Code : Tout sélectionner

<HEAD> <SCRIPT SRC="externe.js"></SCRIPT> </HEAD>

Eléphanteau du PHP | 16 Messages

06 mars 2008, 11:49

Je sais que la méthode d'inclusion n'est pas super, mais le problème comme je l'ai indiqué, c'est que je suis dans une class et donc je n'ai pas un pet d'HTML pur, et donc pas de head.

Deplus, la méthode fonctionne ...
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image

d0m
Mammouth du PHP | 1141 Messages

06 mars 2008, 11:57

Je ne sais pas si c'est de ça que ca vient mais tu crée un div dans une table sans le mettre dans une cellule, c'est enchevêtré. Un tableau de doit contenir que des cellules.

Essaie plutôt quelque chose de ce genre :
echo "<form action='admin.php' method='POST'>";
            
            echo "<input type='button' value='Tout cocher' onClick='GereChkbox(\"div_chck\",\"1\");' />";
            echo "<input type='button' value='Tout décocher' onClick='GereChkbox(\"div_chck\",\"0\");' />";
            echo "<input type='button' value='Inverser la sélection' onClick='GereChkbox(\"div_chck\",\"2\");' />";
            
            echo "<div id='div_chck'>";
            echo "<table>";
            while ($row = $sth->fetch()){...
            }
            echo "</table>
            echo "</div>";
            echo "<input type='submit' value='Supprimer la sélection' /><br />";
Sinon donne nous le code source html de ta page (l'endroit des cases à cocher et de la fonction javascript.)

Eléphanteau du PHP | 16 Messages

06 mars 2008, 14:18

J'ai trouvé la solution.

Donc déjà, la div était mal positionnée.

Ensuite, il fallait mettre un id dans mes input, id correspond au name.

Voici ce que cela donne :
if ($lire === FALSE)
		{
			echo "<form action='admin.php' method='POST'>";			
			
			echo "<input type='button' value='Tout cocher' onClick='GereChkbox(\"div_chck\",\"1\");' />";
			echo "<input type='button' value='Tout décocher' onClick='GereChkbox(\"div_chck\",\"0\");' />";
			echo "<input type='button' value='Inverser la sélection' onClick='GereChkbox(\"div_chck\",\"2\");' />";
						
			echo "<div id='div_chck'><table>";
			
			$boucle = 1;
			while ($row = $sth->fetch()) // Nous récupérons les résultats sous forme de tableau associatif
			{
				$Aid = $row->Aid;
				$Atitre1 = $row->Atitre1;
				
				echo "<td><tr>";
				echo "<input type='checkbox' name='delete".$boucle."' id='delete".$boucle."' value='".$Aid.$boucle."'/>";
				echo "</tr><tr>";
				$this->supprimer ($type, $Aid);
				echo "</tr><tr>";
				$this->modifier ($type, $Aid);
				echo "</tr><tr>";
				$this->titrelien($type, $Atitre1, $Aid);
				echo "</tr></td>";
				$boucle = $boucle + 1;
			}
			echo "<input type='submit' value='Supprimer la sélection' /><br />";
			echo "</table></div></form>"; // Bouton ENVOYER et fin du formulaire";
		}
Merci à toi d0m pour ton aide.
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image