integrer un captcha dans mon livre d'or

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 mai 2011, 15:13

c'est gênant, est ce normal ?
oui.

si tu veut pré remplir le formulaire il faut utiliser l'attribut value des inputs et tester si le champ existe dans le tableau $_POST et le cas échéant l'afficher.

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 672 Messages

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>

Petit nouveau ! | 8 Messages

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>

Mammouth du PHP | 672 Messages

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) ?

Petit nouveau ! | 8 Messages

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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.

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

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

Mammouth du PHP | 672 Messages

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...
Modifié en dernier par macgawel le 09 mai 2011, 15:29, modifié 1 fois.

Petit nouveau ! | 8 Messages

09 mai 2011, 15:23

Image

Petit nouveau ! | 8 Messages

12 mai 2011, 08:11

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

Eléphanteau du PHP | 27 Messages

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é

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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).

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

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 ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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).


@+
Il en faut peu pour être heureux ......

lucanton
Invité n'ayant pas de compte PHPfrance

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.