Foros del Web » Programando para Internet » PHP »

Grabar datos de un select multiple en la base de datos

Estas en el tema de Grabar datos de un select multiple en la base de datos en el foro de PHP en Foros del Web. Alguien puede ayudarme?. Necesito grabar datos de un select multiple en la base de datos y despues recuperar los datos en una página. ¿como se ...
  #1 (permalink)  
Antiguo 27/12/2005, 07:59
 
Fecha de Ingreso: febrero-2005
Mensajes: 22
Antigüedad: 12 años, 9 meses
Puntos: 0
Grabar datos de un select multiple en la base de datos

Alguien puede ayudarme?. Necesito grabar datos de un select multiple en la base de datos y despues recuperar los datos en una página. ¿como se hace?
  #2 (permalink)  
Antiguo 27/12/2005, 10:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Los datos de tu select multiple los obtienes en tu scritp PHP de proceso como un array (si seleccionas más de uno).

Si usastes por ejemplo POST en tu formulario .. tendras un array en:

<select name="nose" multiple>
etc ...
</select>

// Una prueba para ver que contiene tus variables externas (por POST).
print_r($_POST['nose']);


Como array que es .. puedes hacer lo que gustes con ella.

Deberías aclarar como piensas registrar esos datos en tus Base de datos; puedes hacerlos de dos formas mínimo:

1) Normalizado en tu BD .. es decir, crear una tabla anexa (vinculada) a tu tabla principal donde cada registro sea uno de esos valores que seleccionastes en tu select multiple.

2) Usando un sólo campo de tu tabla padre con los valores que se seleccionaron separados por algún separador (caracter) tipo , (coma) o similar.

Cada opción tiene sus ventajas y desventajas.

La primera opción complica un poco las consultas SQL a realizar para obtener sus datos .. pero a su vez es más versátil si deseas emitir informes o realizar busquedas complejas en función de esos datos.

La segunda opción es más simple de gestionar la escritura de datos en ella y la lectura .. no tan así un eventual borrado de alguno de estos datos ni actaulizaciones ademas que se complica si necesitas hacer informes complejos en base a esos datos (o agrupamientos y demás ...).

Piensatelo y decide .. o por lo menos indica que vas hacer con esos datos ...

Un saludo,
  #3 (permalink)  
Antiguo 28/12/2005, 07:18
 
Fecha de Ingreso: febrero-2005
Mensajes: 22
Antigüedad: 12 años, 9 meses
Puntos: 0
Hola
Me gustaria poder poner cada elemento en una tabla vinculada. ¿Como se haria?
  #4 (permalink)  
Antiguo 28/12/2005, 07:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sería cosa de recorrer ese array que tu select multiple va a originar cara a PHP al recibirlo tu script PHP de proceso ..

Tendrás que tener una tabla tipo:
tabla_vinculada
id_tabla_vinculada
id_relacion
dato

En consecuencia .. generas un "INSERT" por cada elemento recorrido por un bucle (foreach()).

