integrer un captcha dans mon livre d'or

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : integrer un captcha dans mon livre d'or

Re: integrer un captcha dans mon livre d'or

par Ryle » 26 juil. 2012, 09:46

En l'occurrence, vous êtes ici sur un forum destiné aux développeurs php (confirmés ou débutants). Il va donc de soit que les réponses qui vous seront apportées sur ce site visent à vous aider à apprendre et à comprendre le langage pour vous permettre de réaliser vos propres scripts (captcha ou autre).

On peut tout à fait vouloir intégrer des fonctionnalités sur son site sans vouloir en apprendre le langage où en comprendre le fonctionnement et internet regorge de script prêt à l'emploi. En revanche, il faut savoir chercher et poser ses questions au bon endroit. Pas besoin de savoir comment on fabrique un livre pour pouvoir le lire, mais si vous cherchez un ouvrage chez un imprimeur, vous n'aurez clairement pas le même résultat que chez le libraire ;)

Re: integrer un captcha dans mon livre d'or

par lucanton » 26 juil. 2012, 01:19

Tous ces forums sont remplis de .....qui se prennent.........et finalement, on peut parcourir des dizaines de pages sur le sujet de " l'intégration" de captcha, et toutes les informations sont tronquées, parcellaires.... Un internet inutile.
On peut vouloir intégrer un " Captcha" sur son site, sans pour autant vouloir apprendre le "PHP".
Donc merci beaucoup à tous ces cons, dont vous êtes peut-être.

Re: integrer un captcha dans mon livre d'or

par moogli » 12 mai 2011, 15:00

ben il est clair, l'index captacha du tableau utiliser ligne 25 n'existe pas, en clair, tu a oublier un truc (session etc).


@+

Re: integrer un captcha dans mon livre d'or

par mrbean » 12 mai 2011, 12:38

re
qu'en est il alors de ce message que je reçois( voir plus haut) et que dois je faire ?

Re: integrer un captcha dans mon livre d'or

par moogli » 12 mai 2011, 11:57

