VALIDATION AUTOMATIQUE DES FORMULAIRES

rttb Messages postés 290 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 25 avril 2008 - 11 janv. 2005 à 20:13
antoinesyma Messages postés 5 Date d'inscription mardi 13 septembre 2011 Statut Membre Dernière intervention 11 octobre 2011 - 29 sept. 2011 à 11:32
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/28766-validation-automatique-des-formulaires

antoinesyma Messages postés 5 Date d'inscription mardi 13 septembre 2011 Statut Membre Dernière intervention 11 octobre 2011
29 sept. 2011 à 11:32
bonjour Tguerlus j'utilise ton script de validation automatique de formulaire je cherche la valeur de alt pour n'autoriser que la saisie de texte disons les lettres alphabétiques, les lettres accentuées, espace sans les chiffres et les caractères non alphabétiques. Merci
antoinesyma Messages postés 5 Date d'inscription mardi 13 septembre 2011 Statut Membre Dernière intervention 11 octobre 2011
29 sept. 2011 à 10:45
bonjour tguerlus j'utilise ton script de validation automatique de formulaire je cherche la valeur de alt pour autoriser seulement la saisie de texte disons les lettres alphabétique et les lettres accentuées sans les chiffres et les caractères non alphabétiques
cousinlol Messages postés 59 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 26 octobre 2015
20 juil. 2006 à 14:55
Bonjour,

C'est vrai cela semble supper, mais quid pour les saisies dans des champs type "textarea" ou "select".

"alt" n'existe pas dans ces cas là.

Comment positionne-t-on le contrôle ?

Merci
gonzamax Messages postés 1 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 20 décembre 2005
20 déc. 2005 à 18:58
Super Tguerlus. Bravo pour ce code, c'est exactement ce qu'il me fallait.
cs_johann1 Messages postés 170 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 9 janvier 2008
26 août 2005 à 16:54
Super Tguerlus!
tguerlus Messages postés 43 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 3 mai 2005
3 mars 2005 à 10:17
Qu'as tu mis dans la fonction test()?
misterniark Messages postés 14 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 août 2007
2 mars 2005 à 16:20
le probleme de button c'est l'inverse, effectivement ca marche mais ma page ne recois plus le $_post donc plus d'enregistrement...
il me faudrai une solution intermediaire ;)
Mathieu
tguerlus Messages postés 43 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 3 mai 2005
2 mars 2005 à 13:56
Je pense que ton probleme vient du fait que tu utilise une balise input de type submit. Utilise simplement une balise input de type button avec l'evenement onclick comme tu l'as fait.

A+
TG
misterniark Messages postés 14 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 août 2007
2 mars 2005 à 12:53
en fait je pense quil faudrai que le fonction qui ce declenche quand je clique sur le bouton "ok" de la fenetre "alert" vide ma variable php $go car c'est elle qui declenche l'eregistrement. mais je ne sait pas du tout comment faire je connais tres peu le JS.
Merci a toi
Mathieu
misterniark Messages postés 14 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 août 2007
2 mars 2005 à 12:48
voici le formulaire concerné(enfin juste un bout):
<FORM class="p2_form" name="produitForm" method="post" enctype="multipart-form-data"
action="<?php echo $_SERVER['PHP_SELF']?> ">
<TABLE border=0>
<tr align="center"><?php echo $produit->titre(); ?>
</tr>
<TR>
<TD class="label">Nom</TD>
<TD>nom ; ?>" alt="nom :nom; obligatoire:true"></TD>
</TR>
<TD>bouton(); ?>" onclick="javascript:Validator.Submit(document.produitForm,'test()');"></TD>

il medit que le champs est manquant mais execute ma fonction d'enregistrement du formulaire.
cela ne viens surement pas de ta source, mais si tu vois quel est le probleme ca me sauverai pas mal.
Merci
misterniark Messages postés 14 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 août 2007
2 mars 2005 à 12:47
voici le formulaire concerné(enfin juste un bout):
<FORM class="p2_form" name="produitForm" method="post" enctype="multipart-form-data"
action="<?php echo $_SERVER['PHP_SELF']?> ">
<TABLE border=0>
<tr align="center"><?php echo $produit->titre(); ?>
</tr>
<TR>
<TD class="label">Nom</TD>
<TD>nom ; ?>" alt="nom :nom; obligatoire:true"></TD>
</TR>
<TD>bouton(); ?>" onclick="javascript:Validator.Submit(document.produitForm,'test()');"></TD>

il medit que le champs est manquant mais execute ma fonction d'enregistrement du formulaire.
cela ne viens surement pas de ta source, mais si tu vois quel est le probleme ca me sauverai pas mal.
Merci
tguerlus Messages postés 43 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 3 mai 2005
2 mars 2005 à 09:35
Peux-tu être plus précis pour que je puisse reproduire le bug ou alors envoie moi le code

A+
misterniark Messages postés 14 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 août 2007
1 mars 2005 à 18:58
bonsoir,
jai un soucie... quand je test un champs "obligatoire" il previent que ce champs est manquant mais laisse mon script s'executer quand meme, je vois pas comment empéché ca.
Merci
tguerlus Messages postés 43 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 3 mai 2005
16 févr. 2005 à 16:39
Suite au modifification que je viens de mettre en ligne je vous suggère de regarder la grammaire détaillé pour avoir la liste exaustive de ce que l'on peut faire.
cs_saturnino Messages postés 15 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 4 septembre 2007
15 févr. 2005 à 18:55
Voilà, je viens de l' implémenter dans mon dév en ajoutant les cas perso dans le switch, j' utiliserais dorénavant cette classe vraiment géniale et vraiment très pratique dans les back-office.

10/10

@+
saturnino
cs_saturnino Messages postés 15 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 4 septembre 2007
15 févr. 2005 à 14:41
merci

ben en fait je ne m'étais jamais penché sur les regexp

et finalement on fini par comprendre donc j'utilise maintenat des regexp directement dans test pour contrôler mes champs de type nombre.

tout script m'auras fait découvrir la puissance des expressions régulières.

merci
ciao
saturnino
tguerlus Messages postés 43 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 3 mai 2005
15 févr. 2005 à 13:45
J'ai réussi à reproduire le bug. En effet, il y avait un beans qui maintenant corrigé.

Je met en ligne le correctif tout de suite.

Sinon voici un lien sur un tutorial sur les expressions regulieres en javascript:
http://www.asp-php.net/tutorial/scripting/regexp.php
Ca peut être utile.

N'hésite pas si tu as un autre pb.
A+
cs_saturnino Messages postés 15 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 4 septembre 2007
15 févr. 2005 à 11:59
yop

bon en fait j'ai trouvé : en faisant un test sur le contenu du champs çà marche.

alt="test:reg!^([0-9]+)|([a-z]+)|([A-Z]+)|([0-9]+[.][0-9]+)$;obligatoire:true"

@+

saturnino
cs_saturnino Messages postés 15 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 4 septembre 2007
15 févr. 2005 à 11:15
Bonjour et merci pour ta réponse

cependant, j'ai bug à l'attribution de champs obligatoire au sein d'une boucle.



me pose problème, en effet, le script me retourne toujours "champs invalide" à partir du deuxième champs trouvé de ce type même si je les rempli...

Aurais-tu une idée? merci encore




for( $i = 0 ; $i < $_POST['nbrLots'] ; $i++){

$num = $i+1;
$form .= '<tr onMouseOver="this.style.backgroundColor=\'#ccccff\'" onMouseOut="this.style.backgroundColor=\'\'">
<td>'.$num.'</td>
<td class="trait_G"></td>
<td></td>
<td></td>
<td></td>
<td class="trait_G"></td>
<td class="trait_G"></td>
<td></td>
<td></td>
<td class="trait_G"></td>
<td></td>
<td class="trait_G"></td>
<td class="trait_G"></td>
<td class="trait_D"></td>
</tr>';

}
tguerlus Messages postés 43 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 3 mai 2005
11 févr. 2005 à 14:33
Utilise les expressions régulières pour tous les types "fantaisiste"
Exemple pour saisir un nombre entier ou décimal tu peux utiliser ceci:

alt="reg!^([0-9]+)|([0-9]+[.][0-9]+)$"

Sinon tu attend la prochaine mouture qui va arriver d'ici peu.
Au programme:
1/ saisie d'un nombre qu'il soit entier ou décimal avec controle des bornes inférieures et supérieures.
Syntaxe :
nbr!nbr>([entier])([separateur]([entier]))(?([numeric])(?([numeric])))

2/ possibilité de faire des unions d'ensemble permettant par exemple de dire que l'on veut un nombre compris entre 0 et 10 ou 25 et 30
Syntaxe :
nbr![format nombre](?[numeric]&[numeric](^[numeric]&[numeric](^...)))
exemple nbr!dc>.2?0&10.2^25&30

A bientôt ;)
cs_saturnino Messages postés 15 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 4 septembre 2007
11 févr. 2005 à 13:40
Bonjour, et bravo pour le script, quel gain de temps!!!

Cependant,, comment définir un champs de type nombre mais pas strictement entier ou décimal?

merci
rttb Messages postés 290 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 25 avril 2008
12 janv. 2005 à 17:54
Cool les modifs, encore merci
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 janv. 2005 à 14:45
si l'idée développée mon script a permis
de voir naitre celui-ci, alors j'en suis
particulièrement satisfait. Il va sûrement
aussi me permettre d'améliorer le mien.
@+
tguerlus Messages postés 43 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 3 mai 2005
12 janv. 2005 à 10:12
C'est cadeau, il y pas de quoi.

Pour ceux qui voudraient personnaliser le moyen de signaler les erreurs, je leur suggere de bien etudier la classe TValidator.

Il y a 2 méthodes essentielles associées à cette classe.

La fonction TRegExp(type) permet de retourner la syntaxe d'une expression régulière associée à un type donné. Il vous est possible d'enrichir cette fonction avec des types personnels
Exemple:
Ajoutez les lignes suivantes dans le switch de la fonction,

case 'perso':
rep = "^[\\d]{1}[ ]...[\\d]{2}$";break;

Ensuite pour utiliser le type "perso" il suffit d'affecter à l'attribut alt de la balise input l'ordre suivant:
alt="test:perso"

La fonction TError(formulaire,champ,message) est la fonction qui est appelé en cas d'erreur de saisie .

On a à disposition l'objet formulaire, l'objet input correspondant au premier champ qui a une erreur de saisi et le message d'erreur qui regroupe toutes les erreurs trouvées. Vous pouvez ainsi redéfinir cette fonction pour effectuer ce que vous voulez comme un effet visuel, tels que changer la couleur de(s) la case(s) en cas d'erreur.

Enfin, il faut bien etudier la grammaire.
La syntaxe est du type (type:valeur). Pour type on peut avoir :

- nom qui correspond a un libellé qui indique le nom du champ. On peut ainsi personnaliser le message d'erreur, car si nom est défini, on ne trouve plus "Champ(xx)" mais le libellé du type nom.(optionnel)

- obligatoire qui correspond à l'information champ obligatoire. Par défaut un champ n'est pas obligatoire.(optionnel)

- erreur qui correspond au message d'erreur personnalisé. Ainsi, au lieu d'avoir "Le Champ(xx) est invalide" vous avez le message associé.(optionnel)

- test qui correspond au test à effectuer, pour connaitre la syntaxe des tests possible reportez vous à la grammaire.
rttb Messages postés 290 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 25 avril 2008
11 janv. 2005 à 20:13
c'est cool et complet, il y a un oublis (j'ai pas regarde la source) si tu te trompe sur le dernier, il met champ(23) comme nom.
Si tu peux rajouter, un effet visuel, tels que changer la couleur de(s) la case(s) en cas d'erreur, j'achete ton code.
(pour pas cher j'espere)

Merci pour cette source, tres utile.