IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Script captcha dans mon formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 51
    Par défaut Script captcha dans mon formulaire
    Bonjour,
    Tout d'abord je dois avouer que je suis néophyte en la matière mais vous le verrez bien vite...
    Sur Internet (je ne sais plus où d'ailleurs...) j'ai récupéré un script de formulaire et un script de captcha.
    Mon formulaire de base fonctionne (excepté un manque sur le bouton radio) mais pas le captcha.
    Pourriez-vous m'indiquer ce que je dois faire pour que le captcha apparaisse et fonctionne ? Merci
    1. Ci-après le code du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    <?php
     
    // On vérifie si la fonction ini_set() a été désactivée...
    $desactive = ini_get('disable_functions');
    if (preg_match("/ini_set/i", "$desactive") == 0) {
    // Si elle n'est pas désactivée, on définit ini_set de manière à n'afficher que les erreurs...
    ini_set("error_reporting" , "E_ALL & ~E_NOTICE");
    }
     
    // Vérifier que le formulaire a été envoyé...
    if (isset($_POST['envoi'])) {
     
     
    //On commence une session pour enregistrer les variables du formulaire...
     
    session_start();
     
    $_SESSION['champ1'] = $_POST['champ1'];
    $_SESSION['champ2'] = $_POST['champ2'];
    $_SESSION['champ3'] = $_POST['champ3'];
    $_SESSION['champ4'] = $_POST['champ4'];
    $_SESSION['champ5'] = $_POST['champ5'];
    $_SESSION['champ6'] = $_POST['champ6'];
    $_SESSION['zone_email1'] = $_POST['zone_email1'];
     
    //Evaluation du bouton 1 ...
    switch($_POST['bouton1']) {
    case "oui":
    $_SESSION['bouton1'] = "oui";
    break;
    default:
    $_SESSION['bouton1'] = "";
    } // Fin du switch...
     
    //Enregistrement des zones de texte...
    $_SESSION['zone_texte1'] = $_POST['zone_texte1'];
    $_SESSION['zone_texte2'] = $_POST['zone_texte2'];
     
    // Définir l\'icone apparaissant en cas d\'erreur...
     
     
    // Définir sur 0 pour afficher un petit x de couleur rouge.
    // Définir sur 1 pour afficher l\'image d\'une croix rouge telle que celle utilisée dans l\'assistant
    // Si vous utilisez l\'option 1, l\'image de la croix rouge \'icone.gif\' doit se trouver dans le répertoire \'images\',
    // ce dernier devant se trouver au même niveau que votre formulaire...
    $flag_icone = 0;
     
    // On vérifie si $flag_icone est défini sur 0 ou 1...
    if ($flag_icone == 0) {
    $icone = "<b><font size=\"3\" face=\"Arial, Verdana, Helvetica, sans-serif\" color=\"#CC0000\">x</font></b>";
    } else {
    $icone = "<img src=\"images/icone.gif\"";
    }
     
    // Définir l'indicateur d'erreur sur zéro...
    $flag_erreur = 0;
    // N'envoyer le formulaire que s'il n'y a pas d'erreurs...
    if ($flag_erreur == 0) {					
     
    // Addresse de réception du formulaire
    $email_dest = "trucmuche@labas.com";
    $sujet = "Demande d'information via altenaconseils.com";
    $entetes ="MIME-Version: 1.0 \n";
    	$entetes .="From: Altena Conseils<trucmuche@labas.com>\n";
    	$entetes .="Return-Path: Altena Conseils<trucmuche@labas.com>\n";
    	$entetes .="Reply-To: Altena Conseils<trucmuche@labas.com>\n";
    	$entetes .="Content-Type: text/html; charset=iso-8859-1 \n";
    	$partie_entete = "<html>\n<head>\n<title>Formulaire</title>\n<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>\n</head>\n<body bgcolor=#FFFFFF>\n";
     
     
    //Partie HTML de l'e-mail...
    $partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Société = " . $_SESSION['champ1'] . "</font><br>\n";
    $partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Nom = " . $_SESSION['champ2'] . "</font><br>\n";
    $partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Prénom = " . $_SESSION['champ3'] . "</font><br>\n";
    $partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Ville = " . $_SESSION['champ4'] . "</font><br>\n";
    $partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Tél fixe = " . $_SESSION['champ5'] . "</font><br>\n";
    $partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Tél portable = " . $_SESSION['champ6'] . "</font><br>\n";
    $partie_zone_email .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Email = " . $_SESSION['zone_email1'] . "</font><br>\n";
    $partie_boutons .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">J'accepte d'être contacté(e) par email = " . $_SESSION['bouton1'] . "</font><br>\n";
    $partie_zone_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Activité = " . $_SESSION['zone_texte1'] . "</font><br>\n";
    $partie_zone_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Ma demande / Mon message = " . $_SESSION['zone_texte2'] . "</font><br>\n";
     
     
    					// Fin du message HTML
    					$fin = "</body></html>\n\n";
     
    					$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_listes . $partie_boutons . $partie_cases . $partie_zone_texte . $fin;
     
     
    					// Send the e-mail
    					if (@!mail($email_dest,$sujet,$sortie,$entetes)) {
    					echo("Envoi du formulaire impossible");
    					exit();
    					} else {
     
                        // Rediriger vers la page de remerciement
                        header("Location:http://www.altenaconseils.com/merci.html");
                        exit();
                      } // Fin else
    			    } // Fin du if ($flag_erreur == 0) {
    			} // Fin de if POST
    ?>
    <html>
    <head>  
     
    <script language="JavaScript">
     
     
    function verifSelection() {
     
     
    if (document.mail_form.champ2.value == "") {
    alert("Merci de saisir votre nom")
    return false
    } 
     
    if (document.mail_form.champ3.value == "") {
    alert("Merci de saisir votre prénom")
    return false
    } 
     
    if (document.mail_form.champ4.value == "") {
    alert("Merci de saisir votre ville")
    return false
    } 
     
    if (document.mail_form.zone_email1.value == "") {
    alert("Merci de saisir votre adresse courriel")
    return false
    }
     
    invalidChars = " /:,;'"
     
    for (i=0; i < invalidChars.length; i++) {	// does it contain any invalid characters?
    badChar = invalidChars.charAt(i)
     
    if (document.mail_form.zone_email1.value.indexOf(badChar,0) > -1) {
    alert("Votre adresse e-mail contient des caractères invalides. Veuillez vérifier.")
    document.mail_form.zone_email1.focus()
    return false
    }
    }
     
    atPos = document.mail_form.zone_email1.value.indexOf("@",1)			// there must be one "@" symbol
    if (atPos == -1) {
    alert('Votre adresse e-mail ne contient pas le signe "@". Veuillez vérifier.')
    document.mail_form.zone_email1.focus()
    return false
    }
     
    if (document.mail_form.zone_email1.value.indexOf("@",atPos+1) != -1) {	// and only one "@" symbol
    alert('Il ne doit y avoir qu\'un signe "@". Veuillez vérifier.')
    document.mail_form.zone_email1.focus()
    return false
    }
     
    periodPos = document.mail_form.zone_email1.value.indexOf(".",atPos)
     
    if (periodPos == -1) {					// and at least one "." after the "@"
    alert('Vous avez oublié le point "." après le signe "@". Veuillez vérifier.')
    document.mail_form.zone_email1.focus()
    return false
    }
     
    if (periodPos+3 > document.mail_form.zone_email1.value.length)	{		// must be at least 2 characters after the 
    alert('Il doit y avoir au moins deux caractères après le signe ".". Veuillez vérifier.')
    document.mail_form.zone_email1.focus()
    return false
    }
     
    nbreboutons1 = document.mail_form.bouton1.length
     
    	flag = 0
     
    		for (i = 0; i < nbreboutons1 ; i++) {
     
    			if (document.mail_form.bouton1[i].checked) {
     
    			flag = 1
     
    			}
     
    		}
     
     
     
    if (document.mail_form.zone_texte1.value == "") {
    alert("Merci de préciser votre domaine d'activité")
    return false
    } 
     
    if (document.mail_form.zone_texte2.value == "") {
    alert("Merci de préciser votre demande (devis, informations...)")
    return false
    } 
     
    } // Fin de la fonction
    </script>
    </head>
    <body>  
    <form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>" onSubmit="return verifSelection()">
      <div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong>Formulaire
        de contact</strong></font></div><br><table align="center" width="566" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td height="16"><div align="center">
      <font color="#CC0000" size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong><?php
    if ($erreur_champ1) {
    	  echo(stripslashes($erreur_champ1));
    	  } else {
    if ($erreur_champ2) {
    	  echo(stripslashes($erreur_champ2));
    	  } else {
    if ($erreur_champ3) {
    	  echo(stripslashes($erreur_champ3));
    	  } else {
    if ($erreur_champ4) {
    	  echo(stripslashes($erreur_champ4));
    	  } else {
    if ($erreur_champ5) {
    	  echo(stripslashes($erreur_champ5));
    	  } else {
    if ($erreur_champ6) {
    	  echo(stripslashes($erreur_champ6));
    	  } else {
    if ($erreur_email1) {
    	  echo(stripslashes($erreur_email1));
    	  } else {
    if ($erreur_bouton1) {
    	  echo(stripslashes($erreur_bouton1));
    	  } else {
    if ($erreur_texte1) {
    	  echo(stripslashes($erreur_texte1));
    	  } else {
    if ($erreur_texte2) {
    	  echo(stripslashes($erreur_texte2));
    	  } else {
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    } // Fin du else...
    ?>
        </strong></font>
        </div></td>
          </tr>
        </table>
    <p align="center"></p><table width="566" border="0" align="center"><tr>
          <td width="140"><div align="right"><font face="Verdana" size="2">Société</font></div></td>
    	  <td align="center" valign="middle" width="30">
          <?php
    	  if ($erreur_champ1) {
    	  echo($icone);
    	  }
    	  ?>
          </td>
          <td><input name="champ1" type="text" value="<?=stripslashes($_SESSION['champ1']);?>"></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="140"><div align="right"><font face="Verdana" size="2">Nom</font></div></td>
    	  <td align="center" valign="middle" width="30">
          <?php
    	  if ($erreur_champ2) {
    	  echo($icone);
    	  }
    	  ?>
          </td>
          <td><input name="champ2" type="text" value="<?=stripslashes($_SESSION['champ2']);?>"></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="140"><div align="right"><font face="Verdana" size="2">Prénom</font></div></td>
    	  <td align="center" valign="middle" width="30">
          <?php
    	  if ($erreur_champ3) {
    	  echo($icone);
    	  }
    	  ?>
          </td>
          <td><input name="champ3" type="text" value="<?=stripslashes($_SESSION['champ3']);?>"></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="140"><div align="right"><font face="Verdana" size="2">Ville</font></div></td>
    	  <td align="center" valign="middle" width="30">
          <?php
    	  if ($erreur_champ4) {
    	  echo($icone);
    	  }
    	  ?>
          </td>
          <td><input name="champ4" type="text" value="<?=stripslashes($_SESSION['champ4']);?>"></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="140"><div align="right"><font face="Verdana" size="2">Tél fixe</font></div></td>
    	  <td align="center" valign="middle" width="30">
          <?php
    	  if ($erreur_champ5) {
    	  echo($icone);
    	  }
    	  ?>
          </td>
          <td><input name="champ5" type="text" value="<?=stripslashes($_SESSION['champ5']);?>"></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="140"><div align="right"><font face="Verdana" size="2">Tél portable</font></div></td>
    	  <td align="center" valign="middle" width="30">
          <?php
    	  if ($erreur_champ6) {
    	  echo($icone);
    	  }
    	  ?>
          </td>
          <td><input name="champ6" type="text" value="<?=stripslashes($_SESSION['champ6']);?>"></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="140"><div align="right"><font face="Verdana" size="2">Email</font></div></td>
          <td width="30" align="center" valign="middle">
    	  <?php
    	  if ($erreur_email1) {
    	  echo($icone);
    	  }
    	  ?>
    	  </td>
          <td><input name="zone_email1" type="text" value="<?=stripslashes($_SESSION['zone_email1']);?>"></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="170"><div align="right"><font face="Verdana" size="2">J'accepte d'être contacté(e) par email</font></div></td>
          <td width="30" align="center" valign="middle">
    	  <?php
    	  if ($erreur_bouton1) {
    	  echo($icone);
    	  }
    	  ?>
    	  </td>
          <td><input type="radio" name="bouton1" value="oui"
     
          <font face="Verdana" size="2">oui</font></td></tr></table><table width="566" border="0" align="center"><tr>
          <td width="140" valign="top"><div align="right"><font face="Verdana" size="2">Activité</font></div></td>
          <td width="30" align="center" valign="top">
    	  <?php
    	  if ($erreur_texte1) {
    	  echo($icone);
    	  }
    	  ?>
    	  </td>
          <td><textarea name="zone_texte1" cols="45" rows="5"><?=stripslashes($_SESSION['zone_texte1']);?></textarea></td>
        </tr></table><table width="566" border="0" align="center"><tr>
          <td width="170" valign="top"><div align="right"><font face="Verdana" size="2">Ma demande / Mon message</font></div></td>
          <td width="30" align="center" valign="top">
    	  <?php
    	  if ($erreur_texte2) {
    	  echo($icone);
    	  }
    	  ?>
    	  </td>
          <td><textarea name="zone_texte2" cols="45" rows="10"><?=stripslashes($_SESSION['zone_texte2']);?></textarea></td>
        </tr></table><table width="566" border="0" align="center"><tr>
    <td valign="top"><div align="center"> 
              <input type="reset" name="Reset" value=" Effacer ">
     
              <input type="submit" name="envoi" value="Envoyer">
            </div></td></tr></table><div align="center"><input name="nbre_fichiers" type="hidden" id="nbre_fichiers" value=""></div></form>
    </body> 
    </html>
    2. Ci-après le code du captcha :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
    class capcha{
     
    	var $min;
    	var $max;
    	var $alphabet;
    	var $word;
    	var $num;
    	var $numletter;
     
    	function capcha(){
    		$this->min = 4;
    		$this->max = 6;
    		$this->alphabet = 'abcdefghijklmnopqrstuvwxyz';
    		$this->grain_de_sel = '6tIb90ZAS11';
    		$this->word = $this->createWord();
    		$this->num = $this->chooseNum();
    		$this->numletter = $this->num2letter();
    	}
     
    	function q(){
    		return 'Quelle est la '.$this->numletter.' lettre du mot '.$this->word.' ?';
    	}
     
    	function createWord(){
     
    		$len = rand($this->min,$this->max);
    		for($i=0;$i<$len;$i++){
    			$word[$i] = $this->alphabet[rand(0,strlen($this->alphabet)-1)];
    		}
    		return implode('',$word);
    	}
     
    	function chooseNum(){
    		return rand(1,strlen($this->word));
    	}
     
    	function num2letter(){
    		if($this->num == strlen($this->word)){
    			return 'dernière';
    		}
    		$array = array('1' => 'première','2' => 'deuxième','3' => 'troisième','4' => 'quatrième','5' => 'cinquième','6' => 'sizième','7' => 'septième','8' => 'huitième','9' => 'neuvième','10' => 'dixième');
    		if(isset($array[$this->num])){
    			return $array[$this->num];
    		}else{
    			return $this->num.'.ème';
    		}	
    	}
     
    	function r(){
    		return md5($this->grain_de_sel.$this->word[$this->num-1]);
    	}
    }
    ?>
    Voici l'adresse où mon formulaire est visible : www.altenaconseils.com/formulaire3.php
    Je suis arrivée à modifier le code pour que la zone "activité" soit plus petite.
    Par contre, il me reste encore un pb avec le bouton radio "oui" : je souhaiterais que la personne qui oublie de cocher la case ait un message d'erreur lui disant de cocher l'option oui et que le formulaire ne puisse être envoyé si la case n'est pas cochée. (alors que là le formulaire part même si la case n'est pas cochée...).

    Par ailleurs, pourriez-vous me dire si mon formulaire est suffisamment sécurisé ?

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Par défaut
    Bonjour Yvette
    Concernant ton problème de radio bouton il te suffit de rajouter un if dans ta fonction verifSelection()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (document.mail_form.bouton1.checked==false) {
    	alert("Merci d'accepter d'être contacté par email")
    	return false;
    }
    Voilà qui devrait résoudre ton problème car avec ton code et mon petit if en plus cela fonctionne parfaitement chez moi.
    Après reste le problème des gens qui désactive le javascript sur leur ordinateur et la toute ta vérification tombe à l'eau (heureusement il sont en minorités)
    Concernant le captcha je regarderais sa lorsque j'aurais un moment, car je ne me suis jamais penché sur la question.
    A ++

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Par défaut
    Je viens de trouver un truc sympa concernant le captcha et non contraignant pour les utilisateurs. Après à toi de voir si cela entre dans ce que tu veux mais tout ce qu'il y a de sur c'est que l'on est dans ce qu'il se fait de plus simple à mettre en oeuvre
    Citation du site http://www.fredboucher.com/posts/vie...a-infaillible-
    Rappel sommaire

    Le captcha est l'acronyme de l'anglais « Completely Automated Public Turing test to Tell Computers and Humans Apart », soit en français, « test public de Turing complètement automatique ayant pour but de différencier les humains des ordinateurs ».

    Il a été créé afin de lutter contre les messages envoyés par des robots à travers les formulaires web ou les commentaires de blogs.

    Des captchas, il en existe de toutes sortes, simples questions demandant une réponse, type "Quel est la couleur du cheval blanc d'Henri IV ?", aux captchas blindés, mais non accessibles, type captcha image avec des caractères alpha-numériques déformés, très souvent difficiles à lire et donc à reproduire.

    91% des commentaires laissés sur les blogs seraient du spam et 9 bits sur 10 du trafic email serait aussi du spam, rendant celui-ci l'ennemi public numéro 1 du web.

    Pourtant, une équipe de l'Université de Californie de Berkeley a réussi à mettre au point un robot capable de déjouer 92% des systèmes anti-spam, faisant de ceux-ci des filtres inutiles à court ou moyen terme.
    Notre système, simple et efficace

    Adepte des bonnes pratiques web, j'ai souvent cherché comment mettre en place un captcha simple mais efficace, accessible, et surtout qui ne rebute pas celui qui doit soumettre un formulaire, en lui demandant de répondre à une question parfois tordue, comme : "Quel est le le 8ième caractère mois 3 caractères de la phrase : Un petit bonhomme en mousse ?".
    Déjà qu'on a passé bien souvent du temps à remplir nos formulaires, voilà que la dernière question vous oblige en plus à remuer vos méninges, de quoi quitter le site, non ?

    Aussi je suis parti d'un constat simple :

    * si le spammeur est un humain, on pourra lui mettre tous les captchas du monde, ils ne seront d'aucun effet,
    * si le spammeur est un robot, il doit nécessairement obéir à une certaine logique,
    * cette logique, c'est celle qui conduit à priori un robot à remplir automatiquement tous les champs d'un formulaire.

    Avec cette idée, j'ai donc pensé à placer un champ caché à l'intérieur du formulaire, et tant qu'à faire à nommer ce champ 'email' afin de berner le robot.



    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="email" value="" />
    Ainsi, le robot devrait naturellement remplir ce champ, et s'il est configuré pour remplir plus facilement un champ nommé 'email', il va encore plus tomber dans le piège.

    Côté serveur, il ne reste plus qu'à traiter le champ 'email' et vérifier qu'il soit vide !

    S'il n'est pas vide, c'est nécessairement un robot puisqu'un visiteur (humain) ne doit pas voir (et donc remplir) ce champ.

    Jusqu'alors, cette méthode se révèle efficace, et je ne reçois aucun spam.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 51
    Par défaut
    Merci Djilow ! maintenant ça marche pour le bouton radio

    Pour le captcha je vais regarder ton lien... merci
    Mais ne serait-il pas possible de me dire à quel endroit je dois mettre le code du captcha que j'ai publié ? (au moins j'essaie de finir ce que j'ai commencé et je ne m'éparpille pas ds ts les sens...)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 51
    Par défaut
    Je viens de regarder ton lien pour le captcha.
    Mais Fred ne donne pas le script pour le traitement à faire par le serveur. Donc moi qui ne sait pas le faire, je suis bloquée.
    Le script seul " <input type="hidden" name="email" value="" /> " ne suffit pas à faire fonctionner l'astuce....
    Donc je reviens à la case départ...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    Par défaut
    bonjour,
    dans l'astuce donnée par Fred il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    if($_POST['email']<>""){
    header("location:index.php");
    }
    else{
    // traitement en base de données
    }

  7. #7
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Par défaut
    Voilà Yvette, notar viens de te donner le morceau de code qui te permet de tester si le champ est rempli. Dans le cas où il est rempli tu recharges ta page et dans l'autre cas tu fais ton envoi.
    Après je ne sais pas si l'alternative que je t'ai donné est la meilleure mais je pense tout de même que c'est à tester

    Merci Djilow ! maintenant ça marche pour le bouton radio
    Pas de problème c'est toujours un plaisir d'aider son prochain
    A ++

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/04/2007, 23h36
  2. Inserer un bouton "Browse" dans mon formulaire
    Par ecohen dans le forum Access
    Réponses: 6
    Dernier message: 21/09/2006, 18h27
  3. [MVC] Binding d'une proprieté 'societe' dans mon formulaire Utilisateur
    Par rlpg123 dans le forum Spring Web
    Réponses: 1
    Dernier message: 26/07/2006, 09h06
  4. [MySQL] Erreur dans mon formulaire
    Par rane dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/07/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo