Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Option selected en select php

Estas en el tema de Option selected en select php en el foro de PHP en Foros del Web. Hola, estoy sacando datos a través de un select, pero es para un archivo a través del cual actualizo datos. A través de este select ...
  #1 (permalink)  
Antiguo 08/08/2013, 04:03
dankko
Invitado
 
Mensajes: n/a
Puntos:
Option selected en select php

Hola, estoy sacando datos a través de un select, pero es para un archivo a través del cual actualizo datos.

A través de este select saco datos de tablas relacionadas, por ejemplo:

Tabla User:
id = 1
nombre = Jose
id_pais = 40

Tabla Pais

id_pais = 40
nombre_pais = españa

Lo que quiero al actualizar a Jose, es que en el select me salga como opción seleccionada el país que ya tenía marcado antes, es decir, el país con el ID 40, ya que si no la mantengo seleccionada tengo que volver a marcar España cada vez que edite porque me sale el país con el ID 1.

Saco los datos del select de esta manera (usaré los mismos datos del ejemplo):


Código PHP:
Ver original
  1. <select name="id_pais">
  2. <?php
  3. $ssql = "select * from pais";
  4. $rs = mysql_query ($ssql);
  5. while ($fila = mysql_fetch_array($rs)){
  6.    
  7.     echo "<option value=" . $fila["id_pais"] . ">" . utf8_encode($fila["nombre_pais"]) . "</option>";
  8.     }
  9. ?>
  10. </select>


Si no modifico el select, logicamente como lo que hace es sacar todos los datos en un select, va a mandar el value="1" y modificará el id_pais, sin que yo haya querido modificar eso relamente.

¿Qué puedo hacer?
  #2 (permalink)  
Antiguo 08/08/2013, 04:14
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 14 años, 9 meses
Puntos: 22
Respuesta: Option selected en select php

Tienes que obtener el id del país que tiene el usuario seleccionado y hacer una comparación. Si son iguales, añades el atributo "selected" al option que corresponda. Suponiendo que tengas un array llamado $datos_usuario con los datos del usuario, tendrías que cambiar la línea 6 por lo siguiente:

Código PHP:
Ver original
  1. if ( $datos_usuario["id_pais"] == $fila["id_pais"] ){
  2.     echo "<option value='" . $fila["id_pais"] . "' selected='selected'>" . utf8_encode($fila["nombre_pais"]) . "</option>";
  3. }
  4. else {
  5.     echo "<option value='" . $fila["id_pais"] . "'>" . utf8_encode($fila["nombre_pais"]) . "</option>";
  6. }
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #3 (permalink)  
Antiguo 08/08/2013, 08:05
 
Fecha de Ingreso: enero-2012
Ubicación: <?php echo"Los teques"; ?>/////estado miranda
Mensajes: 196
Antigüedad: 12 años, 3 meses
Puntos: 9
Respuesta: Option selected en select php

Angel Yo en lo personal lo simplificaría así

Código PHP:
Ver original
  1. echo "<option value='".$fila["id_pais"]."' if ( $datos_usuario['id_pais'] == $fila['id_pais'] ){ selected='selected'}>" . utf8_encode($fila["nombre_pais"]) . "</option>";

Enreda un poco, pero nada que unas buenas separaciones en lugares justos no arreglen
  #4 (permalink)  
Antiguo 08/08/2013, 09:46
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Cita:
Iniciado por angelAparicio Ver Mensaje
Tienes que obtener el id del país que tiene el usuario seleccionado y hacer una comparación. Si son iguales, añades el atributo "selected" al option que corresponda. Suponiendo que tengas un array llamado $datos_usuario con los datos del usuario, tendrías que cambiar la línea 6 por lo siguiente:

Código PHP:
Ver original
  1. if ( $datos_usuario["id_pais"] == $fila["id_pais"] ){
  2.     echo "<option value='" . $fila["id_pais"] . "' selected='selected'>" . utf8_encode($fila["nombre_pais"]) . "</option>";
  3. }
  4. else {
  5.     echo "<option value='" . $fila["id_pais"] . "'>" . utf8_encode($fila["nombre_pais"]) . "</option>";
  6. }
De esta manera creo que ya lo intenté (lo he probado y me ha dado el mismo resultado) y lo que hacía era que comparaba los ID del país, si era igual salía bien, pero si no era igual mostraba el último páis, por ejemplo, el país con el ID 100.

Gracias por la respuesta
  #5 (permalink)  
Antiguo 08/08/2013, 10:06
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Cita:
Iniciado por omarinfinito Ver Mensaje
Angel Yo en lo personal lo simplificaría así

Código PHP:
Ver original
  1. echo "<option value='".$fila["id_pais"]."' if ( $datos_usuario['id_pais'] == $fila['id_pais'] ){ selected='selected'}>" . utf8_encode($fila["nombre_pais"]) . "</option>";

Enreda un poco, pero nada que unas buenas separaciones en lugares justos no arreglen

Esto me da el siguiente error:

Código Apache:
Ver original
  1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
  #6 (permalink)  
Antiguo 08/08/2013, 10:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Option selected en select php

Cita:
Iniciado por dankko Ver Mensaje
Esto me da el siguiente error:

Código Apache:
Ver original
  1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Pues claro, si copias y pegas código sin saber lo que hace.

Un tanto tu culpa, y también culpa de omarinfinito por dar código mal hecho.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 09/08/2013, 06:58
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 14 años, 9 meses
Puntos: 22
Respuesta: Option selected en select php

Cita:
Iniciado por dankko Ver Mensaje
De esta manera creo que ya lo intenté (lo he probado y me ha dado el mismo resultado) y lo que hacía era que comparaba los ID del país, si era igual salía bien, pero si no era igual mostraba el último páis, por ejemplo, el país con el ID 100.

Gracias por la respuesta
Un, es un poco raro. Si no encuentra debería preseleccionar el primero. ¿Podrías poner el código modificado para verlo? Gracias.
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #8 (permalink)  
Antiguo 09/08/2013, 15:34
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Cita:
Iniciado por pateketrueke Ver Mensaje
Pues claro, si copias y pegas código sin saber lo que hace.

Un tanto tu culpa, y también culpa de omarinfinito por dar código mal hecho.
Pensé que estaría bien, ya que es muy parecido al que me habían mostrado anteriormente, comparando la variable y si era correcta marcaba el selected... La verdad no encuentro el error ahí, por eso le dije que me daba error.
  #9 (permalink)  
Antiguo 09/08/2013, 15:39
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Cita:
Iniciado por angelAparicio Ver Mensaje
Un, es un poco raro. Si no encuentra debería preseleccionar el primero. ¿Podrías poner el código modificado para verlo? Gracias.
En el archivo para actualizar, hago una llamada para sacar los datos en un value, para que en los input's muestre los datos por si quieren modificarlos.
Aprovechando los valores que saco de esta consulta le doy valor a la variable $datos_usuario.

$datos_usuario = $fila["id_pais"];


Código PHP:
Ver original
  1. <fieldset>
  2.         <label>País:</label>
  3.         <select name="id_pais">
  4. <?php
  5. $ssql = "select * from pais";
  6. $rs = mysql_query ($ssql);
  7. while ($filapais = mysql_fetch_array($rs)){
  8.  
  9. if ( $datos_usuario["id_pais"] == $filapais["id_pais"] ){
  10.     echo "<option value='" . $filapais["id_pais"] . "' selected='selected'>" . utf8_encode($filapais["nombre_pais"]) . "</option>";
  11. }
  12. else {
  13.     echo "<option value='" . $filapais["id_pais"] . "'>" . utf8_encode($filapais["nombre_pais"]) . "</option>";
  14. }
  15.  
  16.     }
  17. ?> 
  18. </select>
  19.         </fieldset>

Quizás el problem sea que esté sacando mal la variable, aunque probé con un echo a ver si era que no me la estaba dando, pero sí, si que la estaba mostrando.

Podría subir también el archivo para actualizar al completo.
  #10 (permalink)  
Antiguo 12/08/2013, 02:34
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 14 años, 9 meses
Puntos: 22
Respuesta: Option selected en select php

Mmm, pues parece correcto. ¿Y que HTML te genera cuando $datos_usuario["id_pais"] no es igual a $filapais["id_pais"] en ningún caso?

A veces los navegadores hacen cosas raras con los selects y muestran el último dato seleccionado por el usuario, en vez del que tenga el selected.
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #11 (permalink)  
Antiguo 12/08/2013, 08:06
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Cita:
Iniciado por angelAparicio Ver Mensaje
Mmm, pues parece correcto. ¿Y que HTML te genera cuando $datos_usuario["id_pais"] no es igual a $filapais["id_pais"] en ningún caso?

A veces los navegadores hacen cosas raras con los selects y muestran el último dato seleccionado por el usuario, en vez del que tenga el selected.
Pues por el error siempre me dice que no es igual el de $datos_usuario que que el DI que saco con la consulta.

Código PHP:
Ver original
  1. <label><h4>País: [B]180[/B]</h4></label>
  2. <select name="id_pais">
  3. <option value='1' selected='selected'>España</option>
  4. <option value='2'>Albania</option>
  5. <option value='3'>Alemania</option>
  6. <option value='4'>Andorra</option>
  7. <option value='5'>Angola</option>
  8. <option value='6'>Anguilla</option>
  9. <option value='7'>Antártida</option>
  10. <option value='8'>Antigua y Barbuda</option>
  11. <option value='9'>Antillas Holandesas</option>
  12. <option value='10'>Arabia Saudí</option>
  13. <option value='11'>Argelia</option>
  14.  
  15. [...]
  16.  
  17. <option value='251'>Irlanda del Norte</option> 
  18. </select>  
  19.     </fieldset>

Ese 180 es el ID que tendría que estar seleccionado. Hago una prueba con un echo a ver si realmente era que no lo estaba sacando y entonces no podia comparar la variable en el select, pero si que lo está sacando correctamente.

Puedo subir el archivo al completo aquí ya que igual es un error que tengo en otra parte del código.

Última edición por dankko; 13/08/2013 a las 05:50
  #12 (permalink)  
Antiguo 15/08/2013, 04:09
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Alguna idea?
  #13 (permalink)  
Antiguo 15/08/2013, 14:54
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 14 años, 9 meses
Puntos: 22
Respuesta: Option selected en select php

Yo es que veo bien el código

Ponlo entero, a ver.
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #14 (permalink)  
Antiguo 16/08/2013, 16:20
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Código PHP:
Ver original
  1. <?php
  2. include_once ("./header.php");
  3. ?>
  4.  
  5.     <div class="row-fluid">
  6.         <div class="container" id="meta-editor">
  7.  
  8. <?php
  9. // conecto la base de datos
  10. $conexion = conecta_base_datos();
  11. /** recojo el ID**/
  12. if(isset($_GET['id'])){
  13. $id = $_GET['id'];
  14. // consulta con la que muestro los datos
  15. $ssql = mysql_query("SELECT * FROM users
  16. WHERE user_id = $id", $conexion)
  17. $fila = mysql_fetch_array($ssql);
  18. // advierto
  19. $mensaje = '<h3 class="hipperclass"><span>Actualizar los datos del user <b>' . utf8_encode($fila[nombre_user]). '</b></span></h3>';
  20. //le doy valor a la variable
  21. $datos_usuario = $fila["id_pais"];
  22. }
  23. // Comprobación del formulario
  24. if(isset($_POST['actualizar']) && $_POST['actualizar'] == 'Actualizar'){
  25. // Compruebo que no lleguen campos vacios
  26. if(!empty($_POST['nombre_user'])
  27. && !empty($_POST['id_pais'])){
  28. // Creo las variables que vamos a usar en la consulta UPDATE y le asigno sus valores
  29. $nombre_user = $_POST['nombre_user'];
  30. $id_pais = $_POST['id_pais'];
  31. //Hago la consulta para el UPDATE cambiando cambiando las variables
  32. $ssql = mysql_query("UPDATE users
  33. SET nombre_user = '$nombre_user',
  34. id_pais = '$id_pais'
  35. WHERE user_id = '$id'", $conexion)
  36. echo '<h4 class="alert success">Registro actualizado correctamente</h4>';
  37. print "<meta http-equiv=Refresh content=\"2 ; url=./\">";
  38. }else{
  39. echo "debe llenar todos los campos";
  40. }
  41. }else{
  42. // se muestra el mensaje
  43. echo "<p>".$mensaje."</p>";
  44. ?>
  45. <!--
  46. En el formulario muestro los valores del SELECT para que así, si no quiere tocar algún campo no tenga que rehacerlo
  47. -->
  48.  
  49. <form name="actualizar-registro" method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
  50.  
  51.     <fieldset>
  52.     <label>Nombre: </label>
  53.         <input type="text" name="nombre_user" value="<?php echo utf8_encode($fila["nombre_user"]); ?>">
  54.     </fieldset>
  55.  
  56.     <fieldset>
  57.         <label>País:</label>
  58.         <select name="id_pais">
  59.     <?php
  60.     $ssql = "select * from pais";
  61.     $rs = mysql_query ($ssql);
  62.     while ($filapais = mysql_fetch_array($rs)){
  63.      
  64.     if ( $datos_usuario["id_pais"] == $filapais["id_pais"] ){
  65.         echo "<option value='" . $filapais["id_pais"] . "' selected='selected'>" . utf8_encode($filapais["nombre_pais"]) . "</option>";
  66.     }
  67.     else {
  68.         echo "<option value='" . $filapais["id_pais"] . "'>" . utf8_encode($filapais["nombre_pais"]) . "</option>";
  69.     }
  70.      
  71.         }
  72.     mysql_free_result ($rs);
  73.     ?>
  74.     </select>
  75.     </fieldset>
  76.  
  77.  
  78.     <fieldset>
  79.         <input type="submit" class="btn success" name="actualizar" value="Actualizar" />
  80.     </fieldset>
  81.  
  82. </form>
  83.  
  84. <?php
  85. }
  86. ?>
  87.  
  88.  
  89.         </div>
  90.     </div>
  91.    
  92. <?php
  93. include_once ("./footer.php");
  94. ?>

He añadido comentarios para explicar lo que hago
  #15 (permalink)  
Antiguo 16/08/2013, 17:17
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: Option selected en select php

Veo un error aqui:

Código PHP:
        //le doy valor a la variable
        
$datos_usuario $fila["id_pais"];/////<-----------asignas el valor, es string
...
...
...
     while (
$filapais mysql_fetch_array($rs)){
         
        if (
$datos_usuario["id_pais"] == $filapais["id_pais"] ){//////<-----lo manejas como un array
            
echo "<option value='" $filapais["id_pais"] . "' selected='selected'>" utf8_encode($filapais["nombre_pais"]) . "</option>";
        }
        else {
            echo 
"<option value='" $filapais["id_pais"] . "'>" utf8_encode($filapais["nombre_pais"]) . "</option>";
        } 
Saludos
  #16 (permalink)  
Antiguo 18/08/2013, 08:23
dankko
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Option selected en select php

Correcto! parece que funciona. A veces uno entre tanto código se pierde.

Dejo el código para alguien que lo necesite:

Código PHP:
Ver original
  1. //le doy valor a la variable
  2.         $datos_usuario = $fila["id_pais"];
  3. ...
  4. ...
  5. ...
  6.      while ($filapais = mysql_fetch_array($rs)){
  7.          
  8.         if ($datos_usuario == $filapais["id_pais"] ){
  9.             echo "<option value='" . $filapais["id_pais"] . "' selected='selected'>" . utf8_encode($filapais["nombre_pais"]) . "</option>";
  10.         }
  11.         else {
  12.             echo "<option value='" . $filapais["id_pais"] . "'>" . utf8_encode($filapais["nombre_pais"]) . "</option>";
  13.         }

Muchas gracias a Erick y a Ángel!

Saludos.

Etiquetas: mysql, option, select, 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 20:50.