Código PHP:
foreach ($_POST['nose'] as $nose){
   
$sql="INSERT INTO tabla_vinculada (id_tabla_vinculada,id_relacion,dato) VALUES ('','".$_POST['id']."','".$nose."')";
   
mysql_query($sql);

El campo "id_relacion" sería el campo que va a relacionar tus "opciones" con el registro "padre" que le corresponda .. supongo que esde dato viajará en tu formulario .. o lo generas a la hora de crear tu registro "padre" con los otros datos del formulario.

UN saludo,
  #5 (permalink)  
Antiguo 28/12/2005, 07:43
 
Fecha de Ingreso: febrero-2005
Mensajes: 22
Antigüedad: 12 años, 9 meses
Puntos: 0
Muchas gracias Cluster. Me pondré a ello, ya te diré si lo he conseguido.

Un saludo
  #6 (permalink)  
Antiguo 07/03/2006, 11:12
 
Fecha de Ingreso: noviembre-2005
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Y si lo que quieres es guardarlo en un solo campo... ¿Cómo harías?

Pues eso.
El select me muestra los valores de una base de datos.
Yo quiero seleccionar más de uno (mediante un array, supuesto).
¿Cómo los envio a la base de datos separados por comas o lo que sea y que no me almacene el tipico "Array", es decir, cuando envio los valores del array en la base de datos solo me pone "Array" literalmente.

Gracias y un saludo
  #7 (permalink)  
Antiguo 07/03/2006, 11:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te dice "Array" por qué eso es lo que estás enviando . .tu necesitas "serializar" ese array .. o dicho de otra forma "convertir" tu array en un "string" (cadena) que es lo que al final almacenas en tu BBDD en un campo de la misma (tipo texto).

Para eso . .usa la función:

implode()
www.php.net/implode

y así generas un string de un array dado separado sus elementos por el caracter que gustes (coma o como quieras).

Un saludo,
  #8 (permalink)  
Antiguo 07/03/2006, 15:10
 
Fecha de Ingreso: noviembre-2005
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Gracias Cluster, voy a intentarlo y te cuento.
  #9 (permalink)  
Antiguo 07/03/2006, 15:26
 
Fecha de Ingreso: noviembre-2005
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Nada, le estoy dando al coco, pero na.. toi espeso

Ahí te dejo el código. Haber si se te ocurre algo...

<select name="select_grupotrabajo" multiple id="select_grupotrabajo">
<?php
do {
?>
<option value="<?php echo $row_Recordset_grupotrabajo['grupo']?>"><?php echo $row_Recordset_grupotrabajo['grupo']?></option>
<?php
} while ($row_Recordset_grupotrabajo = mysql_fetch_assoc($Recordset_grupotrabajo));
$rows = mysql_num_rows($Recordset_grupotrabajo);
if($rows > 0) {
mysql_data_seek($Recordset_grupotrabajo, 0);
$row_Recordset_grupotrabajo = mysql_fetch_assoc($Recordset_grupotrabajo);
}
?>
</select>

La etiqueta del select y el valor lo obtiene de una base de datos.

Graciasssssss.
  #10 (permalink)  
Antiguo 07/03/2006, 17:14
 
Fecha de Ingreso: noviembre-2005
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Hola de nuevo.
He probado con esto:

<select name="select_grupotrabajo" multiple id="select_grupotrabajo">
<?php
do {
?>
<option value="<?php $array = array ($row_Recordset_grupotrabajo['grupo']);
$valor = implode (",", $array);
echo $valor;?>"><?php
echo $row_Recordset_grupotrabajo['grupo']
?></option>
<?php
} while ($row_Recordset_grupotrabajo = mysql_fetch_assoc($Recordset_grupotrabajo));
$rows = mysql_num_rows($Recordset_grupotrabajo);
if($rows > 0) {
mysql_data_seek($Recordset_grupotrabajo, 0);
$row_Recordset_grupotrabajo = mysql_fetch_assoc($Recordset_grupotrabajo);
}
?>


y tampoco va.

No se como hacerlo
  #11 (permalink)  
Antiguo 08/03/2006, 04:08
 
Fecha de Ingreso: noviembre-2005
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Otra nueva intentona con implode

Ahora pongo el implode donde se recoge el valor de la variable para enviarla por POST.

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO ficha_juego (nombre, Descripcion, Variantes, Fuente_biblio, Material, Objetivos, Observaciones, Lugar, autor, imagen, id_usuario, fecha_creacion, grupo_trabajo, deporte, interaccion) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['Descripcion'], "text"),
GetSQLValueString($_POST['Variantes'], "text"),
GetSQLValueString($_POST['Fuente_biblio'], "text"),
GetSQLValueString($_POST['Material'], "text"),
GetSQLValueString($_POST['Objetivos'], "text"),
GetSQLValueString($_POST['Observaciones'], "text"),
GetSQLValueString($_POST['Lugar'], "text"),
GetSQLValueString($_POST['autor'], "text"),
GetSQLValueString($_POST['imagen'], "text"),
GetSQLValueString($_POST['id_usuario'], "int"),
GetSQLValueString($_POST['fecha_creacion'], "date"),
GetSQLValueString(implode (": ",$_POST['select_grupotrabajo']), "text"),
GetSQLValueString($_POST['textfield_deporte'], "text"),
GetSQLValueString($_POST['select_interaccion'], "text"));

Y tampoco va.
No adjudica ningún valor al campo grupo_trabajo (tendría que recogerlo de: "GetSQLValueString(implode (": ",$_POST['select_grupotrabajo']), "text")"), pero la cadena la devuelve vacia.

No se lo que falla.

Ayudaaaaaaaaaaaaaa.
  #12 (permalink)  
Antiguo 08/03/2006, 05:05
 
Fecha de Ingreso: noviembre-2005
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Hola de nuevo a todo el mundo.

Solucionado el problema.

La solución estaba en el select al que no había puesto en "name" las [], es decir, el codigo queda como sigue:

Para recoger las variables con el select:

<select name="select_grupotrabajo[]" multiple id="select_grupotrabajo">
<?php
do {
?>
<option value="<?php echo $row_Recordset_grupotrabajo['grupo'];?>"><?php echo $row_Recordset_grupotrabajo['grupo']
?></option>
<?php
} while ($row_Recordset_grupotrabajo = mysql_fetch_assoc($Recordset_grupotrabajo));
$rows = mysql_num_rows($Recordset_grupotrabajo);
if($rows > 0) {
mysql_data_seek($Recordset_grupotrabajo, 0);
$row_Recordset_grupotrabajo = mysql_fetch_assoc($Recordset_grupotrabajo);
}
?>


Y para incluir los valores del array separados por coma:


if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO ficha_juego (nombre, Descripcion, Variantes, Fuente_biblio, Material, Objetivos, Observaciones, Lugar, autor, imagen, id_usuario, fecha_creacion, grupo_trabajo, deporte, interaccion) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['Descripcion'], "text"),
GetSQLValueString($_POST['Variantes'], "text"),
GetSQLValueString($_POST['Fuente_biblio'], "text"),
GetSQLValueString($_POST['Material'], "text"),
GetSQLValueString($_POST['Objetivos'], "text"),
GetSQLValueString($_POST['Observaciones'], "text"),
GetSQLValueString($_POST['Lugar'], "text"),
GetSQLValueString($_POST['autor'], "text"),
GetSQLValueString($_POST['imagen'], "text"),
GetSQLValueString($_POST['id_usuario'], "int"),
GetSQLValueString($_POST['fecha_creacion'], "date"),
GetSQLValueString(implode (", " ,$_POST['select_grupotrabajo']), "text"),
GetSQLValueString($_POST['textfield_deporte'], "text"),
GetSQLValueString($_POST['select_interaccion'], "text"));

Muchas gracias, espero que alguien pueda utilizar esto.

La verdad es que es un poco frustrante a veces comprobar como por dos simples [] te puedes tirar 6 horas dándole vueltas al asunto. Pero al final es muy gratificante dar con la solución.

Lo dicho, gracias y hasta el próximo problema, que probablemente surga a la hora de modificar los valores enviados por el array en una página de modificación de los datos del 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 04:47.