Problema de validación de reCaptcha en servidor

  • Autor Autor Juanjo87
  • Fecha de inicio Fecha de inicio
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:

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">&times;</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:
Atrás
Arriba