Lista desplegable de Mysql

Iniciado por the_sheriff_pino, 4 Abril 2013, 12:18 PM

0 Miembros y 1 Visitante están viendo este tema.

the_sheriff_pino

Saludos buena gente!
Tengo una pequeña/gran duda sobre una parte de código, os cuento.
Quiero poner en php una lista desplegable que contenga valores sacados de una tabla que tengo en PHPMyAdmin(Utilizo el XAMPP); y que dependiendo de la selección en esa primera lista, en una segunda lista los valores que muestre estén condicionados por la primera elección.
Con un ejemplo se ve más claro.
Tengo una tabla "provincias" con dos campos: cod_provincia y provincia.
Y otra tabla "poblaciones" con tres campos: cod_provincia, poblacion y cod_postal.

Mi objetivo es en que en la lista desplegable aparezcan todas las provincias de la tabla "provincias" y que dependiendo de la elección, en la segunda lista desplegable me aparezcan las poblaciones pertenecientes a la provincia seleccionada.

Datos adicionales: el servidor de base de datos está en "localhost", el user es "root" y la contraseña "toor".

Un saludo y gracias de antemano.
Rebélate

#!drvy

En todo caso, lo mas normal es obtener el ID (cod_provincia) y buscar la localidad (poblaciones) asociadas a ese ID.

Seria algo así como, primero haces un SELECT a la tabla provincias y sacas el cod_provincia. Los metes en un <select> y le das al usuario a elegir que provincia quiere. Luego cuando la haya seleccionado, compruebas el cod_provincia con la clausula WHERE de SQL y sacas la población asociada a ese ID.

Si necesitas mas ayuda avisa y te damos un ejemplo =)

Saludos

the_sheriff_pino

Alabado seas! Diste en el clavo.
Eso es exactamente lo que quiero.
Ya he montado las dos listas desplegables, una con la lista de provincias y la otra con la lista de poblaciones. La consulta de la lista de provincias es esta: SELECT provincia FROM provincia, pero la de la lista de poblaciones faltaría el condicionante del que hablas, el cod_prov.

Eres capaz de arrojar un poco de luz en el asunto?
Rebélate

#!drvy

#3
En vez de seleccionar solo provincias, selecciona también el cod_provincia.

Código (sql) [Seleccionar]
SELECT cod_provincia, provincia FROM provincia

Luego lo metes en una lista desplegable. De forma que el value del <option> se quede con el cod_provincia y su contenido con el nombre.

Código (html4strict) [Seleccionar]
<select name="provincias">
  <option value="aquí el cod_provincia"> aquí la provincia</option>
</select>


Una vez que el usuario lo haya seleccionado, puedes obtener el cod_provincia y buscarlo en la base de datos así:
Código (sql) [Seleccionar]
SELECT poblacion, cod_postal FROM poblaciones WHERE cod_provincia='aqui lo que te ha mandado el usuario'

Aunque no estoy muy a favor de dejarlo todo hecho, te voy a dejar un ejemplo de como lo haría yo.

Código (php) [Seleccionar]
<?php
$usuario 
'root'// Nombre del usuario para la base de datos.
$password 'toor'// Contraseña para la base de datos.
$servidor 'localhost'// Servidor para la base de datos.
$bd 'test'// Nombre de la base de datos.

/* Nos conectamos a la base de datos, o en caso contrario mostramos error */
$conexion = New mysqli($servidor,$usuario,$password,$bd);
if (
$conexion->connect_errno) { die('Error al conectar a la base de datos'); }

/* Si el código de provincia ha sido enviado... */
if(!empty($_POST['cod_provincia'])){

   
/* Nos aseguramos de que el cod_provincia es solo NUMERICO
   para evitar sqli */
   
$codigo = (int)$_POST['cod_provincia'];

   
/* Esta es la consulta para sacar todas las poblaciones y sus códigos postales indicado
   el código de provincia */
   
$query "SELECT cod_postal, poblacion FROM poblaciones WHERE cod_provincia='".$codigo."'";

   
/* Realizamos la consulta */
   
$resultado $conexion->query($query);

   
/* Mostramos la lista */
   
echo 'Las poblaciones para esta provincia son: <select name="poblaciones">';
   while(
$row $resultado->fetch_assoc()){
      echo 
'<option>';
      echo 
'Poblacion: '.$row['poblacion']; // Nombre
      
echo ' -- CP: '.$row['cod_postal']; // Codigo postal
      
echo '</option>';
   }
   echo 
'</select>';

/* En caso de que el código de provincia no haya sido enviado... */
} else {

   
/* Preparamos la consulta */
   
$query "SELECT cod_provincia,provincia FROM provincias";

   
/* Realizamos la consulta */
   
$resultado $conexion->query($query);

   
/* Creamos el formulario y mostramos la lista de provincias */
      
echo "Por favor, seleciona una provincia: ";
      echo 
'<form action="" method="POST"><select name="cod_provincia">';
      while(
$row $resultado->fetch_assoc()){
         echo 
'<option value="'.$row['cod_provincia'].'">'.$row['provincia'].'</option>';
      }
      
// Cerramos lista + boton enviar + cerramos formulario
      
echo '</select> <input type="submit" value="Enviar" /></form>';
}
?>


Se puede hacer mucho mejor y optimizar pero la idea es mostrar un ejemplo =)

Saludos

the_sheriff_pino

 ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
Impresionante, no sabes cuanto te lo agradezco, me quedé pillado en el código de SQL la consulta de la segunda lista desplegable, voy a ponerlo en práctica y te informo.
Un millón de gracias!
Rebélate

the_sheriff_pino

Con un par de retoques conseguí echarlo andar, no utilicé tu código, pero me sirvió de guía.
Tengo ahora un "más difícil todavía".
Para que se manden los datos de la primera lista a la segunda, tengo un botón.
Hay alguna manera (con Java tengo entendido que si se puede) de que se produzca el envío de los datos sin necesidad de botón? solo al seleccionar el valor de la lista 1 que se muestren los datos condicionados en la lista 2
Rebélate

#!drvy

Te toca usar AJAX. Te recomiendo la librería de javascript jQuery, te va a simplificar un poco la tarea.  Te dejo un ejemplo
http://www.desarrolloweb.com/articulos/select-dinamico-javascript.html

Saludos

the_sheriff_pino

Cita de: drvy | BSM en  5 Abril 2013, 12:39 PM
Te toca usar AJAX. Te recomiendo la librería de javascript jQuery, te va a simplificar un poco la tarea.  Te dejo un ejemplo
http://www.desarrolloweb.com/articulos/select-dinamico-javascript.html

Saludos

Sabes como puedo almacenar el valor elegido en la primera lista?
Gracias de antemano!
Un saludo
Rebélate