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

meter un arreglo en un campo de bd

Estas en el tema de meter un arreglo en un campo de bd en el foro de CodeIgniter en Foros del Web. Buenos dias la duda que me a surgido es al estar utilizando un select multiple en codeigniter. Lo que hago es que el usuario pueda ...
  #1 (permalink)  
Antiguo 06/03/2014, 11:14
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
meter un arreglo en un campo de bd

Buenos dias la duda que me a surgido es al estar utilizando un select multiple en codeigniter.

Lo que hago es que el usuario pueda escoger mas de una opcion y despues esos valores guardarlos en la variable e imprimirlos, pero solo obtengo el ultimo valor que se selecciono en el select multiple.

<select class="form-control" name='rol' multiple> asi es como tengo la etiqueta del select multiple, lo que hacia anteriormente es capturar mediante un input post lo que se introducia en el campo rol pero eso solo funcionaba para un solo valor. Despues lo declare como un arreglo pero ahora lanza un error. Fatal error: Cannot use [] for reading in

La idea que tengo es declarar un arreglo, que contenga el valor de rol, mandarlo al controlador, donde una variable contendra el valor de ese rol y lo introducira a la bd, si alguien tiene alguna idea de como solucionar ese error
  #2 (permalink)  
Antiguo 06/03/2014, 17:48
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: meter un arreglo en un campo de bd

si usas form_dropdown() de codeginiter para generar el select en lugar de hacerlo "a mano" podes pasarle un array con los valores seleccionados y listo se acabó el problema
  #3 (permalink)  
Antiguo 12/03/2014, 12:17
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

Checa lo que hice, meti un $options= array, donde meti los valores que estaban dentro del select multiple, despues puse form_dropdown('rol'(que es name del select multiple) y $options). De aqui pretendo que si se llegan a escoger por ejemplo 2 opciones se manden al controlador y los guarde cada uno de manera separada para poder hacer una consulta like en el modelo.

Como paso el form_dropdown al controlador?, no quiero imprimirlo, si no almacenar las opciones que fueran seleccionadas de forma separa, ya las habia guardado y usado un implode, pero no me servia de nada como una cadena de caracteres, quiero cada una aparte.

Si me puedes ayudar con esto
  #4 (permalink)  
Antiguo 12/03/2014, 17:14
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: meter un arreglo en un campo de bd

te llega cada una aparte, el form dropdown cuando lo envias envia un array. Luego para guardar eso correctamente pues tendrás que cambiar el diseño de la base de datos, necesitas una tabla intermedia entre usuarios y roles para poder hacer la relación de n:m
  #5 (permalink)  
Antiguo 12/03/2014, 21:51
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

Ok, pero la otra duda que me salio con eso de cambiar el diseño, es el hecho de que el rol lo estoy capturando en usuarios, ya que cuando se crea un nuevo usuario se le introduce su rol y en roles esta guardado el id, nombre del rol y los permisos los cuales se modifican con checkbox.

Me salio la duda debido a que dices que debo pasar esos valores de rol a otra tabla, si hago eso, no podria relacionar usuarios con rol, ya que no tendria un campo en comun, al contrario de usuarios y rol
  #6 (permalink)  
Antiguo 12/03/2014, 21:59
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: meter un arreglo en un campo de bd

Debes tener una tabla que tenga solo usuarios_id | roles_id y ahí pones los id de cada una de las otras tablas. Es un poco más dificil pero es la forma correcta de hacer que un usuario pueda tener muchos roles.
  #7 (permalink)  
Antiguo 12/03/2014, 22:10
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

a ok ya te entendi, nomas jalo la llave primaria de cada tabla y la meto en esa nueva, para poder hacer la relacion
  #8 (permalink)  
Antiguo 12/03/2014, 22:13
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

no habra problema, si tengo mas registros en un campo que en el otro?, por el hecho de que se repetirian los valores en los campos y ya no seria llave primaria
  #9 (permalink)  
Antiguo 13/03/2014, 10:32
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: meter un arreglo en un campo de bd

no. la clave primaria es compuesta, deben ser las 2 columnas de la tabla a la vez
  #10 (permalink)  
Antiguo 16/03/2014, 15:22
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: meter un arreglo en un campo de bd

yo considero que tu problema se adapta mejor usando ajx con js

saludos
__________________
gerardo
  #11 (permalink)  
Antiguo 17/03/2014, 08:08
 
Fecha de Ingreso: enero-2006
Ubicación: Pina (Mallorca -Illes Balears-)
Mensajes: 348
Antigüedad: 18 años, 2 meses
Puntos: 28
Respuesta: meter un arreglo en un campo de bd

Tabla Usuario
- idusuario (PK)
- nombre usuario
- email
- ...

Tabla Roles
- idrol (PK)
- nombre rol
- ...

