Foros del Web » Programando para Internet » PHP » CodeIgniter »

UPDATE no se hace si una variable viene vacía.

Estas en el tema de UPDATE no se hace si una variable viene vacía. en el foro de CodeIgniter en Foros del Web. Hojola otra vez... estoy haciendo un UPDATE a la base de datos, en una tabla donde guardo los datos de los usuarios, todo marcha bien, ...
  #1 (permalink)  
Antiguo 27/10/2010, 09:14
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Pregunta UPDATE no se hace si una variable viene vacía.

Hojola otra vez... estoy haciendo un UPDATE a la base de datos, en una tabla donde guardo los datos de los usuarios, todo marcha bien, el formulario consta de los siguientes campos de texto: Nombre, Email, Nombre de Login, Contraseña y Confirmar contraseña...

Todo marcha bien, me hace el update sin problemas, pero si mando el campo Contraseña vacío, no me hace el update... La idea es que se puedan cambiar los otros datos y tener la opción de cambiar el password o no:

Código PHP:
Ver original
  1. <?php
  2. class Users_query extends Model{
  3.  
  4.     function Users_query()
  5.     {
  6.         parent::Model();
  7.     }
  8.  
  9.     function users_query_edit()
  10.     {
  11.         $id = $this->input->post('usuario_ID');
  12.        
  13.         // Si el campo password viene vacío,
  14.         // que siga usando el valor de la bd...
  15.         if($this->input->post('usuario_password') == '')
  16.         {
  17.             $password = $this->db->select('usuario_password');
  18.             $this->db->where('usuario_ID', $id);
  19.             $this->db->get('gd_usuarios');
  20.             return $password;
  21.             $post_password = $password;
  22.         }
  23.         else
  24.         {
  25.             $post_password = $this->input->post('usuario_password');
  26.         }
  27.  
  28.         $user_data_update = array(
  29.                             'usuario_nombre'    => $this->input->post('usuario_nombre'),
  30.                             'usuario_email'        => $this->input->post('usuario_email'),
  31.                             'usuario_login'        => $this->input->post('usuario_login'),
  32.                             'usuario_password'    => $post_password,
  33.                             'usuario_roll'        => $this->input->post('usuario_roll'));
  34.  
  35.         $this->db->set($user_data_update);
  36.         $this->db->where('usuario_ID', $id);
  37.         return $this->db->update('gd_usuarios', $user_data_update);
  38.     }
  39.  
  40. }
  41. ?>

Realmente no entiendo qué puede estar pasando, pero me imagino que el error esté en el if... else

Saludos y gracias de antemano....
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 27/10/2010, 09:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE no se hace si una variable viene vacía.

mas bien que tienes esta linea en la parte donde verificas si la contraseña viene vacía:
Código PHP:
return $password
¿sera por eso que no actualiza?

aunque en todo caso yo no lo haría así, mejor de otro modo:
Código PHP:
$data['user'] = $user;
if ( ! empty(
$pass)) $data['pass'] = $pass;
update($data); 
sobre todo por que no tiene mucho sentido recuperar la contraseña de la BD cuando se omite del formulario, vamos, no tiene caso...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/10/2010, 13:20
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
De acuerdo Respuesta: UPDATE no se hace si una variable viene vacía.

Ahora si me ha funcionado perfectamente, la verdad que antes me estaba complicando demasiado... Normal en mi

Ahora ha quedado así:
Código PHP:
Ver original
  1. function users_query_edit()
  2. {
  3.     $id = $this->input->post('usuario_ID');
  4.  
  5.     $user_data_update = array(
  6.                         'usuario_nombre'    => $this->input->post('usuario_nombre'),
  7.                         'usuario_email'        => $this->input->post('usuario_email'),
  8.                         'usuario_login'        => $this->input->post('usuario_login'),
  9.                         'usuario_password'    => $this->input->post('usuario_password'),
  10.                         'usuario_roll'        => $this->input->post('usuario_roll'));
  11.    
  12.     if(empty($user_data_update['usuario_password']))
  13.     {
  14.         $this->db->select('usuario_nombre, usuario_email, usuario_login, usuario_roll');
  15.     }
  16.     else
  17.     {
  18.         $this->db->select('*');
  19.     }
  20.  
  21.     $this->db->set($user_data_update);
  22.     $this->db->where('usuario_ID', $id);
  23.     return $this->db->update('gd_usuarios', $user_data_update);
  24. }

Lo que hago sencillamente es plantear una consulta SELECT si la variable viene vacía u otra en caso contrario...

Gracias @pateketrueke, tu codiguillo me aclaró todo...
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #4 (permalink)  
Antiguo 27/10/2010, 15:35
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: UPDATE no se hace si una variable viene vacía.

Supongo que lo querias guardar tambien encriptado al password no?
Algo mas simple seria quitar del arrreglo el usuario_password si esta vacio

Código PHP:
Ver original
  1. if ($this->input->post('usuario_password') != ""){
  2. unset($user_data_update['usuario_password']);
  3. }
  4. $this->db->where('usuario_ID', $id);
  5. $this->db->update('gd_usuarios',  $user_data_update );

(el return es innecesaario) cuando se ejecuta un metodo de active record devuelve un booleano.

El metodo update solo actualiza los campos si estan dentro del arreglo. asi que no te hace falta hacer un select.

Salutes (:
__________________
Drupal Argentina
  #5 (permalink)  
Antiguo 28/10/2010, 09:15
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: UPDATE no se hace si una variable viene vacía.

Perfecto @NUCKLEAR, todo va perfecto, y de esa manera es más sencillo el asunto, solo una cosa, en tu código pones !=, cuando en realidad es ==

Saludos y gracias...
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #6 (permalink)  
Antiguo 28/10/2010, 10:03
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: UPDATE no se hace si una variable viene vacía.

Cita:
Iniciado por rogertm Ver Mensaje
Perfecto @NUCKLEAR, todo va perfecto, y de esa manera es más sencillo el asunto, solo una cosa, en tu código pones !=, cuando en realidad es ==

Saludos y gracias...

Ahhhh era para ver si estabas atento! :D
__________________
Drupal Argentina
  #7 (permalink)  
Antiguo 28/10/2010, 10:36
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: UPDATE no se hace si una variable viene vacía.

Ja... me has sacado una carcajada... Saludos...
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #8 (permalink)  
Antiguo 29/10/2010, 08:25
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: UPDATE no se hace si una variable viene vacía.

Bueno, regreso porque tengo otro problema, que existía desde el inicio, pero quería resolver una cosa primero y la otra después.

El asunto es que el formulario no valida, osea, le he puesto reglas de validación, pero ni se entera, el código que tengo es este.

La vista:
Código PHP:
Ver original
  1. <?php
  2. if($user_edit->num_rows() > 0)
  3. {
  4.     $user_to_edit = $user_edit->row();
  5. ?>
  6.     <?php echo validation_errors(); ?>
  7.     <?php echo form_open('/cpanel/users_edit/user_do_edit/'.$this->input->post('usuario_ID')); ?>
  8.         <fieldset name="Insert User">
  9.         <!-- todo el formulario -->
  10. <?php
  11. }
  12. ?>
y el controlador:
Código PHP:
Ver original
  1. <?php
  2. class Users_edit extends Controller{
  3.  
  4.     function __construct()
  5.     {
  6.         parent::Controller();
  7.     }
  8.  
  9.     function index()
  10.     {
  11.         // codigo de la function index()
  12.     }
  13.  
  14.     function user_do_edit()
  15.     {
  16.         // Reglas de validación
  17.         $this->form_validation->set_rules('usuario_nombre', 'Nombre de Usuario', 'trim|required|htmlspecialchars|xss_clean');
  18.         $this->form_validation->set_rules('usuario_email', 'Correo Electr&oacute;nico', 'trim|required|htmlspecialchars|valid_email|xss_clean');
  19.         $this->form_validation->set_rules('usuario_login', 'Nombre de Login', 'trim|required|htmlspecialchars|xss_clean');
  20.         $this->form_validation->set_rules('usuario_password', 'Contrase&ntilde;a', 'trim|matches[usuario_password_confirm]|md5|xss_clean');
  21.         $this->form_validation->set_rules('usuario_password_confirm', 'Confirmar Contrase&ntilde;a', 'trim|md5|xss_clean');
  22.  
  23.         $this->load->model('/cpanel/Users_query');
  24.         $user_do_edit['do_edit'] = $this->Users_query->users_query_edit();
  25.         redirect('/cpanel/users_edit/index/'.$this->input->post('usuario_ID'));
  26.     }
  27.  
  28. }
  29. ?>
No tengo la menor idea de qué pueda estar pasando aquí, pero ni valida el campo email, ni convierte a md5 el password, ni nada de nada...
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #9 (permalink)  
Antiguo 29/10/2010, 10:40
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: UPDATE no se hace si una variable viene vacía.

No te valida el md5 por que no es una regla valida(leiste la doc?)
Con solo poner valid_email es suficiente

Y no es la manera correcta de trabajar la validación(nuevamente leiste la doc?) tiene los ejemplos bien claritos.

Saludos ;)
__________________
Drupal Argentina
  #10 (permalink)  
Antiguo 02/11/2010, 14:40
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: UPDATE no se hace si una variable viene vacía.

Bueno, que con tantas cosas no he tenido tiempo de terminar esto...

A ver, tengo un formulario que envío con datos que quiero actualizar en la base de datos y con respecto al último código que puse aquí, he hecho algunos cambios, ahora tengo esto:
Código PHP:
Ver original
  1. <?php
  2. if($user_edit->num_rows() > 0)
  3. {
  4.     $user_to_edit = $user_edit->row();
  5.  
  6.     // Reglas de validacion
  7.     $valid_field = array(
  8.                     'nombre_to_edit'    => $user_to_edit->usuario_nombre,
  9.                     'email_to_edit'        => $user_to_edit->usuario_email,
  10.                     'login_to_edit'        => $user_to_edit->usuario_login,
  11.                     'password_to_edit'    => $user_to_edit->usuario_password,
  12.                     );
  13.  
  14. ?>
  15.     <?php echo validation_errors(); ?>
  16.     <?php echo form_open('/cpanel/users_edit/user_do_edit/'.$this->input->post('usuario_ID')); ?>
  17.         <fieldset name="Insert User">
  18.             <legend>Editar los datos del usuario: <strong><?php echo $user_to_edit->usuario_nombre; ?></strong></legend>
  19.             <label for="usuario_nombre">Nombre de Usuario</label>
  20.             <input type="text" name="usuario_nombre" value="<?php echo set_value($valid_field['nombre_to_edit']); ?>" class="input" />
  21.             <!-- Resto del formulario -->
Lo que hice fue, pasar por un array los datos que debo mostrar en el formulario, con el objetivo de validarlos de manera más fácil:
Código PHP:
Ver original
  1. <?php echo set_value($valid_field['nombre_to_edit']); ?>
Y no me muestra nada, pero si le quito el set_value() entonces sí muestra el nombre del usuario. Todo esto en la vista claro...

En el controlador tengo lo siguiente:
Código PHP:
Ver original
  1. function user_do_edit()
  2. {
  3.     // Reglas de validación
  4.     $this->form_validation->set_rules('usuario_nombre', 'Nombre de Usuario', 'trim|required|htmlspecialchars|xss_clean');
  5.     $this->form_validation->set_rules('usuario_email', 'Correo Electr&oacute;nico', 'trim|required|htmlspecialchars|valid_email|xss_clean');
  6.     $this->form_validation->set_rules('usuario_login', 'Nombre de Login', 'trim|required|htmlspecialchars|xss_clean');
  7.     $this->form_validation->set_rules('usuario_password', 'Contrase&ntilde;a', 'trim|required|matches[usuario_password_confirm]|md5|xss_clean');
  8.     $this->form_validation->set_rules('usuario_password_confirm', 'Confirmar Contrase&ntilde;a', 'trim|required|md5|xss_clean');
  9.  
  10.     $this->load->model('/cpanel/Users_query');
  11.     $user_do_edit['do_edit'] = $this->Users_query->users_query_edit();
  12.     redirect('/cpanel/users_edit/index/'.$this->input->post('usuario_ID'));
  13. }

¿Qué es lo que tengo mal? Ya tengo cargando automáticamente la librería form_validation y el helper form. ¿Por qué no me manda los errores ni me valida?

La documentación la leí y de hecho, ya he realizado un insert a la base de datos usando estas reglas y todo ha funcionado perfectamente...

Gracias...
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose

Etiquetas: post
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 07:22.