kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015
-
20 juin 2006 à 13:38
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDerniè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.
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 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és2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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);
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és239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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és331Date d'inscriptionmardi 12 novembre 2002StatutMembreDernière intervention10 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és112Date d'inscriptionjeudi 11 mars 2004StatutMembreDernière intervention11 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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 20 juin 2006 à 13:38
Salut...
J'ais pas regardé la source en détail mais un chose me saute aux yeux...
28 juin 2006 à 10:18
21 juin 2006 à 19:50
# 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.
21 juin 2006 à 17:31
$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°
21 juin 2006 à 17:07
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
21 juin 2006 à 16:16
@ tchaOo°
21 juin 2006 à 14:12
Donc toujours faire le travail des 2 côtés ;-)
20 juin 2006 à 19:34
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
20 juin 2006 à 16:04
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.
20 juin 2006 à 14:09
20 juin 2006 à 13:38
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°