captcha formulaire de contact

hamel-d
Invité n'ayant pas de compte PHPfrance

02 févr. 2013, 18:23

Salut a tous

Je viens pour la première fois sur ce forum, débutant en php, je réalise un thème pour mon blog (wordPress) et je bute sur le formulaire de contact.
J' ai réalisé un captcha mais je n'arrive pas a l'intégrer dans mon formulaire.

Mon formulaire ressemble a ça :

Nom:
Email:
Message:
Validation code captcha:
recevoir une copie du mail:
Envoyer:

Je précise, mon formulaire contiens une fenêtre cacher (pot de miel)
et j'aimerais aussi rajouter un upload pour pièce jointe(mais là...je bug complet!)
C'est pourquoi je viens vous demander conseil!

voici mon code:
__________________________________________________________________________________________________________________________________________________________
//contact-form.php

 <?php
 
session_start();
 
//Si le formulaire est soumis

	if(isset($_POST['submitted'])) {

//Vérifiez si le champ captcha pot de miel a été rempli

	if(trim($_POST['checking']) !== '') {
	$captchawarning = true;
	} else {

//Assurez-vous que le champ nom n'est pas vide

	if(trim($_POST['contactName']) === '') {
	$namewarning = '&nbsp; Indiquez votre nom&nbsp;:';
	$haswarning = true;
	} else {
	$name = trim($_POST['contactName']);
	}

//Assurez-vous que l'adresse email est valide
 
	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']);
	}

//Assurez-vous que les commentaires ont été saisies
	
	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']);
	}
	}
	
	
//Assurez-vous que le code du captcha ont été saisies et correct

	if(trim($_POST['code']) === '') {
	$codewarning = '&nbsp; Manque-t-il le code?&nbsp;:';
	$haswarning = true;
	} else if(trim($_POST['code']) && $code != $_SESSION['rand_code']) {
	$codewarning = '&nbsp; Mauvais code rejouez!&nbsp;:';	
	$haswarning = true;	
	} else {
	$code = trim($_POST['code']);
	}
	
	

//S'il n'y a pas d'avertissement, envoyer l'e-mail

	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><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>
				
					<div id="captcha">
				        <p><img src="captcha.php"/></p>
				        </div>	 

			
				<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>Pour l'envoi de pi&egrave;ce, jointe je vous ferai parvenir mon e-mail.</h1></div>
</div>
	
		<?php endwhile; ?>
	<?php endif; ?>
<?php } ?>

<?php get_footer(); ?>

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//captcha.php

<?php

session_start();

$string = '';

for($i=0;$i<5;$i++)
{
    $string .= chr(rand(97,122));
}

$_SESSION['rand_code'] = $string;

$dir = 'fonts/';

$image = imagecreate(150,70);
$black = imagecolorallocate($image, 0,0,0);
$color = imagecolorallocate($image, 255,150,0);
$white = imagecolorallocate($image, 255,255,255);

imagefilledrectangle($image,0,0,150,70,$white);
imagettftext($image,20,3,10,30,$color,$dir.'slant.ttf',$_SESSION['rand_code']);

header('content-type: image/png');
imagepng($image);



?>

hamel-d
Invité n'ayant pas de compte PHPfrance

02 févr. 2013, 18:40

Je rajoute le "contact-form.js" je précise que "contact-form.js" est situé dans mon dossier "js" qui ce situ racine de mon thème et que "captcha.php" est a la racine de mon thème aussi!

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$(document).ready(function() {
$('form#contactForm').submit(function() {
$('form#contactForm .error').remove();
var hasError = false;
$('.requiredField').each(function() {
if(jQuery.trim($(this).val()) == '') {
var labelText = $(this).prev('label').text();
$(this).parent().append('<span class="error">You forgot to enter your '+labelText+'.</span>');
hasError = true;
} else if($(this).hasClass('email')) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if(!emailReg.test(jQuery.trim($(this).val()))) {
var labelText = $(this).prev('label').text();
$(this).parent().append('<span class="error">You entered an invalid '+labelText+'.</span>');
hasError = true;
}
}
});
if(!hasError) {
$('form#contactForm li.buttons button').fadeOut('normal', function() {
$(this).parent().append('<img src="/images/loading.gif" alt="Loading&hellip;" height="31" width="31" />');
});
var formInput = $(this).serialize();
$.post($(this).attr('action'),formInput, function(data){
$('form#contactForm').slideUp("fast", function() {
$(this).before('<p class="thanks"><strong>Thanks!</strong> Your email was successfully sent. I check my email all the time, so I should be in touch soon.</p>');
});
});
}

return false;

});
});

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

02 févr. 2013, 19:14

salut,

quel est le problème exactement ?

tu n'arrive à valider le captcha ? (ajout une condition entre la valeur du formulaire et la valeur en session).

Pour l'upload AB propose une classe permettant de te simplifier la tache, dans la section "vos contributions".



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

hamel-d
Invité n'ayant pas de compte PHPfrance

02 févr. 2013, 19:31

Mon captcha ne s’affiche pas! Probleme avec l'url peut etre?
Par contre, quand je le met en css [background-image:url(captcha.php)], je le vois, mais la variable de code n'est pas la même donc impossible a valider

hamel-d
Invité n'ayant pas de compte PHPfrance

02 févr. 2013, 19:55

salut,

quel est le problème exactement ?

tu dis ajoute une condition entre la valeur du formulaire et la valeur en session, mais a quel endroit et la quel?

Pour l'upload AB je regarde ca, Merci!

Excuse moi je suis vraiment novice, ça fait deux semaine que j’apprends le php sans même connaitre le html.
Donc je pars de 0 et en 2 semaine c'est la première fois que je pose une question!
Merci pour ton aide!

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

02 févr. 2013, 23:26

ton code est trop long (et sans colorisation c'est fatiguant à lire ;) ).

Ton code vérifie si le formulaire est posté.
A partir de la tu sais à quel endroit du code il faut vérifier la saisie du captcha.

Cette vérification est similaire au autre, donc dans le premier if(isset($_POST['submitted'])) il faut vérifier le champs.

Quand à l'affichage, as tu vérifié si le fichier s'affiche correctement dans un navigateur (avec simplement http://url/captacha.php ?).


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

Eléphanteau du PHP | 12 Messages

03 févr. 2013, 03:27

désolé pour la longueur du code moogli:D
pour la couleur il y a une option?

le formulaire fonctionne bien sans le captcha
le captcha fonction bien en local (wamp)
mais image dynamique captcha.php ne s'affiche pas n'y aucune autre image!
avec firebug j'ai un truc du genre ça te dis quelque chose ?

Eléphanteau du PHP | 12 Messages

03 févr. 2013, 03:29

je ne peux pas afficher mon screenshot
le site me dis :This message was flagged as spam and has been denied. je ne suis pas un spameur sniff

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

03 févr. 2013, 04:04

pour la colorisation de la syntaxe c'est simple utilise le BBCODE avec le tag php (les boutons gris au dessus de la zone de texte).

pour le screenshoot édit ton message ça devrait passer.
c'est normal c'est le système anti spam.

je ne peux pas t'en dire plus si je ne vois pas le screenshoot :)

si tu met en commentaire le header et le imagepng tu as une erreur ? (affiche directement captcha dans le navigateur).

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