Où insérer le script captcha dans mon formulaire ?

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
Yvette
Salamandre
Messages : 30
Inscription : 13 avr. 2008, 10:13

Où insérer le script captcha dans mon formulaire ?

Message par Yvette »

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 : Tout sélectionner

<?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 : Tout sélectionner

<?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 : http://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 :D
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: Où insérer le script captcha dans mon formulaire ?

Message par calimo »

Hello,
Plusieurs raisons qui font que tu n'as pas reçu de réponse :
- trop de questions. Pose une seule question par post, sinon le problème exact n'est pas clairement perçu :wink:
- trop de code. On est sensé en faire quoi ? Ne peux-tu pas affiner la définition de ton problème ?
- « je ne sais plus où d'ailleurs » est un problème. Les instructions figurent certainement là où tu as trouvé le code. En l'occurence il doit en manquer pas mal :wink:


Utilise plutôt http://recaptcha.net/ :wink:
Yvette
Salamandre
Messages : 30
Inscription : 13 avr. 2008, 10:13

Re: Où insérer le script captcha dans mon formulaire ?

Message par Yvette »

Merci d'avoir pris la peine de me répondre
J'ai donné ces infos de peur de ne pas me faire comprendre
Alors si tu veux bien juste répondre à la question "comment rajouter mon code captcha dans mon formulaire afin qu'il fonctionne", cela me rendrait un grand service. J'ai fourni le script du form et celui du captcha dans ce but : pour voir ce qu'il manque
calimo a écrit :- « je ne sais plus où d'ailleurs » est un problème. Les instructions figurent certainement là où tu as trouvé le code. En l'occurence il doit en manquer pas mal
Ben non, justement, il n'y avait aucune autre information, ça je m'en souviens bien

Merci :wink:

En ce qui concerne http://recaptcha.net/, je m'y étais inscrite mais dans toutes les solutions proposées, je me suis perdue et je n'ai pas compris laquelle je devais utiliser pour récupérer "simplement" le bout de code à rajouter dans mon formulaire et à quel endroit le rajouter...

Bonne journée
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: Où insérer le script captcha dans mon formulaire ?

Message par calimo »

Tu fais du PHP, donc il faut utiliser leur code php : http://recaptcha.net/plugins/php/ . Il faut télécharger la librairie (lien "download"), s'inscrire sur le site (pour recevoir les clés publiques et privées). Dans la page, le code à inclure correspond aux deux premières boites de code.

Si tu as des problèmes avec l'anglais, n'hésite pas à demander des précisions :wink:
Yvette
Salamandre
Messages : 30
Inscription : 13 avr. 2008, 10:13

Re: Où insérer le script captcha dans mon formulaire ?

Message par Yvette »

Hihi c'est pas avec l'anglais que j'ai un pb mais avec la technique. Je viens de re-regarder recaptcha et j'en ai le cerveau qui bouillonne :D
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07

Re: Où insérer le script captcha dans mon formulaire ?

Message par Asumbaa »

Salut,

Si tu ne t'en sors pas, le plus simple est d'ajouter à ton formulaire une question simple du type "de quelle couleur est le ciel ?" ou "combien font trois plus deux ?"
Ensuite dans le traitement du formulaire, tu vérifies que le visiteur a bien tapé "bleu" ou "cinq" (dans mes exemples). Si oui, tu traites, sinon tu passes.
Yvette
Salamandre
Messages : 30
Inscription : 13 avr. 2008, 10:13

Re: Où insérer le script captcha dans mon formulaire ?

Message par Yvette »

Merci Asumbaa pour cette astuce qui va pouvoir sécuriser mon formulaire en attendant que je comprenne comment fonctionne le captcha !!!

J'ai donc rajouté la question de sécurité.
Par contre, peux-tu m'aider pour le script de la vérif ?

J'ai commencé par mettre le code :

if (document.mail_form.zone_texte3.value == "") {
alert("Merci de répondre à la question de sécurité")
return false
}

Mais à la place de ce qui est écrit en rouge, je voudrais dire "si value est différent de bleu".
Quel est le code correspondant ?
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: Où insérer le script captcha dans mon formulaire ?

Message par calimo »

Différent de s'écrit « != », le point d'exclamation signifiant la négation. Donc tu écrirais value != "bleu".
Attention tout de même : le ciel n'est pas toujours bleu (noir la nuit, rouge/orange/violet matin et soir, gris lorsqu'il pleut, jaune foncé sur Vénus, peut-être rose sur Mars, turquoise sur Grébulon alpha (si je me souviens bien :wink: ) … sois prudente !)

Avant de continuer, pose-toi une question : pourquoi veux-tu une captcha ? Es-tu innondée de spam ? Sur de « petits » sites, ce n'est habituellement le cas, donc une captcha n'est pas vraiment nécessaire. Ou bien c'est juste pour t'amuser ? Pense aux visiteurs qui devront supporter ça… :roll:
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07

Re: Où insérer le script captcha dans mon formulaire ?

Message par Asumbaa »

Attention, la vérification doit se faire en PHP, pas seulement en Javascript. Sinon je peux t'inonder de spam rien qu'en désactivant JS ^^

Ça donnerait quelque chose du type (dans ta page de traitement)

Code : Tout sélectionner

if ($_POST['capcha'] == '' || strtolower ($_POST['capcha']) != 'bleu') {
// Traitement de l'erreur (typiquement on revient au formulaire)
}
else {
// OK, on envoit le mail
}
Pour la remarque judicieuse de Calimo, peut-être simplement rajouter un "quand il fait beau" :wink:
lpgc
Lézard à collerette
Messages : 259
Inscription : 16 juil. 2006, 01:02

Re: Où insérer le script captcha dans mon formulaire ?

Message par lpgc »

... tiens ! exactement ce qu'il me faut ... :D

( je cherche des infos pour intégrer un captcha à un "votre commentaire" )

et j'en ai trouvé 2 facile à intégrer :
http://www.codewalkers.com/c/a/GUI-Code ... HPCAPTCHA/
et
http://www.jpfox.fr/?post/2007/10/24/19 ... cha-en-php

tout les 2 fonctionnent très bien

le principe est également assez simple
la clé du captcha est mémorisée dans une variable serveur
$_SESSION['key'] = $ResultStr;// carry the data through session

et lorsque l'on envoie la FORM on vérifie que le code introduit correspond bien à la clé

Code : Tout sélectionner

      $key=$_SESSION['key'];
      $number = $_REQUEST['number'];
      if($number!=$key){
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité