El usuario rellena un formulario nombre
, email
y mensaje
y se envía por correo electrónico. Al enviarlo se visualiza el div
con id="correcto"
el cual muestra un mensaje de confirmación. Para verificar que es humano utilizo invisible recaptcha
de Google.
Los 3 campos son obligatorios. Para ello utilizo bootstrapValidator
en main.js
El problema es que cuando pulso el botón enviar directamente salta la verificación del captcha y no se verifica que el los 3 campos del formulario este llenos, con lo cual, se pueden enviar vacío
Parte del código index.php
<?php
require_once "recaptcha/src/autoload.php";
$secret = 'MY_SECRET_KEY';
if (isset($_POST["name"]) && $_POST["email"] && $_POST["mensaje"]) {
$gRecaptchaResponse = isset($_POST["g-recaptcha-response"])? $_POST["g-recaptcha-response"] : null;
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($gRecaptchaResponse, $_SERVER['REMOTE_ADDR']);
/*
if ($resp->isSuccess()) {
die("El mensaje se ha enviado!");
} else {
die("beep bop!");
}*/
}
?>
<head>
<script src="js/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script>
<script src='https://www.google.com/recaptcha/api.js'></script>
<script>
function onSubmit(token) {
document.getElementById("soporteForm").submit();
$('#correcto').fadeIn();
}
</script>
</head>
<body>
<form class="form-horizontal" id="soporteForm" method="post" action="ajaxSubmit.php" target="request">
<div class="form-group">
<div class="col-sm-12">
<input type="text" class="form-control campos" placeholder="Izena" name="nombre" required>
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<input type="email" class="form-control campos" placeholder="Posta elektronikoa" name="email" required>
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<textarea class="form-control campos" placeholder="Mezua" name="mensaje" required></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<button type="submit" class="btn btn-default g-recaptcha" data-sitekey="MY_SECRET_KEY" data-callback="onSubmit">Enviar</button>
<!--<input type="submit" class="btn btn-default g-recaptcha" data-sitekey="6Lc_bCEUAAAAAMzQcR1LYVl7593PKGPMdRPa0-D6" data-callback="onSubmit" value="Bidali"/>-->
</div>
</div>
<iframe name="request" style="display:none">
</iframe>
<div id="correcto">
El mensaje ha sido enviado correctamente
</div>
</form>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.11.2.min.js"><\/script>')</script>
<script src="js/vendor/bootstrap.min.js"></script>
<script src="js/bootstrapValidator.js"></script>
<script src="js/smooth-scroll.js"></script>
<script src="js/waypoints.min.js"></script>
<script src="js/main.js"></script>
</body>
</html>
ficheromain.js
$('#soporteForm').bootstrapValidator({
message:"Esto no es válido",
feedbackIcons:{
valid:'glyphicon glyphicon-ok',
invalid:'glyphicon glyphicon-remove',
validating:'glyphicon glyphicon-refresh'
},
fields:{
nombre:{
validators:{
notEmpty:{
message: "Atal hau betebeharrekoa da"
},
}
},
email:{
validators:{
notEmpty:{
message: "Atal hau betebeharrekoa da"
},
emailAddress:{
message: "Honek ez dirudi posta elektroniko bat"
}
}
},
mensaje:{
validators:{
notEmpty:{
message: "Mezua ezin du hutsik egon"
}
}
}
}
}).on('success.form.bv', function(e){
e.preventDefault();
var $form = $(e.target);
var bv = $form.data('bootstrapValidator');
$.post($form.attr('action'), $form.serialize(), function(result){
$('#correcto').fadeIn();
console.log(result);
}, 'json');
});
});
Y este es el fichero ajaxSubmit.php
que envia el mail mediante php
<?php
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$mensaje = $_POST['mensaje'];
$header = 'From: [email protected]' . "\r\n";
$header .= "X-Mailer:PHP/" . phpversion() . "\r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";
$comentario = "Mezua bidalitako pertsona: " . $nombre . "\r\n";
$comentario .= "Bere posta elektronikoa: " . $email . "\r\n";
$comentario .= "Mezua: " . $mensaje . "\r\n";
$para = "[email protected]";
$asunto = "Lezo Landing Page-eko kontatua";
mail($para, $asunto, utf8_decode($comentario), $header);
// respuesta al servidor
$nombre = $_POST['nombre'];
echo json_encode(array(
'Mensaje' => sprintf('Se recibió el correo de %s', $nombre)
));