J
Juanjo87
Gamma
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Muy buenas.
Tengo un problema a la hora de validar el reCaptcha por parte del servidor.
He creado un formulario que valido de esta forma:
Pero de esta forma, el usuario puede enviar el form pasándose por alto el captcha.
Lo e intentado de esta forma pero al ser el recaptcha un checkbox, aunque lo seleccione me dice que tengo que rellenar el campo:
Como hago entonces, para que antes de enviar el form, se compruebe si esta marcado el reCaptcha?
Gracias
- - - Actualizado - - -
Bueno mencionar tmb que así muestro el form
- - - Actualizado - - -
me ayuda alguien?
- - - Actualizado - - -
de esta forma por lo que he leído se puede validar, pero no se adaptarlo a mi codigo
me ayuda alguien?
Tengo un problema a la hora de validar el reCaptcha por parte del servidor.
He creado un formulario que valido de esta forma:
PHP:
if( empty( $_POST['username'] ) )
$error .= '<p class="error">Introduce un nombre de usuario</p>';
if( empty( $_POST['mail_id'] ) )
$error .= '<p class="error">Introduce un email</p>';
elseif( !filter_var($email, FILTER_VALIDATE_EMAIL) )
$error .= '<p class="error">El email es incorrecto</p>';
if( empty( $_POST['passwrd'] ) )
$error .= '<p class="error">La contraseña no puede estar en blanco</p>';
elseif (!preg_match('/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/', $_POST['passwrd']))
$error .= '<p class="error">La contraseña requiere al menos una mayúscula, una minúscula, un número o carácter especial y mínimo 8 caracteres</p>';
Pero de esta forma, el usuario puede enviar el form pasándose por alto el captcha.
Lo e intentado de esta forma pero al ser el recaptcha un checkbox, aunque lo seleccione me dice que tengo que rellenar el campo:
PHP:
if( empty( $_POST['captcha'] ) )
$error .= '<p class="error">Introduce captcha</p>';
Como hago entonces, para que antes de enviar el form, se compruebe si esta marcado el reCaptcha?
Gracias
- - - Actualizado - - -
Bueno mencionar tmb que así muestro el form
HTML:
<form method="post" name="st-register-form">
<div class="form-label"><label for="st-username"></label></div>
<div class="field"><input type="text" placeholder="Usuario" autocomplete="off" name="username" id="st-username" /></div>
<div class="form-label"><label for="st-psw"></label></div>
<div class="field"><input type="password" placeholder="Contraseña" name="password" id="st-psw" /></div>
<div class="form-label"><label for="st-email"></label></div>
<div class="field"><input type="text" placeholder="E-mail" autocomplete="off" name="mail" id="st-email" /></div>
<div name="captcha"class="g-recaptcha" data-sitekey="clave_reCaptcha"></div>
<div class="frm-button"><input type="button" id="register-me" value="Register" /></div>
<div id="error-message"></div>
<div class="indicator">loading...</div>
</form>
- - - Actualizado - - -
me ayuda alguien?
- - - Actualizado - - -
de esta forma por lo que he leído se puede validar, pero no se adaptarlo a mi codigo
PHP:
<form id="contact-form" name="contact-form" action="<?php echo get_permalink();?>#contact-form" method="post">
<?php //Comprobamos si el formulario ha sido enviado
if (isset( $_POST['btn-submit'] )) {
//Creamos una variable para almacenar los errores
global $reg_errors;
$reg_errors = new WP_Error;
//Recogemos en variables los datos enviados en el formulario y los sanitizamos.
//Si detectamos algún error, podremos más abajo rellenar los campos del formulario con los datos enviados para no tener que empezar el formulario de cero
$f_name = sanitize_text_field($_POST['f_name']);
//El campo Nombre es obligatorio, comprobamos que no esté vacío y en caso contrario creamos un registro de error
if ( empty( $f_name ) ) {
$reg_errors->add("empty-name", "El campo nombre es obligatorio");
}
//Comprobamos el recaptcha
$response = wp_remote_post( "https://www.google.com/recaptcha/api/siteverify", array(
'method' => 'POST',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(),
'body' => array(
'secret' => "tu-clave-secreta",
'response' => esc_attr($_POST['g-recaptcha-response'])),
'cookies' => array()
)
);
//Comprobamos si tenemos algún tipo de error en la conexión con google
if ( is_wp_error( $response ) ) {
$reg_errors->add( "invalid-captcha", "Se ha producido un error comprobando el captcha" );
} else {
//Si hemos conectado correctamente con google, comprobamos si la respuesta es true o false
$g_response = json_decode($response["body"]);
if ($g_response->success == false) {
$reg_errors->add( "invalid-captcha", "Se ha producido un error comprobando el captcha" );
}
}
}?>
<div class="form-group">
<label for="f_name">Nombre <span class="asterisk">*</span></label>
<input type="text" id="f_name" name="f_name" class="form-control" value="<?php echo $f_name;?>" placeholder="Introduce tu nombre" required aria-required="true">
<?php //Comprobamos si hay errores en la validación del campo Nombre
if ( is_wp_error( $reg_errors ) ) {
if ($reg_errors->get_error_message("empty-name")) {?>
<br class="clearfix" />
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<p><?php echo $reg_errors->get_error_message("empty-name");?></p>
</div>
<?php }
}?>
</div>
<div class="form-group">
<div class="g-recaptcha" data-sitekey="tu-clave-del-stio"></div>
</div>
<button type="submit" id="btn-submit" name="btn-submit" class="btn btn-default">Enviar consulta</button>
</form>
me ayuda alguien?
Última edición: