VÉRIFICATION DE CHAMPS - CLASSE

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 20 juin 2006 à 13:38
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 - 28 juin 2006 à 10:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38207-verification-de-champs-classe

DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
28 juin 2006 à 10:18
Update v1.1 avec quelques petites nouveautés au niveau du parsing et de la simplicité d'utilisation.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
21 juin 2006 à 19:50
Des ptits trucs à modifs quand même :

# public function getState() {
# return ($this->state);
# }
# public function getDebug() {
# return ($this->debug);
# }

Soit tu passes ca en public, soit tu utilises __get()... mais pas ca !!!

"private function setValue($p_data,$p_state) {"
La, utilises __set() pour faire ca !

"} while ($this->getState() && $i < $numb); // tant que state est à TRUE et que $i est inférieur au nombre total de paramètres, on continue"
Tu peux accéder directement à ta propriété de classe... ne passe pas par une méthode qui va te ralentir pour rien.

Voila déja rien que pour ca.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 juin 2006 à 17:31
Moi je pense que ce qui serait interessant c'est une class comment dire... en gros sur un formulaire avec un champs text limité, un champ texte mail et un textarea non limité mais où il faut virer le html...


$monObject = new maClass();

$monObject->addTextFiel('montext',false,20); // champs texte(nom du champs,convertir les charactères spéciaux, nb de char max, etc)
$monObject->addMailFiel('monemail');
$monObject->addTextFiel('montextarea',true);

if(!isset($_POST['submit']))
{
echo '<form... onSubmit="javascript: return validateForm();>


<textarea name="montextarea"...></textarea>

</form>';

echo $monObject->getValidationScript();
}
elseif(!$monObject->checkPostVars())
{
echo $monObject->getErrors();

echo '<form... onSubmit="javascript: return validateForm();>


<textarea name="montextarea"...>'.$_POST['montextarea'].'</textarea>

</form>';

}
else $cleanVars = $monObject->getCleanVars();

Je sais pas si vous me suivez... la class genererais le script js de la validation si le formulaire n'est pas soummis et vérifierais les infos si le formulaire est soummis... .. .

@ tchaOo°
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
21 juin 2006 à 17:07
Comme je l'ai marqué dans ma description: "Afin de servir d'exemple, j'ai analysé un pseudo et une adresse mail ... ".
Il s'agit donc d'une piste pour apprendre à parser des champs avec une seule fonction.

#malalam - Je suis d'accord, cette classe est incomplète mais comme dit précédement, elle sert de base et montre une nouvelle façon d'analyser des champs. Par contre, je pense qu'une méthode sans paramètres pré-définis est bien la meilleure façon, puisque le nombre de champs est totalement aléatoire.


En bref, je ferai une update de cette classe en m'appuyant sur vos remarques. Merci pour vos commentaires
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 juin 2006 à 16:16
@ TheSin... la vérification coté client (limitation html ou vérif javascript) c'est uniquement pour le confort de l'utilisateur... pour lui éviter de se planter (limitation du nombre de charactères dans un champs text) ou pour lui éviter de soumettre la page s'il y a une erreur (vérification via javascript)... mais seule la vérification coté serveur est importante... .. .

@ tchaOo°
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
21 juin 2006 à 14:12
stepibou => il ne suffit pas de limiter le nombre de caractères en HTML, car tu peux très bien ralonger ta chaine sans problème quand c'est de l'argument GET, et faire un script qui envoie une chaine de 50 caractères au lieu de 20 en POST.
Donc toujours faire le travail des 2 côtés ;-)
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
20 juin 2006 à 19:34
salut,

Ouai, ben pour limiter le nb de caractère : tu peux le faire en html...
Je vois que tu a changé ton texte...
bon, pour un minimum, la c 'est pas la meme , ok.

Sinon, ben c'est bien pour un mail... Mais pour le reste??
htmlentities..
htmlspecialchars..
préparer l'insertion dans une bdd..
??

Faudrai une solution un peu plus complete en gros!
on en veut tj plus lol!

bye
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 juin 2006 à 16:04
Hello,

l'idée est intéressante. Mais le fond manque de rigueur.
Vire le '.com' de ton adresse email : il s'arrête quand on lui donne l'email en 1er. Forcément. Mais dans le cadre d'un formulaire, on a généralement envie de mettre en erreur TOUS les champs invalides, afin de l'indiquer à l'utilisateur, et de mettre en ok TOUS les champs valides.
De plus, on ne sait pas à quel masque correspond les résultats.
IL faut mettre, dans la classe, dans un ordre précis, les masques. ET passer les paramètres dans le même ordre.
A mon goût, ça manque de modularité. On pourrait par exemple recevoir en réponse pour un champ valide : $champ est un email valide (c'est un exemple hein). Ou pouvoir forcer un masque : je passe en paramètre array ($email, 'EMAIL'). Bref, je veux appliquer à $emeil le masque EMAIL, partce que je m'attends à ce que ce soit un EMAIL valide (et pas un champ texte valide...).
facile de moduler après (avec ou sans tableau) : array ($nom, 'TEXTE', 20) // 20 caractères max.
Etc...
Bref, bonne idée, mais très incomplet à mon sens.
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
20 juin 2006 à 14:09
woups effectivement. J'ai fait des tests avec d'autres valeurs, du coups j'ai oublié de changer de structure
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
20 juin 2006 à 13:38
Salut...

J'ais pas regardé la source en détail mais un chose me saute aux yeux...

switch ($p_state)
{
case TRUE:
$this->state = $p_state;
$this->debug[$p_data] = 1;
break;
case FALSE:
$this->state = $p_state;
$this->debug[$p_data] = 0;
break;
}

un simple...

if($p_state)
{
$this->state = $p_state;
$this->debug[$p_data] = 1;
}
else
{
$this->state = $p_state;
$this->debug[$p_data] = 0;
}

aurait suffit et serait plus rapide qui plus est... ou alors... .. .

$this->state = $p_state;
$this->debug[$p_data] = (int)$p_state;

@ tchaOo°