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/

4 réponses

1 2 3 4
Avatar
SAM
Le 10/8/08 11:48 AM, docanski a écrit :
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
SAM ecrit ce qui suit en ce 08.10.2008 10:29 :

... on va dire que ton formulaire est OK



Voui, là il n'y a aucun problème. Je ne désire pas le changer évidemment
mais simplement y ajouter une petite condition pour qu'il soit validé.


...
le formulaire est alors envoyé à une page de validation anti-robots



C'est une page de validation "tout court" : register.php qui constitue
le formulaire d'inscription et en même temps son traitement par l'action



Ben ... alors ... et 'loggin.php' qu'est-ce ?

Que fait 'register.php' quand tout est OK ?
- passe la main à un autre fichier ?
- enregistre en base de données ?

: onsubmit="this.register.disabled=true;if(process_form(this)){return
true;}else{this.register.disabledúlse;return false;}"



Meuh non !
ce JS ne sert qu'à invalider le bouton de submit dès qu'on l'a cliqué
(pour éviter de soumettre 2 fois de suite)
(pour obliger à attendre le retour du form)

et c'est là que tu demandes de répondre à 2 + 2
si c'est 4 alors ce n'est pas un robot et la suite peut être jouée,
sinon ... blocage.



Voui mais ici tu es donc parti sur un captcha. Cela suppose que j'ajoute
alors un champ au formulaire et qu'il soit analysé dans son propre seing
(voir ci-dessus).



oui ça peut aussi je présume.
(on ne doit plus être à une 30aine de lignes de plus dans ce fichier)

Et comme je ne suis pas (trop) têtu, j'accepterai sans sourciller mais
avec grand plaisir et une infinie reconnaissance :-) toute solution
"clef en main", de préférence.



alors tente de m'envoyer le zip de la totale
(les 2 fichiers et tous leurs fichiers liés par include dans le bon dossier)

Tu peux aussi tenter de mettre ce zip à dispo qque part.

Ma foi ...
on peut bien avoir une énième vérification ici seulement

if(!$banned_email)



Tu ne peux faire une vérification sur une Email *déjà* bloquée
puisqu'elle l'a été manuellement.



non elle n'a pas forcément été bloquée manuellement.
relis ton code : if { } else { }

Là je ne propose l'anti-robot que si elle n'a pas déjà été bloquée (par
le suffixe ou par la liste)

C'est en amont qu'il faut agir.



Je ne vois pas pourquoi.
Seule la vérification doit être faite en amont pour corriger l'url de
l'action du form.
Sinon il suffit que la vérification intervienne avant la sauvegarde en BdD.

La question anti-robot peut être posée n'importe quand.
Je profite seulement de la variable $banned_email pour la révéler



===== partie à mettre dans le head :

<?php

$reponse_robot = false;
$url = $_SERVER['PHP_SELF'];

// tableau des questions et leurs réponses :
$problemes = array(
array('q' => '2 x 2',
'r' => '4'
),
array('q' => 'couleur du cheval blanc d'Henri IV ?',
'r' => 'blanc'
),
array('q' => 'Le jour de Noël est en décembre le ',
'r' => '25'
),
array('q' => '2 + 3 =',
'r' => '5'
),
array('q' => '6 x 7 =',
'r' => '42'
)
// etc... à sa convenance, le nombre de sous-array qu'on veut
);

function antiRobot( $problemes) {
$probleme = array_rand($problemes); // tirage aléatoire index problemes
$question = $problemes[$probleme]['q']; // la question correspondante
echo "Répondez à la question suivante :<br>n $question";
echo "<input type='text' name='reponse'>";
echo "<input type='hidden' value='".$probleme."' name='probleme'>";
};

if( isset($_POST['reponse']) ) // si la réponse est reçue
// on est maintenant au stade
// où le form a été renvoyé
{
$reponse = $_POST['reponse']; // réponse reçue
$probleme = $problemes[$_POST['probleme']]['r']; // bonne réponse
if ( strtolower($reponse) == $probleme) // si réponse reçue est bonne
{ $reponse_robot = true; // ce n'est pas un robot,
$url = 'enregistrer.php'; // on pourra enregistrer
}
}
?>


===== pour la balise form :

<form action="<?php echo $url; ?>" method="POST" onsubmit="">




==== partie à mettre après le banissement via la liste
(on ne cherche plus les uk ru etc.)

<?php

$envoi = 'Valider';
if(!$banned_email) { // si le banissement a échoué

if( $reponse_robot ) // si la réponse est OK
{
echo "<h2>bonne reponse</h2>";
// on peut maintenant faire envoyer la totale
$envoi = "Sauvegarder";
}
else
{
if(isset($_POST['reponse']) & !empty($_POST['reponse']) ) {
echo "<h2>mauvaise reponse, recommencez</h2>n";
$envoi = 'Recommencez';
}
antiRobot( $problemes );
}
}
?>
<input type="submit" value"<?php echo $envoi ?>">
</form>


--
sm
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
SAM ecrit ce qui suit en ce 08.10.2008 13:39 :

Ben ... alors ... et 'loggin.php' qu'est-ce ?



Il permet de s'identifier lors d'une connexion, sur la base
d'identifiants préalablement enregistrés par le formulaire.

Que fait 'register.php' quand tout est OK ?



ceci :

- enregistre en base de données ?


...

Et comme je ne suis pas (trop) têtu, j'accepterai sans sourciller mais
avec grand plaisir et une infinie reconnaissance :-) toute solution
"clef en main", de préférence.



alors tente de m'envoyer le zip de la totale
(les 2 fichiers et tous leurs fichiers liés par include dans le bon
dossier)



Je fais ça ce soir ou demain car là, je vais être très occupé pour
quelques heures.

Tu peux aussi tenter de mettre ce zip à dispo qque part.



T'es une mère pour moi ;-) . Je te l'enverrai en Bal.

===== partie à mettre dans le head :


....

'tain ! C'est mortel ! :-)
Va falloir que j'ingurgite ça d'abord, l'insérer dans les pages
existantes et tester.
Bon, ça va me faire du taf avant de te faire l'envoi zip alors.
Merci, déjà !

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
Merci aux contributeurs qui sont intervenus dans ce fil mais je n'ai pas
pu et ne pourrai pas tester les différentes propositions émises dans
l'immédiat.
Désolé pour le retard mais un décès survenu dans la famille ...

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
Pascale
Olivier Miakinen <om+ écrivait
news:48e6189f$:

La meilleure solution que je te propose, c'est de demander aux visiteurs
qu'ils saisissent dans un champ la réponse à la question « combien font
2+2 », et que *en PHP* tu vérifies que la réponse est bien "4". Si un
jour tu t'aperçois que des spams passent quand même, tu remplaceras la
question par « combien font 2×3 », ou bien dès le départ tu prévois
quelques questions de base



Salut,

C'est la solution que j'utilise sur un de mes sites (la valeur des
nombres, comprise entre 0 et 10, est générée aléatoirement), et je n'ai
JAMAIS eu de problème.
J'avoue que je ne vois pas la nécessité de s'enquiquiner avec un javascript
et surtout de sanctionner les gens qui ont une adresse en .ru ou .uk.

--
Pascale
www.valinfo.org - Calendrier et annuaire de la vie associative locale
1 2 3 4