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

captcha Olivier pour formulaire [long]

17 réponses
Avatar
docanski
Je m'adresse plus particulièrement à Olivier sur ce coup puisque le
problème se situe au niveau de l'insertion de son captcha dans un
formulaire existant.
J'en restranscris ici l'essentiel pour une meilleure compréhension :

<copie register.php>
> <?php
>
> define('PUN_ROOT', './');
> require PUN_ROOT.'include/common.php';
>
>
> // If we are logged in, we shouldn't be here
> if (!$pun_user['is_guest'])
> {
> header('Location: index.php');
> exit;
> }
>
> // Load the register.php language file
> require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php';
>
> // Load the register.php/profile.php language file
> require PUN_ROOT.'lang/'.$pun_user['language'].'/prof_reg.php';
>
> if ($pun_config['o_regs_allow'] == '0')
> message($lang_register['No new regs']);
>
>
> // User pressed the cancel button
> if (isset($_GET['cancel']))
> redirect('index.php', $lang_register['Reg cancel redirect']);
>
>
> else if ($pun_config['o_rules'] == '1' && !isset($_GET['agree']) && !isset($_POST['form_sent']))
> {
> $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register'];
> require PUN_ROOT.'header.php';
>
> ?>
> <div class="blockform">
> <h2><span><?php echo $lang_register['Forum rules'] ?></span></h2>
> <div class="box">
> <form method="get" action="register.php">
> <div class="inform">
> <fieldset>
> <legend><?php echo $lang_register['Rules legend'] ?></legend>
> <div class="infldset">
> <p><?php echo $pun_config['o_rules_message'] ?></p>
> </div>
> </fieldset>
> </div>
> <p><input type="submit" name="agree" value="<?php echo $lang_register['Agree'] ?>" /><input type="submit" name="cancel" value="<?php echo $lang_register['Cancel'] ?>" /></p>
> </form>
> </div>
> </div>
> <?php
>
> require PUN_ROOT.'footer.php';
> }
>
>
> else if (isset($_POST['form_sent']))
> {
> // Check that someone from this IP didn't register a user within the last hour (DoS prevention)
> $result = $db->query('SELECT 1 FROM '.$db->prefix.'users WHERE registration_ip=\''.get_remote_address().'\' AND registered>'.(time() - 3600)) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
>
> if ($db->num_rows($result))
> message($lang_register['User same IP']);
>
> $username = pun_trim($_POST['req_username']);
> $email1 = strtolower(trim($_POST['req_email1']));
>
> if ($pun_config['o_regs_verify'] == '1')
> {
> $email2 = strtolower(trim($_POST['req_email2']));
>
> $password1 = random_pass(8);
> $password2 = $password1;
> }
> else
> {
> $password1 = trim($_POST['req_password1']);
> $password2 = trim($_POST['req_password2']);
> }
>
> [...snip les différents autres contrôles... ]
>
>
> // Insert the new user into the database. We do this now to get the last inserted id for later use.
> $now = time();
>
> $intial_group_id = ($pun_config['o_regs_verify'] == '0') ? $pun_config['o_default_user_group'] : PUN_UNVERIFIED;
> $password_hash = pun_hash($password1);
>
> // Add the user
> $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, save_pass, timezone, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$email1.'\', '.$email_setting.', '.$save_pass.', '.$timezone.' , \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.get_remote_address().'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());
> $new_uid = $db->insert_id();
>
>
> [...snip les différents contrôles... ]
>
> // Must the user verify the registration or do we log him/her in right now?
> if ($pun_config['o_regs_verify'] == '1')
> {
> // Load the "welcome" template
> $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/welcome.tpl'));
>
> // The first row contains the subject
> $first_crlf = strpos($mail_tpl, "\n");
> $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
> $mail_message = trim(substr($mail_tpl, $first_crlf));
>
> $mail_subject = str_replace('<board_title>', $pun_config['o_board_title'], $mail_subject);
> $mail_message = str_replace('<base_url>', $pun_config['o_base_url'].'/', $mail_message);
> $mail_message = str_replace('<username>', $username, $mail_message);
> $mail_message = str_replace('<password>', $password1, $mail_message);
> $mail_message = str_replace('<login_url>', $pun_config['o_base_url'].'/login.php', $mail_message);
> $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);
>
> pun_mail($email1, $mail_subject, $mail_message);
>
> message($lang_register['Reg e-mail'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.', true);
> }
>
> pun_setcookie($new_uid, $password_hash, ($save_pass != '0') ? $now + 31536000 : 0);
>
> redirect('index.php', $lang_register['Reg complete']);
> }
>
>
> $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register'];
> $required_fields = array('req_username' => $lang_common['Username'], 'req_password1' => $lang_common['Password'], 'req_password2' => $lang_prof_reg['Confirm pass'], 'req_email1' => $lang_common['E-mail'], 'req_email2' => $lang_common['E-mail'].' 2');
> $focus_element = array('register', 'req_username');
> require PUN_ROOT.'header.php';
> ?>
>
> <?php
> session_start();
>
> // Si le formulaire est validé, on vérifie la réponse
> // avec les valeurs de référence stockées en session
> if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
>
> list($word, $index, $position, $question) = $_SESSION['captcha'];
> $answer = substr($word, $index - 1, 1);
> $passed = ( (string)$_POST['captcha'] === (string)$answer );
>
> }
>
> // Sinon on génère un nouveau test en prenant un mot au
> // hasard ainsi qu'une position de lettre dans ce mot
> else {
>
> // Chargement de la liste des mots
> $words = file('words.txt');
>
> // Sélection d'un mot au hasard
> $word = trim($words[rand(0, count($words) - 1)]);
>
> // Génération de l'index de la lettre à saisir
> $index = rand(1, strlen($word));
>
> // Transformation de l'index en toutes lettres
> if ( $index == strlen($word) ) $position = 'dernière';
> elseif ( $index == strlen($word) - 1 ) $position = 'avant-dernière';
> else {
> require_once 'nel.php';
> $position = enlettres($index, NEL_NIEME);
> if ( $position == 'premier' ) $position = 'première';
> }
>
> // Construction de la question
> $question = 'Quelle est '.( substr($position, 0, 1) == 'a' ? 'l\'' : 'la ' ).preg_replace('/[\w]/e', '"&#".ord("$0").";"', $position).' lettre du mot &laquo; '.preg_replace('/[\w]/e', '"&#".ord("$0").";"', $word).' &raquo; ?';
>
> // Stockage de la valeur en session
> $_SESSION['captcha'] = array($word, $index, $position, $question);
>
> }
> // Extraction des infos depuis la session et le résultat du formulaire
> list($word, $index, $position, $question) = $_SESSION['captcha'];
> $captcha = ( isset($_POST['captcha']) ) ? $_POST['captcha'] : '';
> ?>
>
> <div class="blockform">
> <h2><span><?php echo $lang_register['Register'] ?></span></h2>
> <div class="box">
> <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=false;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>
>
> <div class="inform">
> <fieldset>
> <legend><?php echo $lang_prof_reg['Localisation legend'] ?></legend>
> <div class="infldset">
> <label><?php echo $lang_prof_reg['Timezone'] ?>: <?php echo $lang_prof_reg['Timezone info'] ?>
> <br /><select id="time_zone" name="timezone">
> <option value="-12"<?php if ($pun_config['o_server_timezone'] == -12 ) echo ' selected="selected"' ?>>-12</option>
> [...snip les différentes options... ]
> <option value="14"<?php if ($pun_config['o_server_timezone'] == 14 ) echo ' selected="selected"' ?>>+14</option>
> </select>
> <br /></label>
> <?php
>
> $languages = array();
> $d = dir(PUN_ROOT.'lang');
> while (($entry = $d->read()) !== false)
> {
> if ($entry != '.' && $entry != '..' && is_dir(PUN_ROOT.'lang/'.$entry) && file_exists(PUN_ROOT.'lang/'.$entry.'/common.php'))
> $languages[] = $entry;
> }
> $d->close();
>
> // Only display the language selection box if there's more than one language available
> if (count($languages) > 1)
> {
>
> ?>
> <label><?php echo $lang_prof_reg['Language'] ?>: <?php echo $lang_prof_reg['Language info'] ?>
> <br /><select name="language">
> <?php
>
> while (list(, $temp) = @each($languages))
> {
> if ($pun_config['o_default_lang'] == $temp)
> echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.$temp.'</option>'."\n";
> else
> echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.$temp.'</option>'."\n";
> }
>
> ?>
> </select>
> <br /></label>
> <?php
>
> }
> ?>
> </div>
> </fieldset>
> </div>
> <div class="inform">
> <fieldset>
> <legend><?php echo $lang_prof_reg['Privacy options legend'] ?></legend>
> <div class="infldset">
> <p><?php echo $lang_prof_reg['E-mail setting info'] ?></p>
> <div class="rbox">
> <label><input type="radio" name="email_setting" value="0" /><?php echo $lang_prof_reg['E-mail setting 1'] ?><br /></label>
> <label><input type="radio" name="email_setting" value="1" checked="checked" /><?php echo $lang_prof_reg['E-mail setting 2'] ?><br /></label>
> <label><input type="radio" name="email_setting" value="2" /><?php echo $lang_prof_reg['E-mail setting 3'] ?><br /></label>
> </div>
> <p><?php echo $lang_prof_reg['Save user/pass info'] ?></p>
> <div class="rbox">
> <label><input type="checkbox" name="save_pass" value="1" checked="checked" /><?php echo $lang_prof_reg['Save user/pass'] ?><br /></label>
> </div>
> </div>
> </fieldset>
> </div>
>
>
> <?php if ( isset($passed) ) : if ( TRUE === $passed ) : ?>
> <p><strong>Bravo</strong>, vous avez trouvé la bonne réponse ! <a href="<?php echo $_SERVER['PHP_SELF']; ?>">Recommencer</a>.</p>
> <?php else : ?>
> <p><strong>Désolé</strong>, ce n'est pas la bonne réponse !</p>
> <?php endif; endif; ?>
> <?php if ( !isset($passed) || !$passed ) : ?>
>
> <div class="inform">
> <fieldset>
> <legend>Test de captcha</legend>
> <p style="font-weight:bold">
> <?php echo $question; ?>
> <input type="text" name="captcha" size="1" maxlength="1" value="<?php echo $captcha; ?>" />
> <input type="submit" value="Valider" />
> </p>
> </fieldset>
> </div>
>
> <?php endif; ?>
>
> <p><input type="submit" name="register" value="<?php echo $lang_register['Register'] ?>" /></p>
> </form>
> </div>
> </div>
> <?php
>
> require PUN_ROOT.'footer.php';
</copie register.php>

