[RESOLU] Proble captcha code toujours valide!

Eléphanteau du PHP | 12 Messages

04 févr. 2013, 18:57

Salut je dois avoir un prob dans mon code mon captcha est toujours valide quelqu un aurrait une idée svp?
<?php
/*
Template Name: Contact Form
*/
?>


 <?php 
//Le formulaire sera soumis,
	if(isset($_POST['submitted'])) {

//si l'attrape nigaud est vide
	if(trim($_POST['checking']) !== '') {
	$captchawarning = true;
	} else {

//si le nom est rentré correctement 
	if(trim($_POST['contactName']) === '') {
	$namewarning = '&nbsp; Indiquez votre nom&nbsp;:';
	$haswarning = true;
	} else {
	$name = trim($_POST['contactName']);
	}

//si l'email est rentré correctement 
	if(trim($_POST['email']) === '')  {
	$emailwarning = '&nbsp; Indiquez une adresse e-mail valide&nbsp;:';
	$haswarning = true;
	} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
	$emailwarning = '&nbsp; Adresse e-mail invalide!';
	$haswarning = true;
	} else {
	$email = trim($_POST['email']);
	}

//si il y a un commentaire	
	if(trim($_POST['comments']) === '') {
	$commentwarning = '&nbsp; Entrez votre message&nbsp;:';
	$haswarning = true;
	} else {
	if(function_exists('stripslashes')) {
	$comments = stripslashes(trim($_POST['comments']));
	} else {
	$comments = trim($_POST['comments']);
	}
	}
	
// //si l'utilisateur a entré un code correctement
[color=#FF0000]	if (trim($_POST['code']) === '') {
	$codewarning = '&nbsp; Aucun code&nbsp;:';
	$haswarning = true;
	$code = strtoupper($_POST['code']);
	if( md5($code) == $_SESSION['captcha'] ){
	$codewarning = '&nbsp; Erreur code&nbsp;:';
	$haswarning = true;
	} else {
	$code = trim($_POST['code']);
	}
	}
	[/color]
//et donc envoi du mail si aucune erreur
	if(!isset($haswarning)) {

	$emailTo = '[email protected]';
	$subject = 'Message de '.$name;
	$sendCopy = trim($_POST['sendCopy']);
	$body = "Nom: $name \n\nEmail: $email \n\nMessage: $comments";
	$headers = 'De : mon site <'.$emailTo.'>' . "\r\n" . 'Répondre à: ' . $email;
	
	mail($emailTo, $subject, $body, $headers);
	
	if($sendCopy == true) {
		$subject = 'Formulaire de contact';
		$headers = 'De : <[email protected]>';
		mail($email, $subject, $body, $headers);
	}
	$emailSent = true;
	}
	}
} ?>


<?php get_header(); ?>
<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/contact-form.js"></script>


<div id="me-contacter">
	<div id="forms-top"><h1>Formulaire de contact</h1></div>
	
		<?php if(isset($emailSent) && $emailSent == true) { ?>
				<div class="thanks">
					<h1>Merci, <?=$name;?></h1>
					<p>votre e-mail a &eacute;t&eacute; envoy&eacute; avec succ&egrave;s.</p>
					<div id="thanks-bot"></div>
				</div>

				<?php } else { ?>
				<?php if (have_posts()) : ?>
				<?php while (have_posts()) : the_post(); ?>
				<?php if(isset($haswarning) || isset($captchawarning)) { ?>
				<p class="erreur">Erreur veuillez recommencer<p>
				<?php } ?>

		<form action="<?php the_permalink(); ?>" method="post">
			<ol class="forms">
				
				<li><label for="contactName">Nom</label>
					<?php if($namewarning != '') { ?>
					<span class="warning"><?=$namewarning;?></span>
					<?php } ?>
					<input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="requiredField" />
				</li>

				<li><label for="email">E-mail</label>
					<?php if($emailwarning != '') { ?>
					<span class="warning"><?=$emailwarning;?></span>
					<?php } ?>
					<input type="text" name="email" id="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" class="requiredField email" />
				</li>

				<li class="textarea"><label for="commentsText">Message</label>
					<?php if($commentwarning != '') { ?>
					<span class="warning"><?=$commentwarning;?></span>
					<?php } ?>
					<textarea name="comments" id="commentsText" rows="20" cols="30" class="requiredField"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
				</li>
				
				<li class="code"><label for="code">Code</label>
					<?php if($codewarning != '') { ?>
					<span class="warning"><?=$codewarning;?></span>
					<?php } ?>
					<input type="text" name="code" id="code" value="<?php if(isset($_POST['code']))  echo $_POST['code'];?>" class="requiredField code" />
				</li>
				
				<li class="inline"><label for="sendCopy">Recevoir une copie du message</label><input type="checkbox" name="sendCopy" id="sendCopy" value="true"<?php if(isset($_POST['sendCopy']) && $_POST['sendCopy'] == true) echo ' checked="checked"'; ?> /></li>
				<li class="screenreader"><label for="checking" class="screenreader"></label><input type="text" name="checking" id="checking" class="screenReader" value="<?php if(isset($_POST['checking']))  echo $_POST['checking'];?>" /></li>
				<li class="buttons"><input type="hidden" name="submitted" id="submitted" value="true" /><button type="submit"><span>envoyer</span></button></li>
				
			</ol>
		</form>
	<div id="forms-bot"><h1></h1></div>
	<div id="captcha"><!-- Image dynamique -->		
		<img src="captcha.php" alt="Captcha" id="captcha" />						
	</div>
	<div id="captchareload"><!-- (JavaScript) Recharge l'image car elle n'existe pas dans le cache du navigateur, grâce à l'id généré  -->	
		<img src="reload.png" alt="Recharger l'image" title="Recharger l'image" style="cursor:pointer;position:relative;top:-7px;" onclick="document.images.captcha.src='captcha.php?id='+Math.round(Math.random(0)*1000)" /><!-- (JavaScript) Recharge l'image car elle n'existe pas dans le cache du navigateur, grâce à l'id généré  -->			
	</div>	
</div>
	
		<?php endwhile; ?>
	<?php endif; ?>
<?php } ?>