Tabla usu_rol
- idusuario (PK)
- idrol (PK)
- ...


Ésta es la forma de crear una relación N-N, que es la que veo que necesitas. O sea, que un usuario pueda tener N roles y que cada rol pueda tener N usuarios.

En la tabla usu_rol tendrás un registro para cada relación usuario-rol. O sea, "Pepito" es "administrador" y "gestor", pues en esa tabla habrá dos registros.

Espero que te sirva.

Un saludo.
__________________
Comprar vino mallorquin
  #12 (permalink)  
Antiguo 18/03/2014, 15:22
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

Eso de la bd si te entendi, se van a meter las llaves primarias de ambas tablas, para poder hacer la relacion.

Pero mi duda esta en el hecho de que en la tabla de usuario, se tendran tambien los roles que usuario pueda tener, pudiendo ser mas de uno.

Mientras que en la de roles, se tiene el id de rol y su correspondiente rol siendo solo 1. a lo que me refiero es que en una se pueden tener dos mientras que en la otra tabla solo sera un rol.

Otra cosa para ver si esta bien es el select multiple de los roles en el formulario de usuarios. lo hice asi

<select class="form-control" name='rol' multiple>
<option value="Titular de la unidad administrativa">Titular de la unidad administrativa</option>
<option value="Representante de la direccion">Representante de la direccion</option>
<option value="Coordinador ISO">Coordinador ISO</option>
<option value="Enlaces ISO">Enlaces ISO</option>
<option value="Usuarios">Usuarios</option>
<option value="Titular de la CCC">Titular de la CCC</option>
<option value="Subdireccion de soporte">Subdireccion de soporte</option>
<option value="Subdireccion de procesos">Subdireccion de procesos</option>
<option value="Jefe de departamento de capacitacion">Jefe de departamento de capacitacion</option>
<option value="Jefe de departamento de proyectos">Jefe de departamento de proyectos</option>
<option value="Jefe de departamento de auditorias de calidad">Jefe de departamento de auditorias de calidad</option>
<option value="Auditor lider">Auditor lider</option>
<option value="Auditor interno">Auditor interno</option>
</select>
</div>

Mientras que la parte del form dropdown la hice asi, como me habian comentado.

<?
$options = array(
'Titular de la unidad administrativa' => 'Titular de la unidad administrativa',
'Representante de la direccion' => 'Representante de la direccion',
'Coordinador ISO' => 'Coordinador ISO',
'Enlaces ISO' => 'Enlaces ISO',
'Usuarios' => 'Usuarios',
'Titular de la CCC' => 'Titular de la CCC',
'Subdireccion de soporte' => 'Subdireccion de soporte',
'Sbudireccion de procesos' => 'Subdireccion de procesos',
'Jefe de departamento de capacitacion' => 'Jefe de departamento de capacitacion',
'Jefe de departamento de proyectos' => 'Jefe de departamento de proyectos',
'Jefe de departamento de auditorias de calidad' => 'Jefe de departamento de auditorias de calidad',
'Auditor lider' => 'Auditor lider',
'Auditor internio' => 'Auditor interno',
);
form_dropdown('rol', $options);
?>

Ahi mi duda en caso de estar bien, como es que lo mandaria al controlador, para que los guarde por separado cada valor obtenido, como habian comentado es que lo hace el form_dropdown ya que antes los habia guardado usando un implode, pero necesito que cada uno este por separado para poder hacer comparaciones.
  #13 (permalink)  
Antiguo 18/03/2014, 17:47
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: meter un arreglo en un campo de bd

Para guardar:

1_ Forma fea pero fácil: un foreach y dentro 1 insert que se ejecute tantas veces como sea necesario.
2_ Forma linda: codeigniter tiene una funcion batch_insert, que no es muy conocida y genera la consulta insert para insertar varios registros al mismo tiempo.

No olvides antes de realizar la inserción borrar los registros anteriores que correspondian a ese usuario para que no se superpongan.
  #14 (permalink)  
Antiguo 18/03/2014, 19:40
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

Seria asi
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
),

$this->db->insert_batch('mytable', $data);
  #15 (permalink)  
Antiguo 20/03/2014, 11:48
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

no se si explique, que ese campo rol forma parte de la misma tabla de empleados, de aqui otra duda y una idea que tengo, si hago el insert batch con todos los datos de la tabla empleados, no tendria porque afectarme con los otros campos, ya que los demas solo mandaria un valor a diferencia de los del campo rol?
  #16 (permalink)  
Antiguo 20/03/2014, 13:32
 
Fecha de Ingreso: marzo-2014
Ubicación: mexico
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: meter un arreglo en un campo de bd

No se podria meter un for en el controlador para hacer el recorrido del arreglo que se manda mediante el select multiple para que el campo rol, captura los valores

Etiquetas: arreglo, bd, campo, meter
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 23:20.