Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

Registro con campos personalizados + Base de datos - No se guardan los datos

Estas en el tema de Registro con campos personalizados + Base de datos - No se guardan los datos en el foro de WordPress en Foros del Web. Hola a todos. Vereis, estoy enfrascado en un proyecto y tengo un problema que hace días que me da dolor de cabeza. Tengo un formulario ...
  #1 (permalink)  
Antiguo 16/01/2012, 06:15
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Exclamación Registro con campos personalizados + Base de datos - No se guardan los datos

Hola a todos.

Vereis, estoy enfrascado en un proyecto y tengo un problema que hace días que me da dolor de cabeza.

Tengo un formulario de registro de usuarios que utilizo gracias al plugin "Pie Register", ya que me permite insertar campos personalizados en el formulario de registro.

En la base de datos los campos personalizados también están creados, concretamente en la tabla wp_users (que es la que hay por defecto para los usuarios)

El problema está en que a la hora de guardar los datos, solamente se guardan los campos predefinidos (usuario, contraseña, email) pero los personalizados no se guardan.

Si desde wordpress miro en los datos del usuario creado, los campos personalizados aparecen en blanco. Si a pesar de todo los relleno y guardo, siguen igual, en blanco...

He modificado el archivo login.php, ya que va a buscar el método register usando el form_action y añadido los campos a mano pero no hay manera, no se guardan en la base de datos.

Encima busco documentación pero este error no está documentado.

Más que nada pregunto por si alguien se ha encontrado en el caso y pudiera ofrecer un poco de ayuda. O si cambio de plugin o lo que sea, de verdad que la desesperación es brutal...

Muchas gracias y un abrazo!
  #2 (permalink)  
Antiguo 16/01/2012, 06:37
Avatar de Nekko
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 3.141
Antigüedad: 16 años, 8 meses
Puntos: 656
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Es una pena, mucha gente se queja de este plugin. Lo instalé por curiosidad y en mis custom fields solo aparece "array". Si te fijás en el foro (de wordpress.org) hay gente que reporta diversos errores similares al tuyo y en alguno ofrecen una modificación, pero es un plugin inestable y aparentemente no tiene mucho soporte.
http://wordpress.org/tags/pie-register?forum_id=10
__________________
Taller para crear themes wordpress desde cero | Presupuestos para trabajos particulares vía MP
  #3 (permalink)  
Antiguo 16/01/2012, 07:50
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Exactamente Nekko, aparece la palabra "Array". Y es una pena como dices, porqué tiene un montón de cosas buenas (como poner las politicas de privacidad, etc...) pero tiene esta pega.

He mirado toda la web buscando más info y solo encuentro gente que se queja del problema. En fin...

Ahora para colmo estoy modificando el wp-login.php para poder añadir campos y, por mucho que modifique los valores del value (por ejemplo, en vez de "Usuario", quiero que me aparezca "Nombre de usuario", etc...) y nada, no me los cambia, sigue apareciendo "Usuario"

Me va a dar un patatús este Wordpress...
  #4 (permalink)  
Antiguo 16/01/2012, 09:54
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Cita:
Iniciado por Fernando_net Ver Mensaje
Exactamente Nekko, aparece la palabra "Array". Y es una pena como dices, porqué tiene un montón de cosas buenas (como poner las politicas de privacidad, etc...) pero tiene esta pega.

He mirado toda la web buscando más info y solo encuentro gente que se queja del problema. En fin...

Ahora para colmo estoy modificando el wp-login.php para poder añadir campos y, por mucho que modifique los valores del value (por ejemplo, en vez de "Usuario", quiero que me aparezca "Nombre de usuario", etc...) y nada, no me los cambia, sigue apareciendo "Usuario"

Me va a dar un patatús este Wordpress...
Me autocito, tenía un plugin instalado, concretamente el Theme my login, que por defecto coge un archivo register que tiene él en su carpeta.

Entonces al editar el archivo wp-login.php, no editaba directamente el del Theme my login, con lo que los cambios no afectaban.

Sigo adelante :)
  #5 (permalink)  
Antiguo 16/01/2012, 15:59
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Hola a todos.

Pues estoy en la misma situación pero con el plugin Theme My Login. Agrego de forma manual en el form de registro los campos que quiero guardar (con su name, value, etc...) pero en la base de datos no se guardan.

El problema está en que el wp-login.php no afecta para nada, ya que se alimenta del propio plugin Theme My Login. Y viendo las carpetas y archivos php del plugin no veo nada que indique 'register' a no ser que sea el archivo register-form.php, que es el que he modificado para añadir los campos en el form de registro. Pero allí nada de nada de SQL, solamente el form.

Es decir, no puedo ver el método o la función donde esté la sintaxis "Insert into" y poder añadir a mano que coja los campos del formulario, solamente guarda -como es normal- el user_login y user_mail

Alguna ayuda? Pego código de algún archivo en particular?

Un abrazo!!!

EDITO:

Os pego el código del final del register-form.php del plugin Theme my login:

Código PHP:
Ver original
  1. [...]
  2. <?php
  3.      do_action( 'register_form' ); // Wordpress hook
  4.      do_action_ref_array( 'tml_register_form', array( &$template ) ); //TML hook
  5. ?>
  6. <p id="reg_passmail<?php $template->the_instance(); ?>">
  7.      <?php echo apply_filters( 'tml_register_passmail_template_message', __( 'A password will be e-mailed to you.', 'theme-my-login' ) ); ?></p>
  8. <p class="submit">
  9.      <input type="submit" name="wp-submit" id="wp-submit<?php $template->the_instance(); ?>" value="<?php _e( 'Register', 'theme-my-login' ); ?>" />
  10.      <input type="hidden" name="redirect_to" value="<?php $template->the_redirect_url( 'register' ); ?>" />
  11.      <input type="hidden" name="instance" value="<?php $template->the_instance(); ?>" />
  12. </p>
  13. </form>
  14. <?php $template->the_action_links( array( 'register' => false ) ); ?>

Última edición por Fernando_net; 16/01/2012 a las 16:04 Razón: Añadir código
  #6 (permalink)  
Antiguo 17/01/2012, 03:32
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Hola a todos de nuevo.

Investigando un poco más, veo como aparte de añadir los campos en el registro de usuarios, cosa que ya he hecho, hay que crear los campos en la base de datos -cosa que también he hecho y que además se llaman igual que en el formulario-

No obstante, estos no se guardan en la base de datos a pesar de que en el formulario se llaman igual que en la tabla. El kit de la cuestión es que no sé donde encontrar -o no se en que archivo está- la función que pasa los datos a la base de datos y mapearlos para que se guarden, entonces podría cambiar la sentencia Insert Into para ponerla bien.

Seguramente ahora debe ser: Insert into wp_users('user_login','user_email') values ('user_login','user_email') y claro, los nuevos campos que he añadido en el formulario no se graban.

A ver si alguien puede ver la luz al final del tunel y me puede dar alguna idea donde encontrar esta sentencia.

Un abrazo y muchas gracias
  #7 (permalink)  
Antiguo 17/01/2012, 03:39
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Os adjunto la estructura de la tabla wp_users.



Como podréis ver, los campos están en blanco



Y aquí tenéis el código PHP del formulario de registro. Como podréis comprobar, los nombres se llaman igual que están en la tabla:

