Probleme pour afficher le Captcha image dans mon formulaire

Répondre
tortue33
le 25/04/2011 à 17:33
tortue33
Bonjour, voila plusieurs jours que je me bas avec mon code car je suis un débutant en php.
Je n'arrive pas a faire afficher l'image de ma question de mon captcha mais avec la question écrite ça marche nickel, le code source vient du site php-astux.info puis j'ai essayé de le modifier.
Voici mon code sur ma page: me_contacter.php

<?php // Systeme antispam
// on inclue le fichier des questions/reponses
require_once('antispam.php');

// on tire au sort une question
$nospam = NoSpamQuestion();
/*
********************************************************************************************
FORMULAIRE DE CONTACT EN PHP - http://www.php-astux.info - CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer a plusieurs a la fois, separez-les par une virgule
$destinataire = "Mon adresse Email";

// copie ? (envoie une copie au visiteur)
if (isset($_POST['mailcopy']))
{
$copie = "oui";
};
// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu ! Nous vous r&eacute;pondrons d&egrave;s que possible.";
$message_non_envoye = "L'envoi du mail a &eacute;chou&eacute;, veuillez r&eacute;essayer SVP.";

// Message d'erreur du formulaire
$message_formulaire_invalide = "V&eacute;rifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/

if (isset($_POST['envoi']))
{
$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

/*
* cette fonction sert a nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};

/*
* Cette fonction sert a verifier la syntaxe d'un email
*/
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};

// formulaire envoye, on recupere tous les champs.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$phone = (isset($_POST['phone'])) ? Rec($_POST['phone']) : '';
$website = (isset($_POST['website'])) ? Rec($_POST['website']) : '';
if ($website == 'http://') { $website = ''; }
$objet =(isset($_POST['objet'])) ? Rec($_POST['objet']) : '';
$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
// On va verifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si errone, soit il vaut l'email entre
$err_formulaire = (IsEmail($email)) ? false : true;

// n'oublions pas les 2 variables du captcha :
$code = (isset($_POST['code'])) ? strtolower($_POST['code']) : ''; // contient la reponse du visiteur
$nospam_question = (isset($_POST['nospam_question'])) ? $_POST['nospam_question'] : ''; // contient un nombre : le numero de la vraie reponse

// On demande la vraie reponse
$verif_nospam = NoSpamQuestion('ans', $nospam_question);

// on compare la 'vraie' reponse et celle du visiteur
if ($code != strtolower($verif_nospam['answer']))
{
// le formulaire s'arrete ici
echo '<p><font color="#ff0000">Vous n&rsquo;avez pas r&eacute;pondu correctement &agrave; la question&hellip;<a href="me_contacter.php">Retour au formulaire</a></font></p>';
}
else
{
// traitement du formulaire comme souhaite ...

if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
{
// les 4 variables sont remplies, on genere puis envoie le mail
$header = 'From: '.$nom.' <'.$email.'>' . "\r\n";
$header .= 'MIME-Version: 1.0'."\r\n";
$header .= 'Content-Type: text/plain; charset="UTF-8"'."\r\n";
$header .= 'Content-Transfer-Encoding: 7bit'."\r\n";
// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caracteres speciaux
$objet = str_replace("&hellip;","&#8230;",$objet);
$objet = str_replace("&euro;","&#8364;",$objet);
$objet = str_replace("&rsquo;","&#8217;",$objet);
$objet = str_replace("&#38;#039;","'",$objet);
$objet = str_replace("&#38;#8217;","'",$objet);
$objet = str_replace("&quot;",'"',$objet);
$objet = str_replace('<br>','',$objet);
$objet = str_replace('<br />','',$objet);
$objet = str_replace("&lt;","<",$objet);
$objet = str_replace("&gt;",">",$objet);
$objet = str_replace("&amp;","&",$objet);
$message = str_replace("&hellip;","&#8230;",$message);
$message = str_replace("&euro;","&#8364;",$message);
$message = str_replace("&rsquo;","&#8217;",$message);
$message = str_replace("&#38;#039;","'",$message);
$message = str_replace("&#38;#8217;","'",$message);
$message = str_replace("&quot;",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("&lt;","<",$message);
$message = str_replace("&gt;",">",$message);
$message = str_replace("&amp;","&",$message);

// rajout de telephone + URL
$rajout = '';
if ($phone != '')
{
$rajout .= $phone."\n";
}

if ($website != '')
{
$rajout .= $website."\n";
};

// on met un saut de ligne supplementaire
$message = $rajout."\n".$message;

// Envoi du mail
if (mail($cible, $objet, $message, $header))
{
echo '<p ALIGN=center><font color="#d612b5"><font size=5>'.$message_envoye.'</font></font></p>'."\n";
}
else
{
echo '<p ALIGN=center><font color="#ff0000">'.$message_non_envoye.'</font></p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p ALIGN=center><font color="#ff0000">'.$message_formulaire_invalide.' <a href="me_contacter.php">Vider le formulaire</a></font></p>'."\n";
$err_formulaire = true;
};
}; // fin du if ($code != strtolower($verif_nospam['answer']))
}; // fin du if (!isset($_POST['envoi']))

if (($err_formulaire) || (!isset($_POST['envoi'])))
{
// afficher le formulaire

echo ' <div style="color: rgb(102, 51, 255)"><br />Pour tous renseignements, suggestions, r&eacute;actions, et contributions vous pouvez nous contacter en remplissant ce formulaire :<br /><br /></div>'."\n";
echo '<form id="contact" method="post" action="">'."\n";
echo ' <fieldset><legend
style="color: rgb(214, 18, 181);">Coordonn&eacute;es requises :</legend>'."\n";
echo ' <p>'."\n";
echo ' <label
style="color: rgb(102, 51, 255);"for="nom">Nom complet :&nbsp;&nbsp;</label>'."\n";
echo ' <input type="text" id="nom" name="nom" size="25" value="'.stripslashes($nom).'" tabindex="1" />'."\n";
echo ' </p>'."\n";
echo ' <p>'."\n";
echo ' <label
style="color: rgb(102, 51, 255);"for="email">Adresse e-mail :</label>'."\n";
echo ' <input type="text" id="email" name="email" size="25" value="'.stripslashes($email).'" tabindex="2" />'."\n";
echo ' </p>'."\n";
echo ' </fieldset>'."\n";

echo ' <fieldset><legend
style="color: rgb(214, 18, 181);">Coordonn&eacute;es facultatives :</legend>'."\n";
echo ' <p>'."\n";
echo ' <label
style="color: rgb(102, 51, 255);"for="phone">T&eacute;l&eacute;phone :</label>'."\n";
echo ' <input type="text" id="phone" name="phone" size="12" value="'.stripslashes($phone).'" tabindex="3" />'."\n";
echo ' </p>'."\n";
echo ' <p>'."\n";
echo ' <label
style="color: rgb(102, 51, 255);"for="website">Site web:&nbsp;&nbsp;&nbsp;</label>'."\n";
echo ' <input type="text" id="website" name="website" size="40" value="http://"'.stripslashes($website).'" tabindex="4" />'."\n";
echo ' </p>'."\n";
echo ' </fieldset>'."\n";

echo ' <fieldset><legend
style="color: rgb(214, 18, 181);">Votre message :</legend>'."\n";
echo ' <p>'."\n";
echo ' <label
style="color: rgb(102, 51, 255);"for="objet">Objet :</label>'."\n";
echo ' <input type="text" id="objet" name="objet" size="50" value="'.stripslashes($objet).'" tabindex="5" />'."\n";
echo ' </p>'."\n";
echo ' <p>'."\n";
echo ' <label
style="color: rgb(102, 51, 255);"for="message">Message :<br><br/></label>'."\n";
echo ' <textarea id="message" name="message" tabindex="6" cols="80" rows="10">'.stripslashes($message).'</textarea>'."\n";
echo ' </p>'."\n";
echo ' </fieldset>'."\n";

echo ' <fieldset><legend
style="color: rgb(214, 18, 181);">Syst&egrave;me anti-robot (obligatoire) :</legend>'."\n";
echo ' <p ALIGN=center><font color="#6633FF"><label for="code">R&eacute;pondez EN LETTRES, en minuscule, en un seul mot (sans d&eacute;terminant) &agrave; la question suivante :<br><br /></label>'.$nospam['img'].'<input type="text" name="code" id="code" /><input type="hidden" id="img" name="img" value="'.$nospam['num'].'" /></font></p>'."\n";
echo ' </fieldset>'."\n";

echo ' <div style="text-align:center;"><font color="#d612b5"><input type="checkbox" id="mailcopy" name="mailcopy" />Cochez cette case si vous souhaitez recevoir une copie de cet e-mail.</div>'."\n";
echo ' <br><div style="text-align:center;"><input type="submit" name="envoi" value="Envoyer le formulaire !" /></div>'."\n";
echo '</form>'."\n";
};
?>


Mon code: antispam.php

<?php
/*
* NoSpamQuestion affiche une question pour la validation d'un formulaire ...
* $mode, mode question ou réponse par défaut tirage au sort de question {string}
* $answer, lors de la demande d'une réponse à la question numero tant ... {int}
*
* @returns array
*
* Ajouter une question :
* copier/coller ces lignes et remplir le contenu entre guillemets doubles :
*
* $array_pictures[$j]['num'] = $j; // ne pas changer cette ligne
* $array_pictures[$j]['question'] = "mettre ici la question (correspondant à l'image si vous utilisez une image)";
* $array_pictures[$j]['answer'] = "mettre ici la réponse à l'énigme";
* $j++; // ne pas oublier cette ligne dans la copie :-)
*
* C'est tout. Question suivante ? :-)
*
*/
function NoSpamQuestion($mode = 'ask', $answer = 0)
{
$array_pictures = array(); $j = 0;

$array_pictures[$j]['num'] = $j;
$array_pictures[$j]['question'] = "La multiplication de 4 par 4 donne ...";
$array_pictures[$j]['answer'] = "seize";
$j++;
$array_pictures[$j]['num'] = $j;
$array_pictures[$j]['question'] = "La multiplication de 2 par 2 donne ...";
$array_pictures[$j]['answer'] = "quatre";
$j++;
$array_pictures[$j]['num'] = $j;
$array_pictures[$j]['img'] = "C53345.jpg"; // ne pas mettre cette ligne si vous ne voulez pas utiliser d'image
$array_pictures[$j]['question'] = "Respecter les majuscules"; //mettre ici la question (correspondant à l'image si vous utilisez une image)
$array_pictures[$j]['answer'] = "FPBXV"; //mettre ici la réponse à l'énigme
$j++;

if ($mode != 'ans')
{
// on est en mode 'tirer au sort', on tire une image aléatoire
$lambda = rand(0, count($array_pictures)-1);
return $array_pictures[$lambda];
}
else
{
// on demande une vraie réponse
foreach($array_pictures as $i => $array)
{
if ($i == $answer)
{
return $array;
break;
};
};
}; // Fin if ($mode != 'ans')
};
?>





Merci pour votre aide, j'ai un peu honte de vous montrez ce code mais la je patauge car je suis vraiment mauvais.
Tortue
LupusMic
le 10/05/2011 à 09:58
LupusMic
Ne te dévalorise pas, ce n'est pas facile le développement web. Ceci dit, /a priori/, ce système n'est pas bon car il est prédictible.

Pour qu'un captcha soit bon, il faudrait qu'il soit totalement aléatoire.

Mais là il y a trop de code, tu devrais diviser tout ça pour déterminer où sont tes erreurs. Déjà, la fonction NoSpamQuestion me semble suspecte. Regarde là de plus près :)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours