5546 sujets

Sémantique web et HTML

Bonjour,

Je ne sais pas trop où poser ma question, et c'est pas facile de trouver la solution sur le web (les mots-clés que j'utilise ne sont pas efficaces je pense)

J'ai un formulaire avec des cases à cocher. Certaines d'entre elles sont déjà cochées (attribut checked). Or, lorsque je valide le formulaire, les cases que je n'ai pas cochées à la main, les "checked" sont considérées comme non cochées, le $_POST['ma case déjà checked'] n'existe pas.

Y a-t-il une solution pour que $_POST['ma case déjà checked'] soit à 'on' même si je n'ai pas coché à la souris?

Merci d'avance, en espérant que vous me comprenez...

EDIT

Désolé, j'ai compris le problème...
Les cases à cocher "checked" étaient aussi "disabled" pour que l'utilisateur ne puisse pas les décocher... Si je les rend disponibles, elles sont bien cochées et je peux récupérer le 'on' dans $_POST.

Bref, il me reste donc une question: comment empêcher l'utilisateur de décocher une case sans passer par "disabled". Avec du CSS???
Modifié par lefaye (10 Nov 2015 - 23:20)
Bonsoir Lefaye,
j'ai envie de te retourner la question : pourquoi vouloir empêcher l'utilisateur de décocher, sauf évidemment à lui imposer un choix qui n'existe alors pas ?

Perso, je trouve que cela est délicieusement surréaliste, comme ceci : -"Qu'est-ce qu'un couteau sans lame auquel il manque le manche ?"
Je m'attendais un peu à une réponse de la sorte Smiley cligne

En fait, c'est pour un formulaire où les utilisateurs cocheront les billets qu'ils ont vendus (pour un spectacle). Ils viendront au fur et à mesure de la vente.

Donc certaines cases seront déjà cochées, et ils en cocheront d'autres s'ils ont vendu d'autres billets. Pour éviter qu'ils ne décochent par inadvertance des billets vendus, je voulais les "disabled"... Et je mets un bouton pour activer les cases en cas d'erreur.

Oui oui, c'est un peu tordu, mais c'est pour des élèves de 14-15 ans, alors je veux éviter les erreurs au maximum!

Solution envisagée: mettre une petite image à la place de la case "disabled", pour les billets déjà vendus, et un <input type="hidden"> pour que le formulaire envoie la valeur du billet vendu, afin qu'il ne soit pas considéré comme non vendu dans la base de données.
a écrit :
Solution envisagée: mettre une petite image à la place de la case "disabled", pour les billets déjà vendus, et un <input type="hidden"> pour que le formulaire envoie la valeur du billet vendu, afin qu'il ne soit pas considéré comme non vendu dans la base de données.


Presque. Pour faire mieux je te propose cette solution-ci: un champ hidden, oui, mais par contre tu gardes quand même la case à cocher en disabled et tu supprimes son attribut name. Pas de doute possible, cette case ne pourra jamais envoyer la quelconque valeur puisqu'elle n'a pas d'attribut name. Simple et efficace sans avoir recours à des solutions de contournement potentiellement douteuses ou inutilement compliquées du point de vue sémantique et accessibilité.

Il existe une autre possibilité: onclick=return false. Mais il y a deux avantages bonus au champ hidden + case disabled intacte :
* Ca marche même si JavaScript est désactivé. 99% des gens n'en ont rien à cirer, mais ne sait-on jamais.
* L'état de la case qui sera toujours rapporté de façon appropriée sans effort quelque soit le médium de consultation: effet visuel, indication pour lecteur d'écran et en braille, etc. Bien sûr on peut utiliser ARIA, mais si tu peux t'en passer c'est mieux et plus simple pour tout le monde.

Note tout de même que, côté serveur, tu ne devrais pas te fier à la réception de ces champs hidden pour que les billets vendus gardent leur état. Si tu faisais une vérification correcte côté serveur empêchant toute modification des billets déjà réservés, tu n'aurais pas besoin de champ hidden.
Modifié par QuentinC (11 Nov 2015 - 11:39)
Merci pour cette réponse précise et précieuse!

Je garde l'idée de la case désactivée et du hidden. Pour mes élèves qui ne sont pas tous des professionnels dans l'utilisation de cases à cocher, c'est mieux. Comme ça ils voient que la case est bien cochée, mais ne peuvent pas l'enlever.
QuentinC a écrit :
Note tout de même que, côté serveur, tu ne devrais pas te fier à la réception de ces champs hidden pour que les billets vendus gardent leur état. Si tu faisais une vérification correcte côté serveur empêchant toute modification des billets déjà réservés, tu n'aurais pas besoin de champ hidden.

En fait, je veux laisser la possibilité de corriger une éventuelle erreur, et donc d'activer les cases disabled via un lien pour enlever de la liste un billet pas vendu coché par erreur.
Ainsi, lorsque je reçois les données du formulaire, je peux simplement mettre à jour ma base de données de cette façon:
- les valeurs 'on' dans POST = billets vendus (soit checkbox soit hidden)
- l'absence de valeur dans POST = billets pas vendu
Que ça vienne de nouveaux billets enregistrés ou d'une modification d'une erreur, ça ne change rien pour moi.
Modifié par lefaye (11 Nov 2015 - 21:38)