Código PHP:
Ver original
  1. <div class="login" id="theme-my-login<?php $template->the_instance(); ?>">
  2.     <?php $template->the_action_template_message( 'Registro' ); ?>
  3.     <?php $template->the_errors(); ?>
  4.     <form name="registerform" id="registerform<?php $template->the_instance(); ?>" action="<?php $template->the_action_url( 'register' ); ?>" method="post">
  5.         <p>
  6.             <label for="user_login<?php $template->the_instance(); ?>"><?php _e( 'Usuario', 'theme-my-login' ) ?></label>
  7.             <input type="text" name="user_login" id="user_login<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_login' ); ?>" size="20" />
  8.         </p>
  9.         <p>
  10.             <label for="user_email<?php $template->the_instance(); ?>"><?php _e( 'Correo electrónico', 'theme-my-login' ) ?></label>
  11.             <input type="text" name="user_email" id="user_email<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_email' ); ?>" size="30" />
  12.         </p>
  13.         <p>
  14.             <label for="user_centro<?php $template->the_instance(); ?>"><?php _e( 'Centro de trabajo', 'theme-my-login' ) ?></label>
  15.             <input type="text" name="user_centro" id="user_centro<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_centro' ); ?>" size="60" />
  16.         </p>
  17.         <p>
  18.             <label for="user_especialidad<?php $template->the_instance(); ?>"><?php _e( 'Especialidad', 'theme-my-login' ) ?></label>
  19.             <input type="text" name="user_especialidad" id="user_especialidad<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_especialidad' ); ?>" size="50" />
  20.         </p>
  21.         <p>
  22.             <label for="user_participantes<?php $template->the_instance(); ?>"><?php _e( 'Número de participantes', 'theme-my-login' ) ?></label>
  23.             <input type="text" name="user_participantes" id="user_participantes<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_participantes' ); ?>" size="20" />
  24.         </p>
  25.         <p>
  26.             <label for="user_telefono<?php $template->the_instance(); ?>"><?php _e( 'Numero de teléfono *(opcional)', 'theme-my-login' ) ?></label>
  27.             <input type="text" name="user_telefono" id="user_telefono<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_telefono' ); ?>" size="9" />
  28.         </p>

Un abrazo!
  #8 (permalink)  
Antiguo 17/01/2012, 16:39
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Nadie puede ayudarme? :(
  #9 (permalink)  
Antiguo 18/01/2012, 05:40
Avatar de Nekko
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 3.141
Antigüedad: 16 años, 8 meses
Puntos: 656
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

La verdad es que no entiendo del todo como procesás ese formulario. Te dejo algunas guías para lograr lo que necesitás pero partiendo de cero.

http://www.cozmoslabs.com/1012-wordp...rofile-fields/

http://tipsforwordpress.com/wordpres...register-form/
__________________
Taller para crear themes wordpress desde cero | Presupuestos para trabajos particulares vía MP
  #10 (permalink)  
Antiguo 18/01/2012, 07:16
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Wow, voy a darles un vistazo Nekko.

Ya editaré después a ver si me han servido

Gracias!!!

PD: +1 ;)
  #11 (permalink)  
Antiguo 23/01/2012, 04:49
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Nada, al final sigue sin funcionar.

Os paso el codigo PHP de la función que usa wp-login.php para registrar nuevos usuarios. Solamente tenía el campo user_login y user_email; los demás campos los añadí yo.

A pesar de todo, voy a la base de datos y siguen en blanco. A ver si podéis ver algún detalle que a mi se me escape...

Código PHP:
Ver original
  1. function register_new_user( $user_login, $user_email, $user_centro, $user_especialidad, $user_participantes, $user_telefono ) {
  2.     $errors = new WP_Error();
  3.  
  4.     $sanitized_user_login = sanitize_user( $user_login );
  5.     $user_email = apply_filters( 'user_registration_email', $user_email );
  6.  
  7.     // Check the username
  8.     if ( $sanitized_user_login == '' ) {
  9.         $errors->add( 'empty_username', __( '<strong>ERROR</strong>: Please enter a username.' ) );
  10.     } elseif ( ! validate_username( $user_login ) ) {
  11.         $errors->add( 'invalid_username', __( '<strong>ERROR</strong>: This username is invalid because it uses illegal characters. Please enter a valid username.' ) );
  12.         $sanitized_user_login = '';
  13.     } elseif ( username_exists( $sanitized_user_login ) ) {
  14.         $errors->add( 'username_exists', __( '<strong>ERROR</strong>: This username is already registered, please choose another one.' ) );
  15.     }
  16.  
  17.     // Check the e-mail address
  18.     if ( $user_email == '' ) {
  19.         $errors->add( 'empty_email', __( '<strong>ERROR</strong>: Please type your e-mail address.' ) );
  20.     } elseif ( ! is_email( $user_email ) ) {
  21.         $errors->add( 'invalid_email', __( '<strong>ERROR</strong>: The email address isn’t correct.' ) );
  22.         $user_email = '';
  23.     } elseif ( email_exists( $user_email ) ) {
  24.         $errors->add( 'email_exists', __( '<strong>ERROR</strong>: This email is already registered, please choose another one.' ) );
  25.     }
  26.  
  27.     do_action( 'register_post', $sanitized_user_login, $user_email, $errors );
  28.  
  29.     $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
  30.  
  31.     if ( $errors->get_error_code() )
  32.         return $errors;
  33.  
  34.     $user_pass = wp_generate_password( 12, false);
  35.     $user_id = wp_create_user( $sanitized_user_login, $user_pass, $user_email, $user_centro, $user_especialidad, $user_participantes, $user_telefono);
  36.     if ( ! $user_id ) {
  37.         $errors->add( 'registerfail', sprintf( __( '<strong>ERROR</strong>: Couldn’t register you... please contact the <a href="mailto:%s">webmaster</a> !' ), get_option( 'admin_email' ) ) );
  38.         return $errors;
  39.     }
  40.  
  41.     update_user_option( $user_id, 'default_password_nag', true, true ); //Set up the Password change nag.
  42.  
  43.     wp_new_user_notification( $user_id, $user_pass );
  44.  
  45.     return $user_id;
  46. }