@lusc : sisi il devrait être en 1er ligne, cela peut fonctionner ainsi si la bufferisation de sortie est active (dans ce cas rien n'est envoyer au navigateur avant du script donc tu fait un peu comme tu veut ;) )
Par contre je ne pense que cela soit le cas, mais plutôt une erreur + le fait que les erreurs ne doivent pas s'afficher (error_reporting différent de E_ALL).

@+

Re: integrer un captcha dans mon livre d'or

par lusc » 12 mai 2011, 11:36

Escuser moi mai par smple curiosité: c'est normale que dans ton script (au dessus) le "<?php session_start () ?>" ne soit pas en tête de page ???Juste curiosité

Re: integrer un captcha dans mon livre d'or

par mrbean » 12 mai 2011, 08:11

bonjour
et bien le message apparaît en haut de l'image, non ?
ou bien voulez vous autre chose ?
@+

Re: integrer un captcha dans mon livre d'or

par mrbean » 09 mai 2011, 15:23

Image

Re: integrer un captcha dans mon livre d'or

par macgawel » 09 mai 2011, 15:12

Tu peux le copier-coller, plutôt ?

Certains d'entre nous sont bloqués par le proxy de leur travail :oops:

[Edit] Je voulais dire copier-coller le texte du message d'erreur, pas l'image...

Re: integrer un captcha dans mon livre d'or

par mrbean » 09 mai 2011, 14:33

re
bon,je vais faire un effort pour vous , puisque vous vous donnez du mal pour moi :wink:

je viens de refaire un test avec les nouveaux éléments que vous m'avez donnés, voila le message d'erreur que j'obtiens:

http://www.play-files.net/images/130494 ... -titre.JPG

Re: integrer un captcha dans mon livre d'or

par moogli » 09 mai 2011, 12:22

pour ce qui est de ton dernier code, le problème vient du fait que la validation doit se faire avant l'affichage du formulaire et non après (donc la partie php en haut du fichier) d'ailleurs $pseudo et $message n'existant pas dans le formulaire tu devrais obtenir un message d'erreur à l'affichage de celui ci (au moins la 1ere fois).

pour ce qui est des messages d'erreurs ajoute : ini_set('display_error',1);error_reporting(E_ALL|E_STRICT); sur la première ligne de fichier php

A supposer aussi que tous ce code est dans le ficher test.php pour ne pas avoir de soucis (ce que je ne pense pas vu que tu utilise livreor.php depuis le debut !).

il suffit simplement de mettre le tous dans le même fichier et ça roule.
- en haut le code de validation du formulaire
- en dessous le code d'affichage du livre d'or (qui fonctionne)
- le formulaire.

@+

Re: integrer un captcha dans mon livre d'or

par mrbean » 09 mai 2011, 12:13

bonjour

j'ai fait de mon mieux, mais ça ne fonctionne pas.

de toute façon, ça ne fait rien, j'ai décidé de ne plus faire de livre d'or, comme cela le problème est réglé

merci de votre contribution

bonne journée

Re: integrer un captcha dans mon livre d'or

par macgawel » 09 mai 2011, 09:58

j'ai essayer ton script, mais ça ne marche pas du tout
Re.

C'est un peu court.
- Ca plante ? Message d'erreur ?
- Ca fonctionne mais le résultat ne correspond pas à ce qui est attendu ?
- Autre (préciser) ?

Tu as regardé le source de la page produite ?
Tu es sûr d'avoir respecté l'ordre (récupération des données, traitement, puis affichage du formulaire) ?

Re: integrer un captcha dans mon livre d'or

par mrbean » 05 mai 2011, 20:34

re

j'ai essayer ton script, mais ça ne marche pas du tout, mais c'est moi qui me suis trompé dans mon script voila ce que ça donne chez moi:
le script est il bon ?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
   <head>
       <title>Livre d'or</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 
       <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
    </head>
    <body>
 
   <form method="post" action="test.php">
       
        <p>Mon site vous plaît ? Laissez-moi un message !</p>
                <?php if ( !empty($erreur) ) echo "<p class='erreur'>$erreur</p>";?>
        <p>
            Pseudo : <input name="pseudo" value="<?php echo $pseudo;?>" /><br />
            Message :<br />
            <textarea name="message" rows="8" cols="35"><?php echo $message;?></textarea><br />
                       
        <label for="captcha">Recopiez le mot : "<?php echo '123'; ?>"</label>
                        <input type="text" name="captcha" id="captcha" /><br />
               
                <input type="submit" value="envoyer" />
        </p>
</form>
<?php session_start();
require('captcha.php');
// 0. Initialisation des variables
$erreur = '';
$pseudo = '';
$message = '';
$captcha = '';
// On ne fait ce traitement que si on a envoyé le formulaire =>
if ( !empty($_POST) ) {
        // 1. On vérifie que les champs sont renseignés
        foreach ($_POST as $var => $val) {
                if ( empty($val) ) {
                        $erreur .= 'Veuillez renseigner le champ '.$var.'<br />';
                }
                else {
                        // Un peu délicat : on met le contenu du champ dans la variable 'nom du champ'
                        // $$var => $<nom du champ>.
                        $$var = htmlspecialchars(stripslashes($val));
                }
        }
        // Si tous les champs sont renseignés ($erreur = '')
        // 2. On teste le captcha
        if ($erreur == '' && $_POST['captcha'] != $_SESSION['captcha'] ) {
                        $erreur .= "Le captcha n'est pas bon<br />";
        }
        // 3. SI tout est OK ($erreur = '') on fait l'insertion en base
        if ($erreur == '') {
                mysql_connect("localhost", "root", "");
                mysql_select_db("test");
                $message = nl2br($message);  
                mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
        }              
}      
?>

 
</body>
</html>

Re: integrer un captcha dans mon livre d'or

par macgawel » 05 mai 2011, 16:30

re
Alors après quelques nouveaux essais l'affichage se fait très bien, par contre j'ai fait un test sur un message très long, en me trompant sur le mot à recopier, le message :"le captcha n'est pas bon " apparaît , mais le message initial s'efface et je suis obligé de le refaire en entier. c'est gênant, est ce normal ?
Si tu "oublies" de remplir un des champs, tu as le même problème, non ?

En fait, ce qu'il faudrait faire c'est replacer ta page dans le bon sens. Ce que je ferais :
1. On Teste si on a reçu les informations du formulaire (tests sur POST etc.).
2. On affiche le formulaire. SI il y a eu une erreur (champ manquant, erreur de captcha, etc.) on affiche ce qui a été envoyé (le message et/ou le pseudo).
3. On affiche les messages.

En gros :
<?php session_start();
require('captcha.php');
// 0. Initialisation des variables
$erreur = '';
$pseudo = '';
$message = '';
$captcha = '';
// On ne fait ce traitement que si on a envoyé le formulaire =>
if ( !empty($_POST) ) {
	// 1. On vérifie que les champs sont renseignés
	foreach ($_POST as $var => $val) {
		if ( empty($val) ) {
			$erreur .= 'Veuillez renseigner le champ '.$var.'<br />';
		}
		else {
			// Un peu délicat : on met le contenu du champ dans la variable 'nom du champ'
			// $$var => $<nom du champ>. 
			$$var = htmlspecialchars(stripslashes($val)); 
		}
	}
	// Si tous les champs sont renseignés ($erreur = '')
	// 2. On teste le captcha
	if ($erreur == '' && $_POST['captcha'] != $_SESSION['captcha'] ) {
			$erreur .= "Le captcha n'est pas bon<br />";
	}
	// 3. SI tout est OK ($erreur = '') on fait l'insertion en base
	if ($erreur == '') {
		mysql_connect("localhost", "root", "");
		mysql_select_db("test");
		$message = nl2br($message);  
		mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
	}		
}	
?>
Pour ton formulaire :
<form method="post" action="test.php">
       
        <p>Mon site vous plaît ? Laissez-moi un message !</p>
		<?php if ( !empty($erreur) ) echo "<p class='erreur'>$erreur</p>";?>
        <p>
            Pseudo : <input name="pseudo" value="<?php echo $pseudo;?>" /><br />
            Message :<br />
            <textarea name="message" rows="8" cols="35"><?php echo $message;?></textarea><br />
                       
        <label for="captcha">Recopiez le mot : "<?php echo '123'; ?>"</label>
                        <input type="text" name="captcha" id="captcha" /><br />
               
                <input type="submit" value="envoyer" />
        </p>
</form>