developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 9 years ago

Closed 8 years ago

#1401 closed bug (fixed)

jForms type email et chaine vide

Reported by: nesswaw Owned by: foxmask
Priority: normal Milestone: Jelix 1.2.7
Component: jelix:forms Version: 1.2.3
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Bonjour,

J'ai ça dans mon jFOrms pour un champ de type "email":

<input ref="email" type="email">
     <label>E-mail<label>
</input>

SI je tape dans ce champ "abcde", il me renvoie une erreur, normal, l'adresse n'est pas valide.

Par contre si je tape " " (une chaine vide de 3 espaces) le test passe sans problème, alors que mon adresse email n'est pas valide...

PS: une date pour la sortie de Jelix 1.3?

Merci

Change History (8)

comment:1 Changed 9 years ago by nesswaw

PS2: Amélioration: pour un type "email" pourquoi pas autorisé l'attribut "maxlenth"? cela éviterait d'avoir des adresses de robots qui font 1024 char...

comment:2 Changed 9 years ago by laurentj

  • Milestone set to Jelix 1.2.4

pourquoi pas autorisé l'attribut "maxlenth"?

parce que la RFC sur les emails ne spécifie pas de taille maximum à ma connaissance. Mauvaise pratique de toute façon de limiter ce genre de champs.

cela éviterait d'avoir des adresses de robots

captcha

de toute façon, maxlength ou pas, c'est pas ça qui va empêcher le robot de soumettre le formulaire.

une date pour la sortie de Jelix 1.3?

quand ça sera prêt.

comment:3 Changed 8 years ago by laurentj

  • Status changed from new to confirmed

comment:4 Changed 8 years ago by foxmask

On n'a pas de jFormsControlEmail qui fasse un :

filter_var($email, FILTER_VALIDATE_EMAIL)

de même jforms_jquery.js ne semble pas contenir de vérification adéquate.

je regarde ça

comment:5 Changed 8 years ago by foxmask

Après quelques recherches voici ce que j'ai observé :

dans jFormsControl on lit

    function check(){
        $value = $this->container->data[$this->ref];
        if(trim($value) == '') {
            if($this->required)
                return $this->container->errors[$this->ref] = jForms::ERRDATA_REQUIRED;
        }elseif(!$this->datatype->check($value)){
            return $this->container->errors[$this->ref] = jForms::ERRDATA_INVALID;
        }elseif($this->datatype instanceof jIFilteredDatatype) {
            $this->container->data[$this->ref] = $this->datatype->getFilteredValue();
        }
        return null;
    }

Donc quand on met des espaces dans un champ email si celui ci n'est pas obligatoire, aucun vérification de validité est faite... Celle ci intervient uniquement dès qu'on met un caractère. Et donc dans la base de données sont stockés les espaces.

Je fini un patch sous peu

comment:6 Changed 8 years ago by foxmask

  • review set to review?

comment:7 Changed 8 years ago by laurentj

  • Owner set to foxmask
  • review review? deleted
  • Status changed from confirmed to reviewing

comment:8 Changed 8 years ago by laurentj

  • Resolution set to fixed
  • Status changed from reviewing to closed

Review ok.

Mais j'ai finalement amélioré la chose, pour tout les autres types de champs (avec des tests ;-))

https://github.com/jelix/jelix/commit/b3896151fa6779ec21cbe9687b3f7ab702244205

Note: See TracTickets for help on using tickets.