Ir al contenido


Foto

¿Cómo preselecciono una opción de acuerdo al valor de una consulta en una lista?


  • Por favor identifícate para responder
10 respuestas en este tema

#1 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 02 enero 2010 - 02:43

Hola amigos, tengo un List/Menu en HTML la cual cargo el contenido desde una tabla, hasta ahí bien, pero ¿cómo preselecciono la fila de la lista de acuerdo al resultado de un consulta?, por ejemplo:

select * from animales

el resultado sería la siguiente:



html5
  1. <select name="select" id="select">
  2.       <option value="1">Perro</option>
  3.       <option value="4">Gato</option>
  4.       <option value="3">Paloma</option>
  5.     </select>



Ahí ya están precargadas la tabla animales, pero y siquiero que Paloma sea lo que me muestre en vez de Perro que es el primero a través del resultado de una consulta?:

select ID from animales where ID = 3

¿es posible eso o se debe incurrir a javascript?.

Fleon xD
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 enero 2010 - 03:13

Pues tal vez si amigo, aunque no se JS

Salud OS
  • 0

#3 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 02 enero 2010 - 09:39

Hola Fleon


En HTML para la etiqueta OPTION existe el atributo SELECTED y su función es precisamente señalar cuál de los elementos de la lista deberá aparecer como seleccionado.



html5
  1. <select name="select" id="select">
  2.       <option value="1">Perro</option>
  3.       <option value="4">Gato</option>
  4.       <option value="3" SELECTED >Paloma</option>
  5.     </select>



Saludos




  • 0

#4 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 03 enero 2010 - 04:51

Gracias Hector, pero eso está bien si lo hago manualmente fijate, mira como cargo la tabla animales a la lista:



php
  1. <td><select name="seccion" spry:selected="', $fila['idsec'] ,'">';
  2.  
  3. foreach ($context['secciones'] as $secciones)
  4. {
  5. echo '<option value="' . $secciones['id']  . '">' . $secciones['lenguaje'] . '</option>';
  6. }
  7.  
  8. echo '</select>
  9.   </td>



Ahí sólo cargo la tabla de animales hasta ahora todo bien, pero debo hacer una consulta a otra tabla donde uno de sus campos se guarda el id del animal y debo preseleccionar a esa misma lista ese id (es un formulario de edición), no se si me di a explicar :$.

Fleon xD.


  • 0

#5 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 06 enero 2010 - 01:49

Me acaba de ocurrir lo siguiente, no tengo mis archivos a mano así que lo hago al aire:



php
  1. <select name="seccion" spry:selected="', $fila['idsec'] ,'">';
  2.  
  3. foreach ($context['secciones'] as $secciones)
  4. {
  5.           if ($value == $secciones['id']) {
  6. echo '<option value selected="' . $secciones['id']  . '">' . $secciones['lenguaje'] . '</option>';
  7.         } else {
  8. echo '<option value selected="' . $secciones['id']  . '">' . $secciones['lenguaje'] . '</option>';
  9.           }
  10. }
  11.  
  12. echo '</select>



Más o menos así, ¿funcionaría?, lo que no sabría es cómo comparar los valores de los option con el campo de la consulta.

Fleon xD
  • 0

#6 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 06 enero 2010 - 03:36

Hola Fleon

Trataré de explicar cómo lo haría yo:

Suponiendo que ya tengo guardado el ID que debe aparecer como seleccionado en una variable llamada $id_sel.

Ahora mientras vamos cargando la lista dentro del ciclo for debemos preguntar si el ID del elemento actual es el que tengo almacenado en la variable $id_sel. Si es así, simplemente añadimos la cláusula SELECTED en la etiqueta OPTION, si el elemento actual no es el que deseamos que se muestre seleccionado, entonces no colocamos la etiqueta SELECTED y en su lugar dejamos el espacio en blanco.

Algo de código como ejemplo:



php
  1. $lista = array(1=> 'perro', 4=> 'gato', 3=> 'paloma');
  2.  
  3. echo '<SELECT>';
  4. $id_sel=4; // Seleccionamos como ejemplo el ID=4 para gato
  5.  
  6. foreach ($lista as $valor => $elemento){
  7.  
  8. $sel=($id_sel==$valor?' SELECTED=selected ':' '); // Ojo en esta línea
  9. echo '<OPTION value='.$valor.$sel.'>'.$elemento.'</OPTION>';
  10. }
  11. echo '</SELECT>'



Estoy utilizando un operador especial para comparar valores en una sola línea



php
  1. $sel=($id_sel==$valor?' SELECTED=selected ':' ');
  2.  
  3. //La línea anterior es equivalente con lo siguiente
  4. if ($id_sel==$valor)
  5.   $sel=' SELECTED=selected ';
  6. else
  7.   $sel=' ';



Es decir solamente se agrega el atributo SELECTED cuando encontramos el id buscado, en caso contrario dejamos el espacio en blanco.

Saludos







  • 0

#7 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 06 enero 2010 - 05:31

¡Muchas gracias Héctor! ¡me ha funcionado de maravillas!, ahora tengo una inquietud, eso me funciona perfecto sólo pequeñas cantidad de registros que puedo colocarlo dentro de un array de forma manual, pero, ¿y si son miles?, ¿como meto eso dentro de un array?.

Fleon xD
  • 0

#8 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 06 enero 2010 - 07:09

Bueno aquí inventando hice lo siguiente:



php
  1. $lista_title = array(
  2. foreach ($context['titles'] as $Titulos)
  3. {
  4. $Titulos['id'] => $Titulos['Titulo'],
  5. }
  6. );
  7.  
  8.  
  9.   foreach ($lista_title as $titles => $relacion)
  10. {
  11. $sel=($fila['idrel'] == $relacion?' SELECTED=selected ':''); // Ojo en esta línea
  12. echo '<OPTION value='.$titles.$sel.'>'.$relacion.'</OPTION>';
  13. }



Pues no me funcionó, me dio error en la línea:



php
  1. $lista_title = array(
  2. foreach ($context['titles'] as $Titulos)



:$ :$ Fleon xD
  • 0

#9 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 06 enero 2010 - 07:52

Regresando al ejemplo original, mencionaste que ya podías recuperar la lista desde una tabla, ahora solamente agrega la condición para que te muestre el elemento seleccionado:



php
  1. $id_sel=4; // solo como ejemplo suponiendo que existe un ID con valor 4
  2. foreach ($context['secciones'] as $secciones)
  3. {
  4.                 $sel=($id_sel==$secciones['id'])?' SELECTED = selected ':' ';
  5. echo '<option value="' . $secciones['id'].'"'.$sel.'>' . $secciones['lenguaje'] . '</option>';
  6. }



Saludos
  • 0

#10 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 07 enero 2010 - 09:15

Creo que no me hice entender, lo que quise decir es crear el array "$lista" desde una base de datos en vez de manera manual, en unos casos tendré arrays de sólo 6 registros como en el caso de $lista que nada más tiene Perros, gatos y Palomas, pero habrán casos donde debe tener 100 registros, aquí es donde quiero llegar, pues esos datos serán dinámicos, o sea, cargar el array $lista desde una BD. Creo que ahora sí me hice entender :$

Fleon xD
  • 0

#11 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 08 enero 2010 - 05:20

¿Nadie? :(
  • 0




IP.Board spam blocked by CleanTalk.