| |||
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? |
| |||
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, |
| |||
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: UN saludo, |
| |||
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 |
| |||
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, |
| |||
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. |
| |||
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 |
| |||
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. |
| |||
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. |