resultats checkbox indexées [résolu]

resultats checkbox indexées [résolu] - PHP - Programmation

Marsh Posté le 19-07-2004 à 11:58:30    

voila je retrouve plus un vieu post on l'on m'apprenait que l'on pouvait indexer des champs d'un formulaire en html pour récupérer les valeurs dans un tableau php.

Code :
  1. <input type="text" name="nom[]" value="julien"/>
  2. <input type="text" name="nom[]" value="marie"/>
  3. <input type="text" name="nom[]" value="julie"/>
  4. <?
  5.      print_r($_POST["nom"])
  6. /*
  7.      $_POST["nom"][0] => "julien"
  8.      $_POST["nom"][1] => "marie"
  9.      $_POST["nom"][2] => "julie"
  10. */
  11. ?>


J'aime bien ce concept, c'est pratique. Seulement j'ai constaté un problème assez génant lorsque j'ai des checkbox, quelque soit la case cochée, le tableau récupéré met à "on" la premiere checkbox :??:
 
C'est a dire que si je fais:

Code :
  1. for ( $i=0; $i < count($_POST["checktruc"]); $i++ )
  2. {
  3.         if ( $_POST["checktruc"][$i] == "on" ) // case cochée
  4.         {
  5.                //traitement
  6.         }
  7. }


 
- 0 cases cochées : ok
- 1 case cochée : "on" est sur la case d'indice 0
- N case cochées : idem
 
C'est moi qui débloque ou bien :heink:


Message édité par boulax le 19-07-2004 à 15:10:47

---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 19-07-2004 à 11:58:30   

Reply

Marsh Posté le 19-07-2004 à 12:01:48    

ca vient d'ou ce on ? [:mlc]
 
 

Code :
  1. for ( $i=0; $i < count($_POST["checktruc"]); $i++ )
  2.   {
  3.             if ( $_POST["checktruc"][$i] === true ) // case cochée
  4.             {
  5.                      //traitement
  6.             }
  7.   }


 


Message édité par simogeo le 19-07-2004 à 12:02:09

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-07-2004 à 12:11:44    

simogeo a écrit :

ca vient d'ou ce on ? [:mlc]
 
 

Code :
  1. for ( $i=0; $i < count($_POST["checktruc"]); $i++ )
  2.   {
  3.             if ( $_POST["checktruc"][$i] === true ) // case cochée
  4.             {
  5.                      //traitement
  6.             }
  7.   }



 
bah "on" c'est ce que m'affiche  un echo $_POST["checktruc"][$i]; d'une case cochée.... J'ai essayée ta syntaxe, il n'entre pas dans la condition quelque soit le nombre de cases cochées ....


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 19-07-2004 à 12:20:14    

D'ailleurs c'est quoi cet opérateur "===" ??? Quand je met le "==" classique, ca rentre dans la condition mais avec les problèmes cités au premier post.
 
On dirait que le tableau n'est pas trié car !
 


 
case 0 [X]
case 1 [ ]
case 2 [ ]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à false
$_POST["case"][2] est à false
 


 
case 0 [X]
case 1 [ ]
case 2 [X]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à true (ou "on" aussi)
$_POST["case"][2] est à false
 
 


 
case 0 [X]
case 1 [X]
case 2 [ ]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à true (ou "on" aussi)
$_POST["case"][2] est à false
 


 
case 0 [ ]
case 1 [ ]
case 2 [X]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à false
$_POST["case"][2] est à false
 
 :pt1cable:


Message édité par boulax le 19-07-2004 à 12:21:14

---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 19-07-2004 à 12:34:36    

boulax > je crois que tu n'as pas compris le fonctionnement
 

boulax a écrit :

D'ailleurs c'est quoi cet opérateur "===" ??? Quand je met le "==" classique, ca rentre dans la condition mais avec les problèmes cités au premier post.
 
On dirait que le tableau n'est pas trié car !
 


 
case 0 [X]
case 1 [ ]
case 2 [ ]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à false
$_POST["case"][2] est à false
 
 
echo $_POST["case"][0] t'affichera 0
 
 


 
case 0 [X]
case 1 [ ]
case 2 [X]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à true (ou "on" aussi)
$_POST["case"][2] est à false


 
[g]echo $_POST["case"][0] t'affichera 0
echo $_POST["case"][1] t'affichera 2[/g]
 
case 0 [X]
case 1 [X]
case 2 [ ]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à true (ou "on" aussi)
$_POST["case"][2] est à false
 
echo $_POST["case"][0] t'affichera 0
echo $_POST["case"][1] t'affichera 1

 


 
case 0 [ ]
case 1 [ ]
case 2 [X]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à false
$_POST["case"][2] est à false
 
echo $_POST["case"][0] t'affichera 2
 
 
 :pt1cable:


 
t'as compris maintenant ?


Message édité par simogeo le 19-07-2004 à 12:35:20

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-07-2004 à 12:36:44    

Le comparateur === est specifique aux valeurs booléennes et plus sécurisée.

Reply

Marsh Posté le 19-07-2004 à 12:39:53    

ApheX_TwiN a écrit :

Le comparateur === est specifique aux valeurs booléennes et plus sécurisée.


 
non, mais il compare aussi le type
 

Code :
  1. 1 == true; // ok
  2. 1 === true // pas ok


 


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-07-2004 à 12:47:36    

Ah bon ? je ne savais pas.. Merci !

Reply

Marsh Posté le 19-07-2004 à 12:59:18    

simogeo a écrit :

boulax > je crois que tu n'as pas compris le fonctionnement
 
 


case 0 [ ]
case 1 [ ]
case 2 [X]


 
resultats :
$_POST["case"][0] est à true (ou "on" aussi)
$_POST["case"][1] est à false
$_POST["case"][2] est à false

echo $_POST["case"][0] t'affichera 2

 


 
Désolé mais non, moi je n'ai pas ca.... j'ai pas inventé les resultats que j'ai mis hein... j'ai bel et bien "on" dans $_POST["case"][0] si je coche UNE case, quelque soit la case d'ailleurs.
 
( le test == true fonctionne mais le test ===true non ... )


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 19-07-2004 à 13:03:42    

:o
 
 

Code :
  1. for ( $i=0; $i < count($_POST["checktruc"]); $i++ )
  2.    echo $_POST["checktruc"][$i];
  3. }


 
t'as compris maintenant ? [:mlc]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-07-2004 à 13:03:42   

Reply

Marsh Posté le 19-07-2004 à 13:05:02    

simogeo a écrit :

non, mais il compare aussi le type
 

Code :
  1. 1 == true; // ok
  2. 1 === true // pas ok



oui, de même que  
 
$var = 9 ;
 
$var == "9"  --> true
$var === "9" --> false  


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 19-07-2004 à 13:07:31    

JagStang a écrit :

oui, de même que  
 
$var = 9 ;
 
$var == "9"  --> true
$var === "9" --> false


 
tootafé mr Toc [:itm]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-07-2004 à 13:08:58    

simogeo a écrit :

tootafé mr Toc [:itm]

[:mlc]


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 19-07-2004 à 13:13:10    

simogeo a écrit :

:o
 
 

Code :
  1. for ( $i=0; $i < count($_POST["checktruc"]); $i++ )
  2.    echo $_POST["checktruc"][$i];
  3. }


 
t'as compris maintenant ? [:mlc]


 
Serieux tu me prends pour une buse ou quoi ?
 
je recommence

Code :
  1. for ( $i=0; $i < count($_POST["checktruc"]); $i++ )
  2.     echo $_POST["checktruc"][$i] ." ". $i ."<br/>";


 
Toujours avec mes trois cases
 
case 1 [X]
case 2 [ ]
case 3 [ ]
 
affichage :

Code :
  1. on 0


 
case 1 [X]
case 2 [X]
case 3 [ ]
 
affichage :

Code :
  1. on 0
  2. on 1


 
case 1 [X]
case 2 [X]
case 3 [X]
 
affichage :

Code :
  1. on 0
  2. on 1
  3. on 2


 
case 1 [ ]
case 2 [X]
case 3 [ ]
 
affichage :

Code :
  1. on 0


 
case 1 [ ]
case 2 [ ]
case 3 [X]
 
affichage :

Code :
  1. on 0


case 1 [ ]
case 2 [X]
case 3 [X]
 
affichage :

Code :
  1. on 0
  2. on 1


 
case 1 [X]
case 2 [ ]
case 3 [X]
 
affichage :

Code :
  1. on 0
  2. on 1


 
[:mlc]  
 
Alors je veux bien qu'il me mette que les cases cochées mais si je peu pas les avoir indexées ds le même ordre que la page je fais comment pour savoir lesquelles c'est mmm ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 19-07-2004 à 13:23:06    

ben si, t'es quand même un boulet [:spamafote]
 
http://julp.developpez.com/php/formulaires/#5
 
t'as précisé les élements value à tes checkbox ?
 
sinon, bazarde ton code ici  :o


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-07-2004 à 13:29:09    

simogeo a écrit :


t'as précisé les élements value à tes checkbox ?
 


 
Non, allons nous peut etre avancer dans ce dialogue de sourds ? :)
 
Voila ca marche, je récupère les valeurs dans le tableau maintenant.
Merci


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 19-07-2004 à 13:51:38    


 
southpark inside [:itm]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-07-2004 à 15:09:07    

En fait ce qui se passe est très simple à comprendre :
 
Le navigateur n'envoie QUE les cases cochées donc si tu as 3 cases:
 
<input type="checkbox" name="box[]">Option 1<br>
<input type="checkbox" name="box[]">Option 2<br>
<input type="checkbox" name="box[]">Option 3<br>
 
et que tu coches les cases 1 et 3, ton script PHP reçois selement 2 variables, ce qui revient à écrire :
 
$_POST['box'][] = 'on';
$_POST['box'][] = 'on';
 
Ce qui est équivalent à ton problème. Mais avec les values, on s'en sort :
 
<input type="checkbox" name="box[]" value="1">Option 1<br>
<input type="checkbox" name="box[]" value="2">Option 2<br>
<input type="checkbox" name="box[]" value="3">Option 3<br>
 
Toujours avec les cases 1 et 3, c'est équivalent à :
$_POST['box'][] = 1;
$_POST['box'][] = 3;
 
L'autre solution, c'est de mettre les indices :
 
<input type="checkbox" name="box[0]">Option 1<br>
<input type="checkbox" name="box[1]">Option 2<br>
<input type="checkbox" name="box[2]">Option 3<br>
 
Et donc cette fois, plus de problème :
 
$_POST['box'][0] => 'on'
$_POST['box'][1] => n'existe pas
$_POST['box'][2] => 'on'
 
for ( $i=0; $i < 3; $i++ )
{
   if( isset( $_POST["box"][$i] ) ) // case cochée car variables existe
   {  
      //traitement, la case cochée est la numéro $i
   }
}  
 
Il faut juste savoir combien de cases à cocher il y a au départ. Mais ça en général tu le sais !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed