Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Captcha dans livre d'or


Messages recommandés

Invité voyageur
Posté(e)

bonjour,

 

j'ai un livre d'or, je veux intégrer un captcha pour éviter les spams. le problème c'est que le script a l'air de bien fonctionner,lorsqu'on rempli les 3 champs (pseudo, message, recopier le mot)correctement, tout se passe bien, les messages sont enregistrés dans la base de données et s’affichent sur l’écran.Par contre si par exemple un utilisateur met un message qu'il fait "envoyer" mais qu'il oublie de remplir un des deux autres champs(pseudo ou recopier le mot) un message lui dit qu'il faut remplir tous les champs, mais le message qu'il a écrit est supprimé de sorte qu'il faut qu'il réécrive celui ci: c'est gênant si c'est un message très long.

 

donc que faut il modifier pour que le message subsiste, même si l'utilisateur a oublié de remplir un champ ?

 

j'espère avoir été assez clair dans mes explications.

 

voici les scripts, je travaille sur wamp en local:

 

voici le script de livreor.php

<!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>

<?php session_start(); ?>
<?php require('captcha.php'); ?>

<form method="post" action="livreor.php">

<p>Mon site vous plaît ? Laissez-moi un message !</p>
<p>
Pseudo : <input name="pseudo" /><br />
Message :<br />
<textarea name="message" rows="8" cols="35"></textarea><br />

<label for="captcha">Recopiez le mot : "<?php echo captcha(); ?>"</label>
<input type="text" name="captcha" id="captcha" /><br />

<input type="submit" value="envoyer" />
</p>
</form>


<?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");


if(!empty($_POST['captcha']) && !empty($_POST['pseudo']) && !empty($_POST['message']))
{
if($_POST['captcha'] == $_SESSION['captcha'])
{

$pseudo = mysql_real_escape_string(htmlspecialchars(stripslashes($_POST['pseudo'])));
$message = mysql_real_escape_string(htmlspecialchars(stripslashes($_POST['message'])));
$message = nl2br($message);
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
}

else

echo 'vous avez mal recopié le mot.';
}
else

echo 'Il faut remplir tous les champs.';


$nombreDeMessagesParPage = 20;
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
}
?>


<?php


if (isset($_GET['page']))
{
$page = $_GET['page'];
}
else 
{
$page = 1;
}

$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

while ($donnees = mysql_fetch_array($reponse))
{
echo '<p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p>';
}

mysql_close();
?>





</body>
</html>

 

voici mon fichier captcha.php

 

 

<?php
function motListe()
{
$liste = array('internet');
return $liste[array_rand($liste)];
}

function captcha()
{
$mot = motListe();
$_SESSION['captcha'] = $mot;
return $mot;
}
?>

Posté(e)

Simple : si, au chargement de ta page, tu as une valeur pour $_POST['pseudo'] et/ou $_POST['message'] il faut pré-remplir les champs correspondants.

De cette façon, tu conserves les saisies de ton utilisateur dans le cas où tu voudrais lui afficher un message d'erreur.

Pour le captcha je suppose qu'il est regénéré à chaque chargement de page donc inutile de préremplir le champ...

 

Plus compliqué : faire une validation Javascript du formulaire avant envoi. Pour des choses basiques comme vérifier qu'un champ n'est pas vide c'est très efficace et ça évite un aller-retour serveur (utiliser le réseau et les ressources du serveur pour se rendre compte qu'un champ est vide, c'est du gaspillage).

Invité voyageur
Posté(e)

bonjour,

 

désolé, mais je n'ai pas compris :( ,

 

concrètement au niveau du script, pourrais tu me dire ce que ça donnerait et ce qu'il faut mettre ?

 

merci

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...