Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

petit problème de formulaire

34 réponses
Avatar
docanski
Bonjour la foule !

Voui, je sais, je suis un peu (beaucoup) HS sur ce coup mais je crois
que ça ne vaut pas vraiment la peine de m'abonner à un groupe où je suis
largué depuis un bout de temps (la vieillesse, quoi ...) pour poser une
question ponctuelle.
Je me lance donc ... :
il s'agit d'ajouter une condition dans un petit JS destiné à un
formulaire ... et j'y arrive plus :-(.
En l'occurrence, je voudrais *exclure* la possibilité d'inscription de
faux membres soumettant des adresses email "exotiques" généralement
génératrices de spam, du genre xxxxxxx@xxxxx.ru ou xxxxxxx@xxxxx.uk,
etc ...
Ce sont donc les extensions de ces adresses que je vise.
Mon script se présente actuellement comme suit :

<script type="text/javascript">
<!--
function process_form(the_form)
{
var element_names = new Object()
element_names["req_username"] = "Nom d\'utilisateur"
element_names["req_password1"] = "Mot de passe"
element_names["req_password2"] = "Confirmez votre mot de passe"
element_names["req_email1"] = "Courriel"
element_names["req_email2"] = "Courriel 2"

if (document.all || document.getElementById)
{
for (i = 0; i < the_form.length; ++i)
{
var elem = the_form.elements[i]
if (elem.name && elem.name.substring(0, 4) == "req_")
{
if (elem.type && (elem.type=="text" || elem.type=="textarea" ||
elem.type=="password" || elem.type=="file") && elem.value=='')
{
alert("\"" + element_names[elem.name] + "\" est un champ requis
pour ce formulaire.")
elem.focus()
return false
}
}
}
}

return true
}
// -->

Quelqu'un peut m'offrir le bout de code kivabien ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/

10 réponses

1 2 3 4
Avatar
SAM
Le 10/1/08 2:13 PM, docanski a écrit :
Bonjour la foule !

il s'agit d'ajouter une condition dans un petit JS destiné à un
formulaire ... et j'y arrive plus :-(.
En l'occurrence, je voudrais *exclure* la possibilité d'inscription de
faux membres soumettant des adresses email "exotiques" généralement
génératrices de spam, du genre ou ,



voir :

<http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:RegExp>
<http://fr.selfhtml.org/javascript/objets/regexp.htm>
<http://fr.selfhtml.org/javascript/objets/string.htm>
<http://fr.selfhtml.org/javascript/objets/string.htm#match>

etc ...
Ce sont donc les extensions de ces adresses que je vise.
Mon script se présente actuellement comme suit :



Voici correctif :


<script type="text/javascript">

function process_form(the_form) {
var element_names = {
"req_username": "Nom d'utilisateur",
"req_password1": "Mot de passe",
"req_password2": "Confirmez votre mot de passe",
"req_email1": "Courriel",
"req_email2": "Courriel 2"
}
for (i = 0; i < the_form.length; ++i)
{
var elem = the_form.elements[i]
if (elem.name && elem.name.substring(0, 4) == "req_")
{
if ((elem.type || elem.tagName=="textarea") &&
(elem.type=="text" ||
elem.type=="password" ||
elem.type=="file"))
{
if(elem.value=='')
{
alert(""" + element_names[elem.name] +
"" est un champ requis pour ce formulaire.")
elem.focus();
return false;
}

// c'est ici pour les domains autorisés (et non pas rejetés) :

if(elem.value.indexOf('@')>0 &&
!elem.value.match(/.(fr|com|org|aso)$/) )
{
alert('cette url n'est pas admise (seuls : fr, org, com,
aso)');
return false;
}
}
}
}
return true
}
</script>
</head>
<body>
<form action="#" onsubmit="return process_form(this)">
<p>req_username <input name="req_username" type="text">
<p>req_password1<input name="req_password1" type="password">
<p>req_email1 <input name="req_email1" type="text">
<p>req_email2<input name="req_email2" type="text">
<p><input name="" type="submit">
</form>
</body>
</html>


Tentative d'esssplication :
==========================
elem.value.match(/.(fr|com|org|aso)$/)
ou
elem.value.search(/.(fr|com|org|aso)$/)

machaine.match(/expression reguliere/) renvoie tout ce que trouvé


machaine.match(/.(fr|com|org|aso)$/)

- / et / pour cadrer l'expression (pas besoin de " ou ' pour cela)
- l'expression cherchée débute par un point : .
- puis le blabla tel quel : (blabla)
mais ici on en veut plusieurs au choix (ou ou ou) : (fr|com|org|aso)
... donc rajouter les domains acceptés
- puis indication de rechercher qu'en fin de la chaine cible : $
(fin de elem.value)


--
sm
Avatar
Sergio
docanski a formulé ce mercredi :

Voui, je sais, je suis un peu (beaucoup) HS sur ce coup mais je crois que ça
ne vaut pas vraiment la peine de m'abonner à un groupe où je suis largué
depuis un bout de temps (la vieillesse, quoi ...) pour poser une question
ponctuelle.
Je me lance donc ... :
il s'agit d'ajouter une condition dans un petit JS destiné à un formulaire
... et j'y arrive plus :-(.
En l'occurrence, je voudrais *exclure* la possibilité d'inscription de faux
membres soumettant des adresses email "exotiques" généralement génératrices
de spam, du genre ou , etc ...
Ce sont donc les extensions de ces adresses que je vise.
Mon script se présente actuellement comme suit :

<script type="text/javascript">



Si tu veux éviter ce genre d'inscription de spammeurs, la *première*
chose à faire, c'est de faire faire le contrôle par le serveur
(langage de ton choix), et non en javascript par le client :
En général, ce genre de parasite s'inscrivent à l'aide de robots, qui
se fichent comme une guigne des scripts javascripts !

--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Sergio ecrit ce qui suit en ce 01.10.2008 15:31 :

Si tu veux éviter ce genre d'inscription de spammeurs, la *première*
chose à faire, c'est de faire faire le contrôle par le serveur (langage
de ton choix), et non en javascript par le client :
En général, ce genre de parasite s'inscrivent à l'aide de robots, qui se
fichent comme une guigne des scripts javascripts !



C'est bien ce que je pensais mais si le peu de connaissances que j'avais
pu assimiler pour créer mes propres JS il y a une dizaine d'année se
sont embrumées au cours des ans, je n'ai jamais eu le temps de me
pencher vraiment sur une autre écriture de code, notamment en PHP qui
semble la meilleure solution.
Le formulaire en question est évidemment traité dans ce langage mais ...
quel code ajouter pour faire ce que je veux ? Voici la partie de la page
qui traite l'enregistrement d'un nouveau membre :

<form id="register" method="post" action="register.php?action=register"
onsubmit="this.register.disabled=true;if(process_form(this)){return
true;}else{this.register.disabledúlse;return false;}">
<div class="inform">
<div class="forminfo">
<h3><?php echo $lang_common['Important information'] ?></h3>
<p><?php echo $lang_register['Desc 1'] ?></p>
<p><?php echo $lang_register['Desc 2'] ?></p>
</div>
<fieldset>
<legend><?php echo $lang_register['Username legend'] ?></legend>
<div class="infldset">
<input type="hidden" name="form_sent" value="1" />
<label><strong><?php echo $lang_common['Username'] ?></strong><br
/><input type="text" name="req_username" size="25" maxlength="25" /><br
/></label>
</div>
</fieldset>
</div>
<?php if ($pun_config['o_regs_verify'] == '0'): ?> <div class="inform">
<fieldset>
<legend><?php echo $lang_register['Pass legend 1'] ?></legend>
<div class="infldset">
<label class="conl"><strong><?php echo $lang_common['Password']
?></strong><br /><input type="password" name="req_password1" size="16"
maxlength="16" /><br /></label>
<label class="conl"><strong><?php echo $lang_prof_reg['Confirm
pass'] ?></strong><br /><input type="password" name="req_password2"
size="16" maxlength="16" /><br /></label>
<p class="clearb"><?php echo $lang_register['Pass info'] ?></p>
</div>
</fieldset>
</div>
<?php endif; ?> <div class="inform">
<fieldset>
<legend><?php echo ($pun_config['o_regs_verify'] == '1') ?
$lang_prof_reg['E-mail legend 2'] : $lang_prof_reg['E-mail legend']
?></legend>
<div class="infldset">
<?php if ($pun_config['o_regs_verify'] == '1'): ?> <p><?php echo
$lang_register['E-mail info'] ?></p>
<?php endif; ?> <label><strong><?php echo $lang_common['E-mail']
?></strong><br />
<input type="text" name="req_email1" size="50" maxlength="50"
/><br /></label>
<?php if ($pun_config['o_regs_verify'] == '1'): ?>
<label><strong><?php echo $lang_register['Confirm e-mail']
?></strong><br />
<input type="text" name="req_email2" size="50" maxlength="50"
/><br /></label>
<?php endif; ?> </div>
</fieldset>
</div>

(extrait d'une page développée par Rickard Andersson)

S'il y avait une bonne âme pour me compléter ce code, je lui en serais
infiniment reconnaissant.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
SAM ecrit ce qui suit en ce 01.10.2008 15:18 :

Voici correctif :



Salut SAM et merci pour cette correction.
Petit problème, toutefois : elle est destinée à n'autoriser que des
extensions de noms de domaine or ce sont les extensions des origines
géographiques des adresses Email qui doivent être contrôlées.
Par ailleurs, Sergio a peut-être raison à propos de la capacité des
robots à détourner ces scripts ?
Non ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Avatar
Olivier Miakinen
Le 02/10/2008 20:37, docanski a écrit :

[...] je n'ai jamais eu le temps de me
pencher vraiment sur une autre écriture de code, notamment en PHP qui
semble la meilleure solution.



Non pas la meilleure, mais la seule.

Avec un code JavaScript, tu ne feras qu'emm...bêter les Russes et les
Anglais honnêtes qui voudraient mettre leur vraie adresse de courriel
dans ton formulaire en interactif, sans la moindre protection contre les
robots spammeurs qui n'exécutent pas le JavaScript.

Le formulaire en question est évidemment traité dans ce langage mais ...
quel code ajouter pour faire ce que je veux ?



La première chose, ce serait de savoir précisément ce que tu veux. Je
n'ai pas compris ce que tu reprochais au code de SAM quand il teste
des noms de domaine de premier niveau alors que tu voulais apparemment
refuser des noms de domaine de premier niveau. Surtout, je ne sais pas
ce que tu appelles « extensions des origines géographiques des adresses
Email ».

La seconde chose, ce serait, à mon humble avis, de montrer non pas le
code du formulaire, mais le code qui *suit* le formulaire, c'est-à-dire
ce que tu veux faire des informations collectées. En particulier, si tu
t'en sers pour envoyer un courriel, il y a des vérifications anti-spam
qui sont bien plus importantes que de vérifier que le type n'a pas une
adresse en .ru !
Avatar
Olivier Miakinen
Le 01/10/2008 14:13, docanski a écrit :

if (document.all || document.getElementById)



Ah. Par ce test, on voit que tu t'apprêtes à utiliser soit la fonction
getElementById(), présente depuis quelques années sur tous les
navigateurs qui se respectent, soit le machin obsolète document.all.

Je m'attends donc à ce que dans le code qui suit il y ait des tentatives
d'utiliser l'un, avec rattrapage possible via l'autre.

{
for (i = 0; i < the_form.length; ++i)
{
var elem = the_form.elements[i]
if (elem.name && elem.name.substring(0, 4) == "req_")
{
if (elem.type && (elem.type=="text" || elem.type=="textarea" ||
elem.type=="password" || elem.type=="file") && elem.value=='')
{
alert(""" + element_names[elem.name] + "" est un champ requis
pour ce formulaire.")
elem.focus()
return false
}
}
}
}

return true
}



Et finalement, non. Non seulement tu n'utilises pas document.all, ce qui
est assez normal, mais tu n'utilises pas document.getElementById() non
plus. Pourquoi alors avoir testé leur présence ? Surtout, pourquoi ne
rien faire quand ils n'existent ni l'un ni l'autre, puisque tu n'en as
pas besoin ?
Avatar
SAM
Le 10/2/08 8:41 PM, docanski a écrit :
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
SAM ecrit ce qui suit en ce 01.10.2008 15:18 :

Voici correctif :



Salut SAM et merci pour cette correction.
Petit problème, toutefois : elle est destinée à n'autoriser que des
extensions de noms de domaine or ce sont les extensions des origines
géographiques des adresses Email qui doivent être contrôlées.



ce qui en clair veut dire ?

(pourquoi je pourrais pas avoir un compte en GB et t'écrire avec une
adresse en uk ?)

Par ailleurs, Sergio a peut-être raison à propos de la capacité des
robots à détourner ces scripts ?



Ils ne les détournent pas, ils ne les lisent simplement pas.
(essaie ta page avec le JS désactivé)

Non ?



Certainement !

Moi je tentais l'éclaircissement JavaScript.
(histoire de te remettre dans le bain ;-) )

--
sm
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen ecrit ce qui suit en ce 02.10.2008 23:11 :

La première chose, ce serait de savoir précisément ce que tu veux. Je
n'ai pas compris ce que tu reprochais au code de SAM quand il teste
des noms de domaine de premier niveau alors que tu voulais apparemment
refuser des noms de domaine de premier niveau. Surtout, je ne sais pas
ce que tu appelles « extensions des origines géographiques des adresses
Email ».



Il s'agit d'adresses Email du genre "" ou encore
"" .
En principe, seuls des visiteurs d'expression francophone (plus rarement
italienne) sont susceptibles de vouloir s'inscrire pour obtenir un
accès, le contenu de celui-ci étant francophone.

La seconde chose, ce serait, à mon humble avis, de montrer non pas le
code du formulaire, mais le code qui *suit* le formulaire, c'est-à-dire
ce que tu veux faire des informations collectées. En particulier, si tu
t'en sers pour envoyer un courriel, il y a des vérifications anti-spam
qui sont bien plus importantes que de vérifier que le type n'a pas une
adresse en .ru !



Le but de la manoeuvre est de bloquer toute possibilité d'introduire de
telles adresses Email dans la base de données. Il n'est donc pas prévu
de faire un suivi par envoi de courriel. Le principe est de renvoyer un
mot de passe aléatoire à la seule condition que l'adresse Email soit valide.
Je pense qu'il suffit alors de bloquer toute possibilité d'inscription
au moment de la saisie des données.
Ai-je tort ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen ecrit ce qui suit en ce 02.10.2008 23:17 :

Et finalement, non. Non seulement tu n'utilises pas document.all, ce qui
est assez normal, mais tu n'utilises pas document.getElementById() non
plus. Pourquoi alors avoir testé leur présence ? Surtout, pourquoi ne
rien faire quand ils n'existent ni l'un ni l'autre, puisque tu n'en as
pas besoin ?



Le contrôle passe par :

<form id="register" method="post" action="register.php?action=register"
onsubmit="this.register.disabled=true;if(process_form(this)){return
true;}else{this.register.disabledúlse;return false;}">

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
SAM ecrit ce qui suit en ce 02.10.2008 23:30 :

ce qui en clair veut dire ?



Voir ma réponse à Olivier.

(pourquoi je pourrais pas avoir un compte en GB et t'écrire avec une
adresse en uk ?)



D'expérience (bon, elle n'est pas universelle, hein ;-) ) , je constate
que tous les spams qui m'arrivent, que ce soit par l'intermédiaire de
formulaires ou en direct, utilsent l'extension .uk dans l'adresse
d'expéditeur, jamais vu de gb .

Moi je tentais l'éclaircissement JavaScript.
(histoire de te remettre dans le bain ;-) )



Je n'ai plus pied, suis obligé de me contenter du pediluve ;-)
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
1 2 3 4