Tester l'existance d'une case à cocher

[Résolu]
Signaler
Messages postés
125
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
22 janvier 2009
-
Messages postés
125
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
22 janvier 2009
-
Bonjour

Dans une page, j'ai un script PHP qui génère plusieurs cases à cocher nomées "box1", "box2", "box3", ...

lorsque qu'on valide le formulaire, je veux tester ces boxs, mais je ne connais pas le nombre exacte, je vise au max.


mais lorsque je teste une box qui n'existe pas dans ma boucle, j'ai forcemment une erreur du type "undefined":


for(var i=1; i<30; i++){
if(eval("box"+i+".checked")==true){
[---]
}}

comment faire pour passer au travers ?

merci d'avance

9 réponses

Messages postés
125
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
22 janvier 2009

Merci pour vos solutions les gars :)

Le pb avec la solution de Mindiell, c'est que dans la façon dont j'ai fait les choses, les numéros des box ne se suivent pas nécessairement linéairement :
on peut avoir box1, box2, box4,...
Donc le pb reste le meme.

Pour la solution de Bultez, j'ai pas testé, mais je pense que j'aurais eu le même pb...

J'ai trouvé une solution toute bête entre deux : mettre les boxes proprement dans un formulaire... lol

eval("box"+i) provoque une erreur si la boxe n'existe pas...
par contre : eval("document.monformulaire.box"+i) renvoit vrai ou faux en fonction de l'existance de la case...

Pourquoi ? je n'en ai aucune idée, mais comme quoi, quant on fait les choses proprement, tout marche à merveille :)

bon courage, A+
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
php connait le nombre de cases, stockes ce nombredans une variable phph puis :

for (var i=0;i<<?=$nombrecases?>;i++)
{
...
}
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,
un ch'tit exemple ?

<form name="frm">



</form>
<script type="text/javascript">
var n=1;
while ( frm["box"+n] )
{
alert(frm["box"+n].name+"="+frm["box"+n].checked);
n++;
}
</script>

à mon humble avis, il vaudrait mieux :
° mettre id=box1,box2... et traiter document.getElementById("box"+n).checked
° mettre le même nom, box par exemple et faire
for ( var n=0;n<frm.box.length;n++ )
{
frm.box[n].checked....

une remarque : à if ( quelque chose == true ) je préfère if ( quelque chose )
... mais chacun ses goûts ( et les vaches seront bien gardées ).

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
oh ... croisement avec MinDiell
qui donne une solution tout aussi valable
SI php connait le nombre de postes
( ce qui n'est pas toujours le cas )
donc tout dépend du contexte, comme toujours.
Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
et quand je dis croisement, rien de sexuel là dedans, hein !</S< body>
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Coucou,

En même temps, si php les génère, il les connait forcément ;o)

merci pour ta solution Bul, en tout cas ^^
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
euh, tu peux nous donner ta partie php qui met les box, histoire que je comprenne pourquoi ma solution serait pas bonne ? :o)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
si box# est dans un formulaire, il est nécessaire de
le dire : name_formulaire.name_box.? et aps name_box.?
sinon : inconnu.

quelle idée de générer des name/id non consécutifs ?

on pourrait aussi examiner tous les champs du formulaire
et traiter ceux qui sont des checkbox.
car eval, c'est assez gourmand, et tester si les champ existent,
je veux bien, mais on arrête quand ? avec une borne maxi ?
je n'aime pas trop moi, car si le nombre augmente, il faudra modifier
le script ( si on s'en souvient qu'il existe et est testé ce maxi ! )

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
les id des box non consecutifs sont peut-etre liés à un truc spécial. Par exemple :

Choisissez la couleur de votre voiture :
- 1 jaune
- 2 vert
- 4 bleu

car la couleur 3 noir n'est pas accessible pour ce modèle...


PS: non, je n'ai pas mauvais gout pour les couleurs de voiture :oP
Messages postés
125
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
22 janvier 2009

En fait ma liste des boxes est liés à une liste stockée dans une BDD

Cette liste peut être gérée par les admins du site, pour ajouter de nouvelle case ou en supprimer d'autre...

de plus dans nom name="boxnum", num correspond à l'identifiant du champ dans ma BDD, ensuite, je fais une recherche sur les noms de boites validées pour savoir quels identifiants enregistrés (parceque je me sert du champ value pour tout autre chose).

Je sais pas si j'ai été clair, mais bon. c'est fait et ca marche impecc, c tout ce qui m'importe

Merci les jeunes ;)
A+