Bon je montre le mien:
le formulaire
<div id="hide" class="nojs">
<form id="monForm" action="inc/validation.php" method="post">
<label for="nom">nom</label>
<input type="text" id="nom" name="nom" />
<div id="errornom"></div>
<label for="spam" class="spam">What is two plus two?</label>
<input name="spam" type="text" size="4" id="spam">
<label for="email">Email</label>
<input type="text" id="email" name="email" />
<div id="erroremail"></div>
<label for="message">Message</label>
<textarea id="message" name="message"></textarea>
<div id="errormessage"></div>
<div id="success"></div>
<input type="submit" id="envoyer" value="Envoyer" />
</form>
</div>
Le javascript (jquerry-ajax etc)
$(document).ready(function() {
var $form = $('#monForm');
$('#envoyer').on('click', function() {
$form.trigger('submit');
return false;
});
$form.on('submit', function() {
var nom = $('#nom').val();
var email = $('#email').val();
var message = $('#message').val();
var spam =$('#spam').val();
$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: $(this).serialize(),
dataType: 'json',
success: function(json) {
if(json.valide == false){
if (json.errorspam == true){
$('#success').html("Test spam failed");
$('#errormessage').html("");
$('#erroremail').html("");
$('#errornom').html("");
}
if (json.erreurnom == true){
$('#errornom').html("erreur nom");
$('#nom').css({"background-color": "yellow"});
$('#success').html("");
}else{
$('#errornom').html("");
}
if (json.erreuremail == true){
$('#erroremail').html("erreur email");
$('#success').html("");
}else{
$('#erroremail').html("");
}
if (json.emailinvalide == true){
$('#erroremail').html("email invalide");
$('#success').html("");
}else if(json.erreuremail == true){
$('#erroremail').html("erreur email");
$('#success').html("");
}else{
$('#erroremail').html("");
}
if (json.erreurmessage == true){
$('#errormessage').html("erreur message");
$('#success').html("");
}else{
$('#errormessage').html("");
}
}else{
$('#success').html("succes!");
$('#errormessage').html("");
$('#erroremail').html("");
$('#errornom').html("");
}
}
});
return false;
});
});
Mon code php:
<?php
$n = array();
if (!empty($_POST))
{
$nom = $_POST'nom'];
$email = $_POST'email'];
$message = $_POST'message'];
$spam = $_POST'spam'];
$valid = true;
if (!empty($spam) && !($spam == '4' || $spam == 'four'))
{
$valid = false;
$erreur = 'erreur spam';
$n'errorspam'] = true;
$n'valide'] = $valid;
echo json_encode($n);
exit();
}
if (empty($nom))
{
$valid = false;
$erreur = 'Erreur nom';
$n'erreurnom'] = true;
}
if (empty($email))
{
$valid = false;
$erreur = 'Erreur email';
$n'emailinvalide'] = false;
$n'erreuremail'] = true;
}
elseif (!preg_match('/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i', $email))
{
$valid = false;
$erreur = 'Votre email n\'est pas valide';
$n'erreuremail'] = false;
$n'emailinvalide'] = true;
}
if (empty($message))
{
$valid = false;
$erreur = 'Erreur message';
$n'erreurmessage'] = true;
}
}
else
{
$valid = false;
}
$n'valide'] = $valid;
echo json_encode($n);
/*if ($valid = true)
{
$to = 'lalal@monmail.fr';
$sujet = $nom . ' a contacté le site';
$header = 'From:'.$nom.'<'.$email.'> \n';
$message = stripslashes($message);
$nom = stripslashes($nom);
if (mail($to, $sujet, $message, $header))
{
$erreur = 'Votre email nous est bien parvenu';
$n'erreurphp1'] = true;
unset($nom);
unset($email);
unset($message);
unset($adresse);
}
else
{
$erreur = 'Une erreur est survenue. Mail bloqué';
$n'erreurphp2'] = true;
}
}*/
?>
Bon ça fonctionne...
Maintenant je cherche un moyen à rendre mon formulaire toujours effectif si js est désactivé...
Un idée?
Si vous voyez d'autres choses à améliorer (en restant simple car je suis débutant), n'hésitez pas. Sachez que c'est déjà fonctionnel comme ça.
Je devrais peut-être mettre de l'encodage utf8 qqpart(pour l'envoie du message)?
!!! le champ spam est un honeypot!!! non visible!