Foros del Web » Programando para Internet » PHP »

Auto selected

Estas en el tema de Auto selected en el foro de PHP en Foros del Web. Buenas! Llevo un rato probando algunas cosas pero realmente no se me ocurre como hacerlo. Estoy intentando que el select, ponga como selected la opción ...
  #1 (permalink)  
Antiguo 21/05/2010, 04:44
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 10 meses
Puntos: 5
Auto selected

Buenas!

Llevo un rato probando algunas cosas pero realmente no se me ocurre como hacerlo. Estoy intentando que el select, ponga como selected la opción que esta guardada en la base de datos para que al editar este marcada y si no quiere cambiar esa opción, no se tenga que volver a marcar para que no se cambie.

He probado varios metodos mas o menos que se me ocurrian pero ninguno funciona. Tengo el php y el html separado en un archivo tpl, quizas mi problema es que no se muy bien como imprimir el resultado del selected en el tpl (aunque lo dudo)

Dejo el codigo que utilizo o almenos la zona importante

Código PHP:
Ver original
  1. $q = "SELECT * FROM " . TBL_NOTICIAS . " WHERE id = " . $_GET['id'];
  2.     $result = $database->query($q);
  3.     $noticias = mysql_fetch_array($result);
  4.    
  5.     include("templates/Style/noticias_editar.tpl");
  6.     include("templates/Style/footer.tpl");

y el HTML

Código HTML:
Ver original
  1. <b>Fase:</b> <select name="SCat" size="1">
  2.                                                 <option value='Aviso' <?=$selected?>>Aviso</option>
  3.                                                 <option value='Sistema' <?=$selected?>>Sistema</option>
  4.                                                 <option value='Estructura' <?=$selected?>>Estructura</option>
  5.                                                 <option value='Diseño' <?=$selected?>>Diseño</option>
  6.                                             </select>

Espero me podais ayudar, ya no se que mas hacer e__e En el HTML esta la variable selected, en el php no porque lo acabo de borrar ya que no devolvia nada...
  #2 (permalink)  
Antiguo 21/05/2010, 04:51
 
Fecha de Ingreso: mayo-2010
Ubicación: www.brumasound.com
Mensajes: 52
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Auto selected

Puedes asignarle al campo de la base de datos dos valores, por ejemplo o cero o uno. Cuando sea cero que este desmarcado y uno marcado.

Luego es solo hacer un if, y si es uno que lo muestre seleccionado.
  #3 (permalink)  
Antiguo 21/05/2010, 04:52
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 18 años
Puntos: 8
Respuesta: Auto selected

pero tendrás que comparar el value de cada option con el valor de la base de datos para decidir si ha de estar seleccionado o no.
suponiendo que en la variable selected esté el valor recogido de la bbdd correspondiente al option:
<option value='Aviso' <?php if($selected=="Aviso") { echo 'selected="selected"'; } ?>>
  #4 (permalink)  
Antiguo 21/05/2010, 04:58
 
Fecha de Ingreso: mayo-2010
Ubicación: www.brumasound.com
Mensajes: 52
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Auto selected

Ah tu lo que quieres es que en la lista te aparezca siempre un valor como predeterminado?
  #5 (permalink)  
Antiguo 21/05/2010, 05:37
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: Auto selected

Anteriormente lidiaba con condicionales para asegurarme de que el option indicado apareciera seleccionado. Luego -y después de tanto golpe- descubrí una opción más rápida. Te dejo aquí parte del código:

Código PHP:
Ver original
  1. <?php
  2. $genero = 'un array desde la BD...';
  3. $html = '<select name="genero" id="genero">';
  4. foreach($genero as $gen)
  5.     $select_genero .= '<option value="'. htmlspecialchars($gen) .'">'. $gen .'</option>';
  6. $html .= str_replace('value="'. $config['genero'] .'"' , 'value="'. $config['genero'] .'" selected="selected"' , $select_genero);
  7. $html .='</select>';
  8. ?>
Explicando: se hizo un simple str_replace al value coincidente con el valor ingresado en la BD, agregándole selected="selected". Este truco sólo funciona con elementos de formularios que admitan opciones únicas (como selects o radios). Para campos con múltiples opciones lógicamente el truco no sirve, a menos que se coloque el reemplazo como un array y por lo tanto implicaría un trabajo más engorroso.
  #6 (permalink)  
Antiguo 21/05/2010, 07:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 7 meses
Puntos: 1517
Respuesta: Auto selected

@metacortex, interesante forma de hacerlo. Les propongo otra forma de hacerlo
Código PHP:
Ver original
  1. <?php
  2. $genero = 'un array desde la BD...';
  3. $html = '<select name="genero" id="genero">';
  4. foreach($genero as $gen){
  5.     $s = ($config['genero'] == $gen ? 'selected="selected"' : '');
  6.     $html .= '<option value="'. htmlspecialchars($gen) .'" '. $s .'>'. $gen .'</option>';
  7. }
  8. $html .='</select>';
En el mismo ciclo añadimos el "selected" y los que no cumplan con la condición se le añade la segunda parte de ese operador ternario. Este método sirve para los campos con múltiples opciones. Solo debe añadir por variables. Ejemplo, algo así (suponiendo que los valores están en un array
Código PHP:
Ver original
  1. <?php
  2. $genero = 'un array desde la BD...';
  3. $html = '<select  multiple="multiple" name="genero" id="genero">';
  4. foreach($genero as $gen){
  5.     $s = (in_array($gen, $array) ? 'selected="selected"' : '');
  6.     $html .= '<option value="'. htmlspecialchars($gen) .'" '. $s .'>'. $gen .'</option>';
  7. }
  8. $html .='</select>';
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 21/05/2010 a las 07:34

Etiquetas: auto, selected
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 21:57.