Il existe donc 2 "submit" dans ce formulaire : l'un pour vérifier si la
réponse au captcha est bonne et l'autre pour l'enregistrement de
l'inscription.
Le problème est que le "submit" du captcha, même si la réponse est
fausse, enregistre l'inscription, et si on l'ignore (puisqu'il n'y a pas
de condition obligatoire ... passque je sais pas faire :-( ), le
"submit" d'enregistrement accepte celui-ci sans broncher.
Il faudrait donc que le contrôle soit effectif (c'est évidemment le but
de l'insertion de ce captcha) et que le "submit" d'enregistrement ne
puisse être validé tant que ce contrôle n'est pas fait.
Je précise que le fichier texte comportant les mots et le fichier
nel.php ont été installés dans le même dossier que le formulaire dont le
nom est "register.php".

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
Avatar
Olivier Miakinen
Le 12/11/2008 17:34, docanski a écrit :
Je m'adresse plus particulièrement à Olivier sur ce coup puisque le
problème se situe au niveau de l'insertion de son captcha dans un
formulaire existant.



Ah, je suppose que c'est moi, ça.

J'en restranscris ici l'essentiel pour une meilleure compréhension :

<copie register.php>
[...]


</copie register.php>



Aaaargh !

Tu voudrais vraiment me faire lire un tel code, avec des lignes de trois
kilomètres, inséré sous forme de citation avec des caractères « > » à
chaque ligne ??? Je vais plutôt lire la phrase qui suit.

Il existe donc 2 "submit" dans ce formulaire : l'un pour vérifier si la
réponse au captcha est bonne et l'autre pour l'enregistrement de
l'inscription.



Je crois que ton problème est là : pourquoi deux « submit » ? Il te
faut un seul bouton de submit, qui envoie l'ensemble des données du
formulaire, y compris le champ texte censé contenir « 4 » si la question
est « combien font 2 et 2 ». Lorsque le serveur reçoit la requête, il
commence par vérifier que cette valeur est bien mise à 4, et seulement
dans ce cas il traite le reste du formulaire.

Le problème est que le "submit" du captcha, même si la réponse est
fausse, enregistre l'inscription, et si on l'ignore (puisqu'il n'y a pas
de condition obligatoire ... passque je sais pas faire :-( ), le
"submit" d'enregistrement accepte celui-ci sans broncher.
Il faudrait donc que le contrôle soit effectif (c'est évidemment le but
de l'insertion de ce captcha) et que le "submit" d'enregistrement ne
puisse être validé tant que ce contrôle n'est pas fait.



C'est bien pour cela qu'il faut un seul submit.

Cordialement,
--
Olivier Miakinen
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen ecrit ce qui suit en ce 12.11.2008 22:59 :

Ah, je suppose que c'est moi, ça.



Ben voui, puisque c'est ton oeuvre que je tente d'insérer ;-)

<copie register.php>
[...]


</copie register.php>



Aaaargh !

Tu voudrais vraiment me faire lire un tel code,



C'était pour te permettre de suivre le cheminement du formulaire, au cas
où tu estimerais que le code supplémentaire aurait eu sa place ailleurs
qu'à l'endroit où je l'ai placé.


Il existe donc 2 "submit" dans ce formulaire : l'un pour vérifier si la
réponse au captcha est bonne et l'autre pour l'enregistrement de
l'inscription.



Je crois que ton problème est là : pourquoi deux « submit » ?



Parce que j'imagine (à tort, apparemment) que le premier doit d'abord
faire le test avant de permettre l'activation du second. J'avais essayé
avec le second seul : dans ce cas, le test captcha n'est apparemment pas
fait puisque quand la réponse est mauvaise, l'inscription est quand même
validée.

Il te
faut un seul bouton de submit, qui envoie l'ensemble des données du
formulaire, y compris le champ texte censé contenir « 4 » si la question
est « combien font 2 et 2 ». Lorsque le serveur reçoit la requête, il
commence par vérifier que cette valeur est bien mise à 4, et seulement
dans ce cas il traite le reste du formulaire.



Apparemment non : j'ai fait plusieurs essais, sans succès, comme si ce
contrôle était totalement ignoré après l'envoi.
A toutes fins utiles, ce captcha est celui qui interroge sur la nature
et l'emplacement d'une lettre dans un mot dont la liste fait l'objet
d'un fichier texte.

Cordialement,



Itou de même,
--
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
SAM
Le 11/12/08 10:59 PM, Olivier Miakinen a écrit :
Le 12/11/2008 17:34, docanski a écrit :
Je m'adresse plus particulièrement à Olivier sur ce coup puisque le
problème se situe au niveau de l'insertion de son captcha dans un
formulaire existant.

<copie register.php>
[...]


</copie register.php>



Aaaargh !

Tu voudrais vraiment me faire lire un tel code, avec des lignes de trois
kilomètres, inséré sous forme de citation avec des caractères « > » à
chaque ligne ???



Non ?
Bien déçu je suis !
J'aurais peut-être pu apprendre ce que ce triturage pourrait bien tenter
de réaliser ... ?!

Déjà là :
require PUN_ROOT.'include/common.php';
c'est quoi ce common.php ?
Ensuite tout un tas de bazars
(sans doute pour tenter de traiter du multilingue ?)


Je crois que ton problème est là : pourquoi deux « submit » ? Il te
faut un seul bouton de submit, qui envoie l'ensemble des données du
formulaire, y compris le champ texte censé contenir « 4 » si la question
est « combien font 2 et 2 ». Lorsque le serveur reçoit la requête, il
commence par vérifier que cette valeur est bien mise à 4, et seulement
dans ce cas il traite le reste du formulaire.



Malheureusement ... comment s'y retrouve t-on dans ce truc faisant appel
à des fonctions qui en ont absentes ?

C'est bien pour cela qu'il faut un seul submit.



et que le "capitaine chat" devrait se trouver ici,
juste avant l'insertion en BdD (et dont il doit en manquer le début, me
semble-ce : la condition finale pour pouvoir continuer je ne la vois pas)

// Insert the new user into the database. We do this now to get the
last inserted id for later use.
$now = time();



Bon ça aurait été plus simple sans une telle usine, et que le code eût
eu été produit (et donc compris) par son utilisateur.

N'y aurait-il pas moyen à moyenner de demander aimablement au créateur
du code qu'il intègre lui-même un captcha ?

--
sm
Avatar
Olivier Miakinen
Le 12/11/2008 23:39, docanski a écrit :

Tu voudrais vraiment me faire lire un tel code,



C'était pour te permettre de suivre le cheminement du formulaire, au cas
où tu estimerais que le code supplémentaire aurait eu sa place ailleurs
qu'à l'endroit où je l'ai placé.



Désolé, c'est trop touffu pour moi.

Premièrement, mes éditeurs de texte sont en 80 colonnes, alors quand ça
dépasse je ne vois plus l'indentation. Deuxièmement, du texte cité dans
un article s'affiche chez moi en vert, ce qui me va bien quand ce sont
vraiment quelques lignes de citation, mais il ne faut pas dépasser plus
d'une dizaines de lignes d'affilée comme ça. Et surtout il serait plus
simple de commencer par fournir une URL où voir le code HTML généré, et
éventuellement un lien vers le code source complet.

Je crois que ton problème est là : pourquoi deux « submit » ?



Parce que j'imagine (à tort, apparemment) que le premier doit d'abord
faire le test avant de permettre l'activation du second.



Ben non. Lorsque tu fais la requête HTTP correspondant au second
formulaire, comment veux-tu qu'il sache qu'une requête a déjà été faite
par le même utilisateur pour le premier formulaire, et surtout que la
réponse était positive ? Il faut tout traiter en une seule fois.

J'avais essayé
avec le second seul : dans ce cas, le test captcha n'est apparemment pas
fait puisque quand la réponse est mauvaise, l'inscription est quand même
validée.



Bon. Je suppose que tu as déjà fait le traitement correspondant à
req_username, req_password, req_email, et ainsi de suite, et que le code
PHP correspondant est du genre :

{
...
faire quelque chose avec $_REQUEST['req_username'] etc.
...
}

Eh bien avec le captcha, ton code sera tout simplement :

if ($_REQUEST['captcha'] == '4') {
...
faire quelque chose avec $_REQUEST['req_username'] etc.
...
} else {
... réponse indiquant que la captcha n'est pas bon...
}
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen ecrit ce qui suit en ce 13.11.2008 00:36 :

Désolé, c'est trop touffu pour moi.

Premièrement, mes éditeurs de texte sont en 80 colonnes,



Tu n'utilises pas un éditeur spécialisé ?
En libre, il y a DevPHP qui me paraît très bien. C'est avec lui que j'
*essaye* de comprendre le cheminement des scripts.

Et surtout il serait plus
simple de commencer par fournir une URL où voir le code HTML généré,



Le code généré est visible à partir de l'affichage du formulaire
d'inscription sur http://mycorance.free.fr/forum/index.php : suivre le
lien d'inscription puis valider la première page des règles à accepter.
Si tu préfères, je peux reproduire ici ce code.

éventuellement un lien vers le code source complet.



http://mycorance.free.fr/forum/register.php

Bon. Je suppose que tu as déjà fait le traitement correspondant à



Heu ... perso, je n'ai rien fait : il s'agit toujours du code de Rickard
Andersson pour PunBB.

req_username, req_password, req_email, et ainsi de suite, et que le code
PHP correspondant est du genre :
{
...
faire quelque chose avec $_REQUEST['req_username'] etc.
...
}



Ce n'est malheureusement pas aussi simple que ça :-(
Si ce l'était, je pourrais tenter de recopier servilement le code en
modifiant les variables pour le captcha. Ménon, il fait que m'énerver en
faisant appel à d'autres scripts sur d'autres pages PHP.
Et comment je n'entrave que dalle à PHP, il est évident que ça
m'embrouille encore davantage.

Eh bien avec le captcha, ton code sera tout simplement :

if ($_REQUEST['captcha'] == '4') {



Si seulement ...

...
faire quelque chose avec $_REQUEST['req_username'] etc.



Ben là, tu vois, je suis déjà largué. Car "faire quelque chose ..." me
laisse déjà au bord du chemin, désolé.

(je l'savais qu'il aurait été plus simple de refuser toute inscription
avec une adresse Email terminée en .ru ou .uk :-( )

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 13/11/2008 12:35, docanski a écrit :

(je l'savais qu'il aurait été plus simple de refuser toute inscription
avec une adresse Email terminée en .ru ou .uk :-( )



Dans ce cas, montre-moi juste le code servant à refuser une adresse de
courriel terminée en .ru, je me charge de le remplacer par du code
servant à tester le captcha. :)
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen ecrit ce qui suit en ce 13.11.2008 14:13 :

Dans ce cas, montre-moi juste le code servant à refuser une adresse de
courriel terminée en .ru, je me charge de le remplacer par du code
servant à tester le captcha. :)



T'es vache, hein ! ;-)

Mébon, Stephane avait donné un début de "possibilité" de code le 3/10
mais je n'ai plus insisté dans ce sens puisque tu estimais que cette
méthode n'était pas la bonne.
Note que jusqu'à présent, seules les inscriptions avec une adresse .ru
ou .uk ou encore provenant de gmail sont des inscriptions bidon. Cela se
remarque à deux caractéristiques : le réglage du fuseau horaire n'est
jamais effectué (reste sur -11) et les noms n'ont aucun sens ou sont
même parfois une succession de lettres aléatoires.
--
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
SAM
Le 11/13/08 12:35 PM, docanski a écrit :

(je l'savais qu'il aurait été plus simple de refuser toute inscription
avec une adresse Email terminée en .ru ou .uk :-( )



Bon ... et le plug-in tout fait ?
<http://www.punres.org/desc.php?pidP3>
par exemple

il y en a peut-être d'autres ?
<http://punbb.informer.com/extensions/>
voir "pun_antispam v1.2"

--
sm
Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
SAM ecrit ce qui suit en ce 13.11.2008 14:45 :

Bon ... et le plug-in tout fait ?
<http://www.punres.org/desc.php?pidP3>
par exemple



Je ne connaissais pas et pour cause : ma compréhension de l'angliche est
tellement faible que je me suis toujours tourné vers les ressources en
français. Bon, je vais tenter de m'y coller parce que ça a l'air de
répondre à mes besoins.

il y en a peut-être d'autres ?
<http://punbb.informer.com/extensions/>
voir "pun_antispam v1.2"



Après avoir digéré le premier, j'irai voir ce deuxième. Merci pour les URL !

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 13/11/2008 12:35, docanski a écrit :

Premièrement, mes éditeurs de texte sont en 80 colonnes,



Tu n'utilises pas un éditeur spécialisé ?



Spécialisé ou pas, et même si j'avais des écrans de 8000 pixels de
large, je trouve que 80 caractères par ligne c'est bien assez. Dans mes
programmes je vais toujours à la ligne avant d'atteindre cette limite,
à un endroit où cela a du sens (et non pas pile au 79e caractère), et
bien sûr j'indente en fonction.


Le code généré est visible à partir de l'affichage du formulaire
d'inscription sur http://mycorance.free.fr/forum/index.php : suivre le
lien d'inscription puis valider la première page des règles à accepter.
Si tu préfères, je peux reproduire ici ce code.



Merci, j'ai trouvé le code généré : il est à
http://mycorance.free.fr/forum/register.php?agree=J%27accepte

éventuellement un lien vers le code source complet.



http://mycorance.free.fr/forum/register.php



Ça, c'est aussi du code généré. ;-)

Heu ... perso, je n'ai rien fait : il s'agit toujours du code de Rickard
Andersson pour PunBB.



Bon, allez, j'ai enregistré ton premier message dans un fichier texte,
supprimé les « > » de début de lignes, et essayé de lire cet extrait.
Je pense que tu peux insérer le code qui va bien entre l'accolade
ouvrante et le commentaire ci-dessous :

-----------------------------------------------------------------
else if (isset($_POST['form_sent']))
{
// Check that someone from this IP didn't register [...]
-----------------------------------------------------------------

Le code en question sera par exemple :

-----------------------------------------------------------------
else if (isset($_POST['form_sent']))
{
if (!isset($_POST['captcha']) || $_POST['captcha'] != 4) {
// Si l'utilisateur n'a pas répondu à la question ou s'il
// ne sait pas calculer.
message('Erreur : 2 + 2 = 4');
}
// Check that someone from this IP didn't register [...]
-----------------------------------------------------------------

Bien entendu, il faut avoir inclus quelque part dans le formulaire, pas
très loin du <input type="text" name="req_username" ... />, un <input
type="text" name="captcha" ... />, accompagnant la question de combien
font 2 et 2.

Points à vérifier, car je n'ai pas pu voir le code correspondant :
1) Vérifier que la fonction message() se termine bien par un exit() ou
un die(), même si le comportement en cas de deux requêtes successives
avec la même adresse IP le laisse penser.
2) Regarder si tu ne peux pas mettre les messages (question + réponse)
dans le tableau $lang_register, pour internationalisation.
1 2