[Formidable] Champ case à cocher obligatoire avec stockage valeur 0 ne valide jamais
#258
Closed
opened 3 weeks ago by RealET
·
8 comments
No Branch/Tag Specified
constructeur_glisser_deposer
conteneur_inline
explication_simplifier_conteneur
fieldset_simplifier_conteneur
issue24_data_choix_autre
issue261_etoile_message_erreur
issue99
issue_48
master
no_submit
php8
v1
v2
v3
v1.42.11
v1.42.5
v2.0.0
v2.0.1
v2.0.2
v2.0.3
v2.0.4
v2.0.5
v2.1.0
v2.1.1
v2.1.2
v2.1.3
v2.10.0
v2.11.0
v2.11.1
v2.11.2
v2.12.0
v2.13.0
v2.14.0
v2.14.1
v2.14.2
v2.14.3
v2.14.4
v2.14.5
v2.14.6
v2.14.7
v2.14.8
v2.15.0
v2.15.1
v2.15.2
v2.16.0
v2.16.1
v2.16.2
v2.17.0
v2.17.1
v2.18.0
v2.18.1
v2.18.10
v2.18.11
v2.18.12
v2.18.13
v2.18.14
v2.18.15
v2.18.16
v2.18.17
v2.18.18
v2.18.19
v2.18.2
v2.18.20
v2.18.21
v2.18.22
v2.18.23
v2.18.24
v2.18.3
v2.18.4
v2.18.5
v2.18.6
v2.18.7
v2.18.8
v2.18.9
v2.19.0
v2.19.1
v2.19.2
v2.19.3
v2.19.4
v2.19.5
v2.19.6
v2.19.7
v2.19.8
v2.19.9
v2.2.0
v2.2.1
v2.2.2
v2.2.3
v2.20.0
v2.20.1
v2.21.0
v2.21.1
v2.21.2
v2.21.3
v2.21.4
v2.22.0
v2.23.0
v2.23.1
v2.23.2
v2.23.3
v2.23.4
v2.23.5
v2.23.6
v2.24.0
v2.24.1
v2.24.2
v2.24.3
v2.25.0
v2.25.1
v2.25.2
v2.25.3
v2.25.4
v2.26.0
v2.26.1
v2.26.10
v2.26.2
v2.26.3
v2.26.4
v2.26.5
v2.26.6
v2.26.7
v2.26.8
v2.26.9
v2.27.0
v2.28.0
v2.3.0
v2.3.1
v2.4.0
v2.5.0
v2.5.1
v2.5.10
v2.5.11
v2.5.12
v2.5.13
v2.5.14
v2.5.15
v2.5.16
v2.5.17
v2.5.18
v2.5.19
v2.5.2
v2.5.20
v2.5.21
v2.5.22
v2.5.23
v2.5.24
v2.5.25
v2.5.26
v2.5.27
v2.5.28
v2.5.29
v2.5.3
v2.5.30
v2.5.4
v2.5.5
v2.5.6
v2.5.7
v2.5.8
v2.5.9
v2.6.0
v2.6.1
v2.6.2
v2.6.3
v2.7.0
v2.7.1
v2.7.10
v2.7.11
v2.7.12
v2.7.13
v2.7.14
v2.7.2
v2.7.3
v2.7.4
v2.7.5
v2.7.6
v2.7.7
v2.7.8
v2.7.9
v2.8.0
v2.8.1
v2.9.0
v3.0.0
v3.1.0
v3.10.0
v3.10.1
v3.11.0
v3.11.1
v3.11.2
v3.12.0
v3.12.1
v3.12.2
v3.12.3
v3.12.4
v3.12.5
v3.12.6
v3.12.7
v3.13.0
v3.13.1
v3.13.2
v3.13.3
v3.13.4
v3.14.0
v3.15.0
v3.16.0
v3.16.1
v3.17.0
v3.18.0
v3.18.1
v3.18.10
v3.18.11
v3.18.12
v3.18.13
v3.18.14
v3.18.2
v3.18.3
v3.18.4
v3.18.5
v3.18.6
v3.18.7
v3.18.8
v3.18.9
v3.19.0
v3.19.1
v3.19.2
v3.19.3
v3.19.4
v3.19.5
v3.19.6
v3.2.0
v3.2.1
v3.20.0
v3.21.0
v3.21.1
v3.21.2
v3.21.3
v3.21.4
v3.22.0
v3.22.1
v3.23.0
v3.23.1
v3.23.2
v3.23.3
v3.23.4
v3.24.0
v3.25.0
v3.25.1
v3.26.0
v3.26.1
v3.27.0
v3.27.1
v3.27.2
v3.27.3
v3.27.4
v3.27.5
v3.27.6
v3.27.7
v3.28.0
v3.28.1
v3.28.10
v3.28.11
v3.28.12
v3.28.13
v3.28.14
v3.28.15
v3.28.16
v3.28.2
v3.28.3
v3.28.4
v3.28.5
v3.28.6
v3.28.7
v3.28.8
v3.28.9
v3.29.0
v3.29.1
v3.3.0
v3.3.1
v3.3.2
v3.3.3
v3.3.4
v3.30.0
v3.30.1
v3.30.2
v3.31.0
v3.31.1
v3.31.2
v3.31.3
v3.32.0
v3.36.2
v3.37.0
v3.37.1
v3.38.0
v3.38.2
v3.39.0
v3.4.0
v3.40.0
v3.40.1
v3.41.0
v3.41.3
v3.41.5
v3.41.6
v3.42.0
v3.42.1
v3.42.2
v3.42.5
v3.42.6
v3.42.7
v3.42.8
v3.43.0
v3.43.2
v3.43.3
v3.43.4
v3.43.5
v3.44.0
v3.44.1
v3.45.0
v3.45.1
v3.45.2
v3.46.0
v3.47.0
v3.47.1
v3.47.2
v3.47.3
v3.48.0
v3.48.1
v3.48.2
v3.49.0
v3.49.1
v3.5.0
v3.5.1
v3.50.0
v3.50.1
v3.50.2
v3.51.0
v3.51.1
v3.51.2
v3.51.3
v3.51.4
v3.51.5
v3.51.6
v3.51.7
v3.51.8
v3.52.0
v3.52.1
v3.52.2
v3.53.0
v3.53.1
v3.53.2
v3.53.3
v3.54.0
v3.54.1
v3.54.10
v3.54.2
v3.54.4
v3.54.6
v3.54.7
v3.54.8
v3.54.9
v3.55.0
v3.55.1
v3.55.2
v3.55.3
v3.55.4
v3.56.0
v3.56.1
v3.56.2
v3.56.3
v3.56.4
v3.56.5
v3.6.0
v3.6.1
v3.6.2
v3.6.3
v3.6.4
v3.7.0
v3.7.1
v3.7.2
v3.8.0
v3.8.1
v3.8.10
v3.8.11
v3.8.2
v3.8.3
v3.8.4
v3.8.5
v3.8.6
v3.8.7
v3.8.8
v3.8.9
v3.9.0
v3.9.1
v4.0.2
v4.0.3
v4.0.4
v4.1.0
v4.2.0
v4.2.1
v4.2.3
v4.3.0
v4.3.1
v4.3.2
v4.3.3
v4.3.4
v4.3.5
v4.3.6
v4.4.0
v4.4.1
v4.5.0
v4.5.1
v4.6.0
v4.6.1
v4.7.0
v4.7.1
No Label
amélioration
bug
doublon
help wanted
invalide
question
refusé
Milestone
Set milestone
Clear milestone
No items
No Milestone
Assignees
Assign users
Clear assignees
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
This issue currently doesn't have any dependencies.
Reference in new issue
There is no content yet.
Delete Branch '%!s(MISSING)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
Bonjour,
Le problème
J'ai un champ dans formidable de type case à cocher définit ainsi :
Et le champ est obligatoire
Impossible de valider le formulaire, il signale qu'il y a une erreur dans la saisie.
J'ai triché en écrivant :
Mais c'est pas propre.
comportement attendu
Pouvoir explicitement stocker 0 (zéro) et le champ obligatoire soit considéré comme rempli.
Solution proposée par @rastapopoulos
(Mais la soluce quand même, il me semble depuis le début il faut un === ici, surtout pas == : https://git.spip.net/spip-contrib-extensions/saisies/src/branch/master/inc/saisies_verifier.php#L73 )
J'ai testé la solution du === mais ça n'est pas là que ça se passe.
En effet,
$valeur
vaut à cet endroit :Array ( )
Et c'est https://git.spip.net/spip-contrib-extensions/saisies/src/branch/master/inc/saisies_request.php#L197 qui supprime les zéros, comme le montre l'exemple
Example #2 array_filter() without callback
de la doc : https://www.php.net/manual/en/function.array-filter.phpEt j'ai essayé avec ceci :
Et là, la valeur 0 est bien prise en compte
Je ne commite rien parce que je n'ai aucune idée des effets de bords que cette modification pourrait avoir.
Ah oui pardon c'est une saisie checkbox donc tableau.
Mais c'est pas null qu'on veut filtrer, ça existe quasi jamais null, c'est des input text (cf l'exemple pour date heure). Donc il faut aussi filtrer "" chaine vide.
Mais juste pas "0" alors que
empty("0")
renvoie true. On veut filtrernull
et "" chaine vide.Càd le même principe que proposé mais avec :
return (!empty($valeur) and $valeur != "0")
Après lecture de la doc de https://www.php.net/manual/en/function.empty.php, et compris que ça considère 0 (ce qui est la valeur passée à cet endroit, et non pas la string '0'), j'ai fait ça avec :
return (isset($valeur) AND $valeur !== '');
Sur la PR je fais des tests.
Mais sur le fond j'ai du mal à comprende l'interet d'avoir un checkbox proposant deux pris dont un prix égal à 0. A ce moment là autant utiliser soit un radio, soit un checkbox sans rien à cocher, non ?
Alors, c'est un ancien formulaire que j'ai adapté dans le temps.
Avant, tous les prix étaient > 0, et il y avait des cases supplémentaires pour hôtel et repas.
Là, il n'y a plus que 2 prix (Et un JS qui en fait la somme) et une zone qui ne s'affiche que si la 2e case est sélectionnée.
Tu peux le voir ici : https://www.rfam.fr/spip.php?rubrique3
Autrement dit, c'est sans doute un formulaire qui aurait pu être conçu autrement s'il avait été ainsi dès le départ.
Mais c'est son historique qui fait qu'il est ainsi.