Limitation de choix dans une liste de cases à cocher

Eléphanteau du PHP | 11 Messages

27 juin 2021, 13:54

Bonjour,

Je suis confronté à une petite difficulté pour laquelle je sollicite votre aide. J'ai mis en place il y a deux ans un formulaire d'inscription relativement automatique pour une compétition sportive. En fonction des paramètres du licencié (sexe, classement...), il peut s'inscrire via une liste de case à cocher dans un ou plusieurs tableaux de la compétition, dans la limite de deux tableaux maxi.
J'ai pu gérer cette limite avec le bout de code javascript ci-après :

Code : Tout sélectionner

<script type="text/javascript"> /* Limitation à deux cases cochées maximum */ var cb = document.querySelectorAll("[type=checkbox]"); var i = 0, l = cb.length; for (; i<l; i++) cb[i].addEventListener("change", function (){ if (document.querySelectorAll(":checked").length > 2) this.checked = false; }, false); </script>
Jusque là, tout allait bien.

Mais je dois désormais faire face à une évolution que je ne sais pas gérer. En effet, pour la prochaine compétition, nous voulons permettre aux féminines de s'inscrire dans trois tableaux (dont le tableau féminin). Ca revient à :
Hommes => 1 ou 2 tableaux sur 3 choix possibles généralement ce qui leur laisse 2 possibilités (1 tableau masculin ou 2 tableaux masculins)
Femmes => 1 ou 2 tableaux sur 3 choix possibles généralement mais avec en plus la possibilité de s'inscrire dans le tableau féminin ce qui leur laisse 5 possibilités (1 tableau féminin ou 1 tableau masculin ou 1 tableau masculin + 1 tableau féminin ou 2 tableaux masculins ou 2 tableaux masculins + 1 tableau féminin)

Je ne peux donc pas me permettre de remplacer le 2 par un 3 dans le ligne suivante :

Code : Tout sélectionner

if (document.querySelectorAll(":checked").length > 2)
Ca permettrait à un licencié homme de s'inscrire dans 3 tableaux masculins ce qui n'est pas souhaité. Ca permettrait aussi à une femme de faire la même chose alors qu'on veux juste autoriser 1 ou 2 tableaux masculins + éventuellement le tableau féminin.

Je précise que l'information du sexe du licencié est une donnée que je récupère au tout début du processus d'inscription. J'ai donc potentiellement la possibilité de l'exploiter par la suite.

Faut-il retravailler ce code Javascript ?
Faut-il dissocier les choses en affichant le tableau féminin que pour les féminines mais en sortant cette case du contrôle du nombre de cases cochées ?
Faut-il envisager autre chose ?

Merci d'avance pour vos conseils <:)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 juin 2021, 18:53

Salutations !

Tu peux le contrôler en javascript, il faut pour cela mettre plusieurs critères dans ta condition : SI (homme ET qté > 2 OU femme ET qté > 3).

Si tu as déjà l'info du sexe côté php, tu peux garder le code actuel et simplement remplacer ta valeur 2 par une valeur dynamique dépendant de celui-ci.
if (document.querySelectorAll(":checked").length > <?php if ($sexe=='homme') echo 2; else echo 3; ?>)

A noter qu'il est toujours recommandé de contrôler les valeurs envoyée avec php également (et de ne pas faire confiance à ce que l'utilisateur envoi, même s'il y a un contrôle javascript pour lui simplifier la vie ;))

Et si tu veux vérifier les combinaisons, il te faut identifier les cases à cocher correspondantes aux différentes compétitions et compter celles qui ont été cochées dans chacun des groupes (et ainsi compter le nombre de case cochées dans le groupe homme et dans le groupe femme pour t'assurer qu'il est cohérent. En supposant que le groupe femme n'est pas proposé aux hommes (filtre fait lors de la génération de la page avec php), il suffit donc de s'assurer pour les femmes qu'elles ne cochent pas plus de 2 cases dans le groupe homme et pas plus d'une dans le groupe féminin...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

28 juin 2021, 15:33

Je te remercie pour ta réponse. Elle m'ouvre les yeux sur plusieurs possibilités, aussi bien la modification de la partie Javascript que le contrôle des combinaisons ou encore un affichage en deux zones, celle réservée au tableau féminin ne se faisant que pour les féminines évidemment mais en étant également sortie du test des 2 tableaux maxi.
A voir si j'arrive à mettre ça en œuvre et à récupérer les infos une fois le formulaire validé !