Foros del Web » Programando para Internet » PHP »

Recoger datos de un Select Múltiple

Estas en el tema de Recoger datos de un Select Múltiple en el foro de PHP en Foros del Web. Dado un formulario para subir datos a una bd, tengo un select múltiple donde el usuario va a poder escoger varias opciones, para los demas ...
  #1 (permalink)  
Antiguo 06/12/2004, 03:10
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
Recoger datos de un Select Múltiple

Dado un formulario para subir datos a una bd, tengo un select múltiple donde el usuario va a poder escoger varias opciones, para los demas campos no tengo ningún problema pero para recoger los datos del múltiple he estado haciendo pruebas pero no sé como hacerlo.
Llamandose el select operacion y las opciones piso venta, piso alquiler, local venta, local alquiler por ejemplo cómo puedo pasar la información a la base de datos inmobiliaria y la tabla pisos_venta, siendo el campo operacion si el cliente escoge por ejemplo las dos opciones piso venta y piso alquiler, nada más, decir que busqué en las FAQS por el índice y no ví nada que me pudiera ayudar, la conexión a la bd y la consulta para las demas cosas sería:

Código PHP:
//conecto con la bd
$conexion mysql_connect("localhost","root","") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("inmobiliaria",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca. 

//insertamos los datos en la BD. 
$consulta_insertar "INSERT INTO pisos_venta (id, referencia,fecha,imagen1,imagen2,imagen3,imagen4,descripcion, operacion) VALUES ('', '".$_POST['referencia']."','".$_POST['fecha']."','temporal/thumbs/tn_$nombre_archivo','temporal/thumbs/tn_$nombre_archivo2','temporal/thumbs/tn_$nombre_archivo3','temporal/thumbs/tn_$nombre_archivo4','".$_POST['descripcion']."')"
echo 
$consulta_insertar;
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
header("location: pisos_alquiler.php?s=1"); // si ha ido todo bien 
exit; 



    }else{ 
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse."
    } 

me faltaría poner '"$_POST['operacion']."' ¿sería así como se pone? o faltaría algo más en otra parte del código?,en la página donde está el formulario habría que poner algo más? aparte del select y las opciones? y otra cosa, debería añadir tantos campos a la bd como opciones tengo, verdad? porque luego a la hora de hacer consultas, cuando un articulo sea de dos opciones........ gracias de antemano

Última edición por pipo2005; 06/12/2004 a las 03:41
  #2 (permalink)  