<?php get_footer(); ?>
Modifié en dernier par Hamel le 04 févr. 2013, 19:52, modifié 1 fois.

Eléphanteau du PHP | 12 Messages

04 févr. 2013, 18:59

et voici mon captcha! mais je pense pas que ca viens de lui!
<?php
/* ================
 *	INITIALISATION
 * ================ */

// Démarrage d'une session qui va stocker la valeur cryptée du code à recopier.
// session_start() se place toujours avant toute sortie vers la page web
session_start();

// Chemin absolu vers le dossier
if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/');

/* =======================
 *	FONCTIONS UTILITAIRES
 * ======================= */

/**
 * Fonction qui génère une chaîne de caractères aléatoires.
 * - strlen() retourne la taille de la chaine en paramètre
 * - mt_rand(a, b) génère un nombre aléatoire entre a et b compris : cette fonction est plus rapide que rand() de la bibliothèque standard
 * - $chars{0} retourne le premier caractère de la chaîne $chars, $chars{1} le deuxième ...
 *
 * @param $length La taille souhaitée pour le code
 * @return Le code à recopier par l'utilisateur
 */
function getCode($length) {
	$chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; // Certains caractères ont été enlevés car ils prêtent à confusion
	$code = '';
	// On prend $length fois un caractère de $chars au hasard
	for ($i=0; $i<$length; $i++) {
		$code .= $chars{ mt_rand( 0, strlen($chars) - 1 ) };
	}
	return $code; // Le code, par exemple : R5AQJ
}

/**
 * Fonction qui retourne une valeur aléatoire du tableau reçu en paramètre.
 * On l'utilise pour générer aléatoirement la couleur et la police de caratères
 *
 * @param Le tableau dont on extrait une valeur au hasard
 */
function random($tab) {
	return $tab[array_rand($tab)];
}

/* ==========================
 *	STOCKAGE DU HASH DU CODE
 * ========================== */

// Stockage de la chaîne aléatoire de 5 caractères obtenue
$code = getCode(5);

// Hashage de la chaine avec md5() et stockage dans la variable de session $_SESSION['captcha'].
$_SESSION['rand_code'] = md5($code);

/* =======================
 *	TRAITEMENT DE L'IMAGE
 * ======================= */

// Afin de traiter les caractères séparément, on les stocke un par un dans des variables.
$char1 = substr($code,0,1);
$char2 = substr($code,1,1);
$char3 = substr($code,2,1);
$char4 = substr($code,3,1);
$char5 = substr($code,4,1);

// glob() retourne un tableau répertoriant les fichiers du dossier 'fonts', ayant l'extension .ttf ( pas .TTF ! ).
// Vous pouvez donc ajouter autant de polices TrueType que vous désirez, en veillant à les renommer.
$fonts = glob('fonts/*.ttf');

// imagecreatefrompng() crée une image dynamique à partir d'un fichier PNG statique.
// Cela permet d'écrire sur l'image via PHP
$image = imagecreatefrompng('captcha.png');

// imagecolorallocate() retourne un identifiant de couleur.
// On définit les couleurs RVB qu'on va utiliser pour nos polices et on les stocke dans le tableau $colors[].
// Vous pouvez ajouter autant de couleurs que vous voulez.
$colors = array ( imagecolorallocate($image, 131, 154, 255),
				  imagecolorallocate($image,  89, 186, 255),
				  imagecolorallocate($image, 155, 190, 214),
				  imagecolorallocate($image, 255, 128, 234),
				  imagecolorallocate($image, 255, 123, 123) );

// imagettftext(image, taille police, inclinaison, coordonnée X, coordonnée Y, couleur, police, texte) écrit le texte sur l'image.
// Mise en forme de chacun des caractères et placement sur l'image.
imagettftext($image, 28, -10, 0, 37, random($colors), ABSPATH .'/'. random($fonts), $char1);
imagettftext($image, 28, 20, 37, 37, random($colors), ABSPATH .'/'. random($fonts), $char2);
imagettftext($image, 28, -35, 55, 37, random($colors), ABSPATH .'/'. random($fonts), $char3);
imagettftext($image, 28, 25, 100, 37, random($colors), ABSPATH .'/'. random($fonts), $char4);
imagettftext($image, 28, -15, 120, 37, random($colors), ABSPATH .'/'. random($fonts), $char5);

/* =========================
 *	FIN -> ENVOI DE L'IMAGE
 * ========================= */

// C'est le fichier dynamique captcha.php et non captcha.png qui est appelé pour afficher l'image,
// on envoie donc un en-tête HTTP au navigateur via header() pour qu'il considère
// que captcha.php est une image de type PNG.
header('Content-Type: image/png');

// .. et on envoie notre image PNG au navigateur.
imagepng($image);

// L'image ayant été envoyée, on libère toute la mémoire qui lui est associée via imagedestroy().
imagedestroy($image);
?>

Eléphanteau du PHP | 12 Messages

05 mars 2013, 15:47

Salut a tous!
Je reviens donner ma solution.
Il manquait simplement,

<?php session_start();

à mon formulaire!
Voili Voilou!