Y aquí es cuando llama a la función

Código PHP:
Ver original
  1. $user_login = '';
  2.     $user_email = '';
  3.     $user_centro = '';
  4.     $user_especialidad = '';
  5.     $user_participantes = '';
  6.     $user_telefono = '';
  7.     if ( $http_post ) {
  8.         $user_login = $_POST['user_login'];
  9.         $user_email = $_POST['user_email'];
  10.         $user_centro = $_POST['user_centro'];
  11.         $user_especialidad = $_POST['user_especialidad'];
  12.         $user_participantes = $_POST['user_participantes'];
  13.         $user_telefono = $_POST['user_telefono'];
  14.         $errors = register_new_user($user_login, $user_email, $user_centro, $user_especialidad, $user_participantes, $user_telefono);
  15.         if ( !is_wp_error($errors) ) {
  16.             $redirect_to = !empty( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : 'wp-login.php?checkemail=registered';
  17.             wp_safe_redirect( $redirect_to );
  18.             exit();
  19.         }
  20.     }

A ver si alguien puede darme alguna manita...

Un abrazo!
  #12 (permalink)  
Antiguo 23/01/2012, 09:10
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Llevas varios días en eso. Olvida el plugin. Copia y pega el código que aparece aquí y mira el resultado:

http://wpengineer.com/2173/custom-fi...-user-profile/

Es importante que leas lo que ahí se dice.

El ejemplo es básico pero sirve para ilustrar cómo se agregan campos de usuario y cómo se guardan en la BD. A partir de ahí se te hará fácil armar la estructura que desees.
  #13 (permalink)  
Antiguo 23/01/2012, 09:38
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Pues si, llevo una semana exactamente...

Al final el "Theme my login" lo deseché, ahora trabajo encima del wp-login.php original, el que aparece el logo de Wordpress arriba.

Miraré a ver lo que comentas Metacortex, a ver si saco algo en claro.

Muchas gracias!
  #14 (permalink)  
Antiguo 24/01/2012, 01:54
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Hola Metacortex.

Una pregunta, el trozo de código que aparece en la web que me has puesto, ¿donde lo tendría que poner? En el wp-login.php? En el functions.php?

Lo digo porqué no lo especifica y me estoy volviendo loco buscando por los archivos php de la web buscando esa función...

Muchas gracias

Saludos!
  #15 (permalink)  
Antiguo 24/01/2012, 02:58
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Nada, he pegado el código en el wp-login.php pero sigue sin funcionar.

No se, lo voy a dejar por imposible... No me pensaba que fuera tan complicado la gestión de campos personalizados en Wordpress...
  #16 (permalink)  
Antiguo 24/01/2012, 03:41
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

He cambiado la función de registro, aplicando las nuevas variables que las capture del constructor. He hecho un print (ahora no aparece) para ver si capta las variables y si, en efecto, la página capta las variables, pero la Base de datos no las recoge...

Pego la función a ver si se ve algo anomalo:

Código PHP:
Ver original
  1. function register_new_user( $user_login, $user_email, $user_centro, $user_especialidad, $user_participantes, $user_telefono ) {
  2.     $errors = new WP_Error();
  3.  
  4.     $sanitized_user_login = sanitize_user( $user_login );
  5.     $user_email = apply_filters( 'user_registration_email', $user_email );
  6.     $user_centro = $user_centro;
  7.     $user_especialidad = $user_especialidad;
  8.     $user_participantes = $user_participantes;
  9.     $user_telefono = $user_telefono;
  10.  
  11.     // Check the username
  12.     if ( $sanitized_user_login == '' ) {
  13.         $errors->add( 'empty_username', __( '<strong>ERROR</strong>: Please enter a username.' ) );
  14.     } elseif ( ! validate_username( $user_login ) ) {
  15.         $errors->add( 'invalid_username', __( '<strong>ERROR</strong>: This username is invalid because it uses illegal characters. Please enter a valid username.' ) );
  16.         $sanitized_user_login = '';
  17.     } elseif ( username_exists( $sanitized_user_login ) ) {
  18.         $errors->add( 'username_exists', __( '<strong>ERROR</strong>: This username is already registered, please choose another one.' ) );
  19.     }
  20.  
  21.     // Check the e-mail address
  22.     if ( $user_email == '' ) {
  23.         $errors->add( 'empty_email', __( '<strong>ERROR</strong>: Please type your e-mail address.' ) );
  24.     } elseif ( ! is_email( $user_email ) ) {
  25.         $errors->add( 'invalid_email', __( '<strong>ERROR</strong>: The email address isn’t correct.' ) );
  26.         $user_email = '';
  27.     } elseif ( email_exists( $user_email ) ) {
  28.         $errors->add( 'email_exists', __( '<strong>ERROR</strong>: This email is already registered, please choose another one.' ) );
  29.     }
  30.  
  31.     do_action( 'register_post', $sanitized_user_login, $user_email, $errors );
  32.  
  33.     $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
  34.  
  35.     if ( $errors->get_error_code() )
  36.         return $errors;
  37.  
  38.     $user_pass = wp_generate_password( 12, false);
  39.     $user_id = wp_create_user( $sanitized_user_login, $user_pass, $user_email, $user_centro, $user_especialidad, $user_participantes, $user_telefono);
  40.     if ( ! $user_id ) {
  41.         $errors->add( 'registerfail', sprintf( __( '<strong>ERROR</strong>: Couldn’t register you... please contact the <a href="mailto:%s">webmaster</a> !' ), get_option( 'admin_email' ) ) );
  42.         return $errors;
  43.     }
  44.  
  45.     update_user_option( $user_id, 'default_password_nag', true, true ); //Set up the Password change nag.
  46.  
  47.     wp_new_user_notification( $user_id, $user_pass, $user_mail, $user_centro, $user_especialidad, $user_participantes, $user_telefono );
  48.  
  49.     return $user_id;
  50. }

Muchas gracias por la ayuda...
  #17 (permalink)  
Antiguo 24/01/2012, 05:00
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Registro con campos personalizados + Base de datos - No se guardan los dat

Familia, ya he encontrado el problema.

Leyendo la documentación, la función llama a otra llamada wp_create_user($argumentos). Esta función está situada en wp-includes/user.php

He entrado en ese archivo y la función solamente tenía 2 argumentos (login y mail), con lo que, Wordpress no encontraba constructor para crear el usuario con los datos que le pasaba.

Le he hecho un constructor nuevo con todos los argumentos que quería, creando una array que inserta en la base de datos.

Y voilà, ya tenemos el usuario creado con los campos personalizados!

Escuchad, muchas gracias por la paciencia, sé que a veces soy un poco pesado, con lo que pido disculpas...

Un abrazo! :D

Etiquetas: campos, database, personalizados, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:28.