Antiguo 06/12/2004, 03:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
A ver encontré algo leyendo un montón de hojas de temas, en concreto un tema que trató el maestro Cluster acerca de lo que necesito.
Una vez puesto en el formulario select name="operacion[]" ahora tengo
Código PHP:
foreach ($_POST['operacion'] as $operacion){ 
echo 
$operacion."<br>"

para poner en la página donde recojo los datos pero ahora me falta saber como usar esto y donde ponerlo, asi que ........... sigo pensando en cómo tiene que ser el campo operacion de tabla en la bd, de que tipo para poder almacenar varias opciones, a ver si me hechais un cable

Última edición por pipo2005; 06/12/2004 a las 04:03
  #3 (permalink)  
Antiguo 06/12/2004, 04:01
Avatar de redlor  
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 13 años, 1 mes
Puntos: 0
La idea va encaminada. No se si lo sabes, pero para recoger en el select más de un valor debes declararlo como: <select ... name="operacion[]"..>.

En la página destino lo puedes recoger con $opraciones = $_POST['operacion'] y recorrer
esta vble como si de un array se tratase, ejecutando pra cada elemento la consulta de insercción que has indicado.

Respecto a la última duda, lo podrías hacer así (un campo por tipo en l tabla piso), pero queda más 'elegante' si te defines una tabla tipo (con los distintos tipos de piso: alquiler, venta...) y una tabla que relacione los índices de los pisos con los tipo (tabla piso_tipo).

No se si respondo a tus dudas...
Chao
  #4 (permalink)  
Antiguo 06/12/2004, 04:18
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
gracias por tu ayuda redlor, con lo último de las tablas me he perdido un poco, llevo muy poco con esto, prefiero primero aclarar las dudas que tengo ahora y luego ya veré, primero necesito entender esto.
Bien me dices
En cuanto a lo que me dices no lo entiendo muy bien, a ver,
Hago tantos campos en la tabla como opciones tenga, no?, los campos se llamarian operacion, operacion1, operacion2, etc etc ? a operacion irian por ejemplo la opcion pisos venta, a operacion1 pisos alquiler, etc, algo así?
Cómo relaciono pisos venta con operacion y pisos alquiler con operacion1, etc.?
Pongo en la página que recibe los datos del formulario que es :
Código PHP:
$operaciones $_POST['operacion']//ESTO ES LO QUE TU ME PONES
//conecto con la bd 
$conexion mysql_connect("localhost","root","") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("inmobiliaria",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca. 

//insertamos los datos en la BD.
 
$consulta_insertar "INSERT INTO pisos_venta (id, referencia,fecha,imagen1,imagen2,imagen3,imagen4,d  escripcion, operacion, operacion1) VALUES ('', '".$_POST['referencia']."','".$_POST['fecha']."','temporal/thumbs/tn_$nombre_archivo','temporal/thumbs/tn_$nombre_archivo2','temporal/thumbs/tn_$nombre_archivo3','temporal/thumbs/tn_$nombre_archivo4','".$_POST['descripcion']."','".$_POST['operacion']."''".$_POST['operacion1']."')"
echo 
$consulta_insertar
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
header("location: pisos_alquiler.php?s=1"); // si ha ido todo bien 
exit; 



    }else{ 
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse."
    } 

Sería algo así?, perdona las molestias y muchas gracias por tu interés

Última edición por pipo2005; 06/12/2004 a las 04:20
  #5 (permalink)  
Antiguo 06/12/2004, 04:22
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
Espera, lo de relacionar cada opción con cada campo hay que hacerlo en el formulario, pero .......
  #6 (permalink)  
Antiguo 06/12/2004, 05:05
Avatar de redlor  
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 13 años, 1 mes
Puntos: 0
A ver, a lo mejor no te he entendido bien.

- Tienes una tabla "piso" (Supongamos con un IdPiso como clave)
- Tienes una tabla "tipo" (Supongamos con un IdTipo como clave) para los distintos tipos de pisos: alquiler, venta...

IdPiso NombrePiso
-----------------------
1 mipiso1
2 mipiso2

IdTipo NombreTipo
-----------------------
1 en venta
2 en alquiler

no?

Simplemente te recomendaba que tuvieras una tabla tipo_piso que relacionara un piso con sus diferentes tipos. Por ejemplo: Tienes el Piso1 (IdPiso 1) que puede estar en venta (IdTipo 1) y en alquiler (IdTipo2). Pues en la tabla tipo_piso inserta dos entradas para ambas relaciones:

IdTipoPiso IdPiso IdTipo
-----------------------
1 1 1
2 1 2
Ahora bien, cómo hacer la insercción??

Pon en le select: <select name="operacion[]"...... Con ésto le dices que vas a recoger más de un valor.

Cuando recojas el contenido cn el POST['opciones'], tendrás un array con todas las opciones seleccionadas (Te recomiendo que trabajes con identificadores, ed, que le pongas en los value de cada option el identificador de la tabla tipo para el tipo de piso correspondiente).

Supongamos q lo has hecho de esta forma. Tendrás un array de identificadores de tipo_piso no? Pues recorrelo e inserta para cada uno de estos identificadores haz un INSERT en la tabla tipo_piso con el identificador del piso y el del tipo que recuperas del array enviado por el select.

Con ésto tienes relacionado cada piso con sus distintos tipos sin necesidad de tener un campo por tipo en la base de datos.

Así es como yo resuelvo estas relaciones, es simplemente una referencia por si quieres almacenar las relacioenes de esta forma. Chao

Última edición por redlor; 06/12/2004 a las 05:07
  #7 (permalink)  
Antiguo 06/12/2004, 05:26
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
Muchas gracias por tu interés, como te dije antes soy nuevo en esto y llevo poco tiempo, así que me tienes que dar tiempo para dijerir lo que me acabas de comentar para así poder entenderlo, voy a intentar trabajar con ello y si eso ya te comentaré, lo dicho muchas gracias, vaya líoooooo
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:34.