Porteur principal : Laurent Groleau
Porteur secondaire : ?
Résumé
Sur OM4.9, en modification d’un formulaire, les dates ‘not null’ ne sont pas vérifiées, et on peut provoquer une erreur SQL peu compréhensible à l’utilisateur.
P.S. : problème non reproduit sur le framework 4.9.2 … on constate seulement que la date vide n’est pas postée, pas vérifiée et reste inchangée.
Motivation
Eviter une erreur SQL qui est prévenue pour les autre types de champs.
Pré-requis
Obtenir la validation d’un développeur-souche.
Proposition et implémentation
Dans la classe dbform
, la méthode checkRequired()
, en contexte de modification ($crud = 'update'
), vérifie que les champs du formulaire (tableau posté $this->valF
) ont bien une valeur non vide. Hors l’utilisation de la fonction isset()
est inapproprié pour les dates :
- une date non renseignée est postée comme un élément existant mais vide
"date_formulaire" => null
-
isset()
renvoi alorsfalse
, ce qui désactive le contrôle, comme dans le cas où on aurait volontairement supprimé le champ du formulaire avecunset()
- le code continue donc et le SQL échoue pour violation de contrainte
La proposition est de remplacer le test de blocage actuel:
elseif (($crud === 'update' OR ($crud === null AND $this->getParameter('maj') == 1))
&&isset($this->valF[$field])
&&$this->valF[$field] === '') {
par celui-ci:
elseif (($crud === 'update' OR ($crud === null AND $this->getParameter('maj') == 1))
&&array_key_exists($field, $this->valF)
&&(is_null($this->valF[$field]) || $this->valF[$field] === '') {
Risques
Régression sur un autre type de champ, mais apparemment pas sur un text ou un select.