Foros del Web » Programando para Internet » PHP »

mostrar <select> con el valor activo seleccionado

Estas en el tema de mostrar <select> con el valor activo seleccionado en el foro de PHP en Foros del Web. Hola a todos. Ante todo tengo que aclarar que busque lo que necesito en FAQ del foro pero el link esta roto o al menos, ...
  #1 (permalink)  
Antiguo 03/05/2004, 20:15
 
Fecha de Ingreso: febrero-2004
Mensajes: 37
Antigüedad: 13 años, 10 meses
Puntos: 0
mostrar <select> con el valor activo seleccionado

Hola a todos.


Ante todo tengo que aclarar que busque lo que necesito en FAQ del foro pero el link esta roto o al menos, en ese momento, no me conecto con nada.

Tengo 2 tablas en una base de datos MySQL

En una tengo una lista de articulos
y en la otra una lista de temas.

En la primera existe un campo que relaciona uno con otra.
llamado idasunto.

Cuando quiero mostrar un listado de temas necesito que el asunto aparesca en un <select>. Los valores del mismo se obtienen de una consulta a la segunda tabla

mi problema esta en que no se como dejar "visible" el valor que se corresponde con el de la tabla principal.

¿alguien conose como solucionar el problema?

gracias por anticipado.

Jose
  #2 (permalink)  
Antiguo 04/05/2004, 07:05
 
Fecha de Ingreso: septiembre-2003
Ubicación: Madrid
Mensajes: 53
Antigüedad: 14 años, 3 meses
Puntos: 1
Recarga la página mandando ese valor como una variable php.
  #3 (permalink)  
Antiguo 04/05/2004, 09:38
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 15 años, 5 meses
Puntos: 0
hola... he encontrado el codigo que ha puesto cluster en la faq y que actualmente no toma.. asi q lo ingreso

Tema: Formularios+Mysql

Pregunta: Como hacer una lista desplegable (<select> ) con valores de una tabla Mysql que dependa del valor seleccionado en la primera.

Respuesta:

Se trata de hacer una consulta a tu tabla "hija" con la clausula (confición) que identifique la relación entre ambas tablas. (usando como clave un campo de nuestra tabla hija q nos haga de clave foranea para nuestra consulta). En este caso usaremos el campo id_padre de la tabla_hija como "clave foranea" .. ambos del mismo tipo y relación 1 -> N (1 registro es a muchos registros de la otra tabla ..)

Partiende de una estructura SQL así: (como ejemplo completo de funcionamiento ..adaptenla a sus necesidades)



Código PHP:
#
# Estructura de tabla para tabla `tabla_hija`
#

CREATE TABLE tabla_hija (
  
id tinyint(3unsigned NOT NULL auto_increment,
  
id_padre tinyint(3unsigned NOT NULL default '0',
  
item_texto varchar(255NOT NULL default '',
  
PRIMARY KEY  (id)
TYPE=MyISAM;

#
# Volcar la base de datos para la tabla `tabla_hija`
#

INSERT INTO tabla_hija VALUES (11'tabla_hija - Item grupo 1 bla bla bla');
INSERT INTO tabla_hija VALUES (22'tabla_hija - grupo 2 item 1');
INSERT INTO tabla_hija VALUES (32'tabla_hija - grupo 2 item 2');
INSERT INTO tabla_hija VALUES (43'tabla_hija - grupo 3 item probando');
INSERT INTO tabla_hija VALUES (51'tabla_hija - item grupo 1 noseq pner');
# --------------------------------------------------------

#
# Estructura de tabla para tabla `tabla_padre`
#

CREATE TABLE tabla_padre (
  
id tinyint(3unsigned NOT NULL auto_increment,
  
item_texto varchar(255NOT NULL default '',
  
PRIMARY KEY  (id)
TYPE=MyISAM;

#
# Volcar la base de datos para la tabla `tabla_padre`
#

INSERT INTO tabla_padre VALUES (1'Grupo 1');
INSERT INTO tabla_padre VALUES (2'Grupo 2');
INSERT INTO tabla_padre VALUES (3'Grupo 3');
INSERT INTO tabla_padre VALUES (4'Grupo 4');

--------------------------------------------------------------------------------


Y el código de nuestras consultas a realizar
Código PHP:
<?
// datos de conexion a la BD.
$servidor  ="localhost"// host
$usuario   =""
$clave     ="";
$basedatos =""// Indicar una Base de datos.

// si se ha pulsao el boton enviar ($enviado) se procesa el formulario ..
// Sino, se continua con el formulario y los nuevos valores de los Select ..
// OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser
// que los obtengamos y se les de como valor inicial en el value= de cada uno segun corresponda.

if (!empty($_POST['enviado'])){

// Procesar el formulario ...
echo "Procesando formulario:<br>";
echo 
"Recibido id_tabla_padre: ".$_POST['id_padre']."<br>";
echo 
"Recibido id_tabla_hija: ".$_POST['id_hija'];

} else {

   
// Conexión a la BD
   
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error());
   
mysql_select_db($basedatos$conexion) or die(mysql_error());

   
// Obtener el $id_padre del envio a si mismo del formulario ..
   
$id_padre=$_POST['id_padre'];

   
// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script).
   
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";

   
// Formar Selec "Padre".
   
echo "<select name=\"id_padre\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";

   
$SQLconsulta_padre="SELECT * FROM tabla_padre";
   
$consulta_padre mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());

   While  (
$registro_padre=mysql_fetch_assoc($consulta_padre)){
      
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
      // Se selecciona en consecuencia (selected) la opción elegida.
      
if ($id_padre == $registro_padre['id']){
         echo 
"<option value=\"".$registro_padre['id']."\" selected>".$registro_padre['item_texto']."</option>\n";
      } else {
         echo 
"<option value=\"".$registro_padre['id']."\">".$registro_padre['item_texto']."</option>\n";
      }
    }
   echo 
"</select>\n\n";

   
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.

   // Formar Select "Hijo"
   
echo "<select name=\"id_hija\">\n";

   
// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo
   // se muestra el mensaje de "seleccine un item" (del select padre).
   
if (!empty($id_padre)){

       
$SQLconsulta_hija="SELECT * FROM tabla_hija WHERE id_padre='$id_padre'";
       
$consulta_hija mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
       
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
       
if (mysql_num_rows($consulta_hija) != 0){
          While  (
$registro_hija=mysql_fetch_assoc($consulta_hija)){
            echo 
"<option value=\"".$registro_hija['id']."\">".$registro_hija['item_texto']."</option>\n";
          }
        } else {
            echo 
"<option value=\"\"> No hay registros para este Item </option>";
        }
    } else {
        echo 
"<option value=\"\"> <-- Seleccione un Item  </option>";
    }

    
mysql_free_result($consulta_hija); // Liberar memoria usada por consulta.
    
    
echo "</select>\n\n";
    echo 
"<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
    echo 
"</form>\n";
}

Saludos...
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #4 (permalink)  
Antiguo 04/05/2004, 11:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Gracias bhonox, voy a ponerlo nuevamente en las FAQ's.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 04/05/2004, 15:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 37
Antigüedad: 13 años, 10 meses
Puntos: 0
hola a todos.
Debo agradecerles la prontitud con la que han respondido.
La respuesta es junsto lo que andaba buscando.

suerte.

Jose
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 02:22.