Bonsoir,
J'ai fais un formulaire d'inscription qui fonctionne bien et je voudrais rajouter un captcha dont j'ai le code mais je ne parviens pas à faire cohabiter les deux.
Lorsque je fais un include, il ne m'affiche pas le code ...
Voici le code de la page inscription.php:
Et voici celui du captcha:
Que dois-je changer pour faire fonctionner le captacha ?
J'ai fais un formulaire d'inscription qui fonctionne bien et je voudrais rajouter un captcha dont j'ai le code mais je ne parviens pas à faire cohabiter les deux.
Lorsque je fais un include, il ne m'affiche pas le code ...
Voici le code de la page inscription.php:
<?php
session_start();
/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
// Initialisation du message de réponse
$message = null;
// Si le formulaire est envoyé
if (isset($_POST['inscr_pseudo'])) // AND isset($_POST['code']))
{
/* Récupération des variables issues du formulaire
Teste l'existence les données post en vérifiant qu'elles existent, qu'elles sont non vides et non composées uniquement d'espaces.
(Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable */
$prenom = (isset($_POST['inscr_prenom']) && trim($_POST['inscr_prenom']) != '')? Verif_magicquotes($_POST['inscr_prenom']) : null;
// Si $pseudo et $pass et $email différents de null
if(isset($pseudo,$pass,$email))
{
// Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string
// on ajoute des slashs pour éviter une faille SQL, et utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
$prenom_form = addslashes($_POST['inscr_prenom']);
$prenom = mysql_real_escape_string(htmlspecialchars($prenom_form));
$date_inscription = time();
// Requête pour compter le nombre d'enregistrements répondant à la clause : champ du pseudo de la table = pseudo posté dans le formulaire
$requete = "SELECT count(*) as nb FROM membre WHERE inscr_pseudo = '".$nom."'";
// Exécution de la requête
$req_exec = mysql_query($requete) or die(mysql_error());
// Création du tableau associatif du résultat
$resultat = mysql_fetch_assoc($req_exec);
// nb est le nom de l'allias associé à count(*) et retourne le résultat de la requête dans le tableau $resultat;
if ($resultat['nb'] == 0)
// Résultat du comptage = 0 pour ce pseudo, on peut donc l'enregistrer
{
// Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()
$insertion = " INSERT INTO membre( id, xxx,)
VALUES( '', xxx')";
// Exécution de la requête d'insertion
$inser_exec = mysql_query($insertion) or die(mysql_error());
/* Si l'insertion s'est faite correctement (une requête d'insertion retourne "true" en cas de succès, je peux donc utiliser
l'opérateur de comparaison strict '===' c.f. http://fr.php.net/manual/fr/language.operators.comparison.php) */
if ($inser_exec === true)
{
/* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
qui donne au visiteur la possibilité de se connecter. */
session_start();
$_SESSION['inscr_pseudo'] = $pseudo;
// A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.
$message = ' Votre inscription a bien été prise en compte.<br>
Vous allez recevoir votre confirmation d\'inscription avec votre mot de passe par email.<br>
<a href = "../../Pages/Form_Connexion.php">Cliquez ici pour vous connecter dès à présent</a>';
}
}
else
{ // Le pseudo est déjà utilisé
$message = 'Ce pseudo est déjà utilisé, changez-le.';
}
}
else
{ // Au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli
$message = 'Les champs "Pseudo" et "Mot de passe" doivent être remplis.';
}
}
?>
<div id = "inscription">
<form action = "#" method = "post">
<fieldset>
<legend>S'inscrire au site xxx</legend> <!-- Titre du fieldset -->
<fieldset><legend>INFORMATIONS PERSONNELLES</legend>
<p> <label for="inscr_prenom">Prénom :</label><br />
<input type="text" name="inscr_prenom" value="" id="inscr_prenom"/> </p>
<!-- Essayez de cliquer sur le texte "Votre pseudo" : vous allez voir que le curseur se place automatiquement dans la zone de texte correspondante.
On a "lié" le label avec sa zone de texte pour qu'on sache à quoi il correspond. -->
<p> <label for="inscr_nom_famille">Nom :</label><br />
<input type="text" name="inscr_nom_famille" value="" id="inscr_nom_famille"/> </p>
<p> <label for="inscr_sexe">Vous êtes plutôt :</label><br />
<select name="inscr_sexe" id="inscr_sexe">
<option value="Femme">Une femme</option>
<option value="Homme">Un homme</option>
<option value="Je ne sais pas">Je ne sais pas</option>
</select>
</p>
<p> <label for="inscr_lieu">Vous vivez :</label><br />
<select name="inscr_lieu" id="inscr_lieu">
<optgroup label="Europe">
<option value="allemagne">Allemagne</option>
<option value="france" selected="selected">France</option>
<option value="pakistan">Pakistan</option>
</optgroup>
</select>
</p>
<p> <label for="date_de_naissance">Votre date de naissance :</label><br />
<select name="jour_de_naissance" id="jour_de_naissance">
<option value="1">1</option>
<option value="31">31</option>
</select>
<select name="mois_de_naissance" id="mois_de_naissance">
<option value="1">Janvier</option>
<option value="12">Décembre</option>
</select>
<select name="annee_de_naissance" id="annee_de_naissance">
<option value="1930">1930</option>
<option value="2005">2005</option>
</select>
</p>
<p> <label for="inscr_pass">Choisissez votre mot de passe :</label><br />
<input type="password" name="inscr_pass" id="inscr_pass" /> </p>
<p> <label for="inscr_pass2">Retapez votre mot de passe :</label><br />
<input type="password" name="inscr_pass2" id="inscr_pass2" /> </p>
</fieldset>
<fieldset>
<p>
<legend>INFORMATIONS VIRTUELLES</legend> <!-- Titre du fieldset -->
<p> <label for="inscr_pseudo">Pseudonyme :</label><br />
<input type="text" name="inscr_pseudo" id="inscr_pseudo"/> </p>
<p> <label for="inscr_website">Site web ou blog :</label><br />
<input type="text" name="inscr_website" id="inscr_website"/> </p>
<p> <label for="inscr_email">Email :</label><br />
<input type="text" name="inscr_email" id="inscr_email"/> </p>
<p> <label for="inscr_email_2">Retapez votre email :</label><br />
<input type="text" name="inscr_email_2" id="inscr_email_2"/> </p>
<label for="inscr_auto_description">Décrivez-vous brièvement :</label> <br />
<textarea name="inscr_auto_description" rows="8" cols="45" id="inscr_auto_description">ICI</textarea>
<p> <label for="captcha"><?php include ('../Fonctions/Captcha-temp.php'); ?> Recopiez le code ci-dessus :</label><br />
<input type="text" name="captcha" id="captcha"/> </p>
<p>
<p><input type="submit" value="M'inscrire à xxx" id = "valider"></p>
<p><input type="reset" value="Effacer les champs" /></p>
</form></p>
</fieldset></p>
</fieldset>
<div id = "message"><?php if(isset($message)) echo $message ?></p>
</div>
Et voici celui du captcha:
<?php // On commence notre php...
session_start(); // on démare la session
$adresse = htmlspecialchars($_GET['pg']); // $adresse contient se qu'il y a dans l'adresse
if ( $adresse == "" ) // Rien dans l'adresse ? On fait donc se qu'il y a entre les { et }
{
?>
<img src="captcha-temp.php?pg=image" border="0" /><br/>Tape le code : <form method="post" action="captcha-temp.php?pg=verifie">
<input type="text" name="code" /><input type="submit" value="OK" /></form>
<?php
// On affiche l'image qui contient un code, avec le formualire, qui enclenche $adresse sur verifie et nous donne le code aussi [smile]
}
elseif ( $adresse == "verifie" AND $_POST['code'] != "" ) // Donc si il demande verifie
{
if ( $_SESSION['chaine'] == $_POST['code'] ) // Php garde le code du formulaire dans $_SESSION, y'a plus qu'a comparer avec se que a taper le type.
{
$msg = "Code valide"; // Sa saffiche, plus en bas, si c'est bon.
}
else
{
$msg = "Le code est erroné, veuillez recommencez"; // Je sais pas... [lol]
}
}
elseif ($adresse == "image" ) // Quand on demande d'afficher l'image
{
$chaine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'; // $Chaine Contient toute ces letres et chifres
$chaine = str_shuffle($chaine); // On mélange se qu'il y a dans $chaine et on le mais dans $chaine ;o)
$chaine = substr("$chaine", 0, 5); // On garde uniquement les 5 premierres lettres de $chaines, on les mais dans $ chaines [langue]
//$Chaines contient donc 5 caractaire majuscule entre A et Z, et/ou des chifres.
$_SESSION['chaine'] = $chaine; // On conserve $chaine dans la session, pour pouvoir conparer se que a taper le type plus tard
header ("Content-type: image/png"); // On dit que c'est un *.php mais considéré en image
$image = imagecreate(42,15); // On cree une image blanche de 42 L pat 15l.
$noir = imagecolorallocate($image, 0, 0, 0); // Un joli font noir
$blanc = imagecolorallocate($image, 255, 255, 255); // Et $blanc contient du blanc.
imagestring($image, 4, 1, 0, $chaine, $blanc); // On ecris sur l'image le code alléatoire, a partir 1 de largeur et 0 de longeur a partir du haux a gauche.
imagepng($image); // ;o)
}
// Maitenant, on peux afficher du texte
echo $msg; // On affiche $msg, si il y a pas de $msg, sa fait rien [langue]
?>
Que dois-je changer pour faire fonctionner le captacha ?