Taller Webmaster

Tutoriales para Webmasters

Bienvenido a Taller Webmaster, donde encontrarás la mejor información sobre tutoriales y recursos para webmasters!

Ingreso de Usuario

Recuperar contraseña

Registro de Usuario

Publicidad

Web de Bienes Raíces o Inmobiliarias - Parte 7, Búsqueda Avanzada PHP MySQL

Formulario de Busqueda Avanzada, para consultas con PHP y MySQL

 

Tutorial por Jorge Oyhenard (elQuique)

En esta entrega, elQuique avanza un poco mas en las búsquedas, modificando el formulario, para realizar una búsqueda avanzada en nuestro reporte de propiedades ingresadas. Ustedes, con esta iniciativa podrán personalizar aun mas su formulario para cada caso.

Si bien, ya realizamos en la entrega anterior (Sexta Entrega), una búsqueda, ahora veremos como ampliar este formulario para que nos sea útil como Búsqueda Avanzada, indicando además la Ciudad con una Lista Desplegable.

Lo primero, es ubicarnos en el formulario, antes del botón IR (1), e insertar una Caja de Lista Desplegable, donde aparecerán las Ciudades, ver la imágen:

Insertar Lista Desplegable

Los pasos, luego de ubicarnos delante del botón IR, son: Insert (Insertar), Form (Formulario), List/Menu (Lista/Menu), le indicamos un Label (Descripción), a ese campo, le diremos "Ciudad:", y presionamos OK.

A esa lista, la vamos a seleccionar (imagen pto 1), y le vamos a indicar de nombre: selCiudad (imagen pto 2), ya que será esa la identificación que usaremos mas adelante en PHP.

Propiedades de la Lista Desplegable

Luego vamos a seleccionar el botón List Values... (Lista de Valores, imagen pto 3), y vamos a definir el valor por defecto, que sera identificado como "Todas" (imagen pto 4) valor -1 (imagen pto 5), y presionamos OK (imagen pto 6). De esta forma definiremos el valor por defecto en la lista, o sea que funciona como si no existiera, si no seleccionamos ciudad, mostrara TODAS.

Desde el punto de vista de diseño, hasta acá llega nuestro trabajo, ahora vamos a modificar un poco, el código, pero antes vamos a ver como quedo hasta ahora el código del formulario de busqueda, así de paso, lo comparan con el de la Sexta Entrega.

...

<form name="form1" method="post" action="busquedapropiedades.php">
<label>Buscar:
<input type="text" name="txtBusqueda" id="txtBusqueda">
Ciudad:
<select name="selCiudad" id="selCiudad">
<option value="-1" selected>Todas</option>
</select>
</label>
<input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR">
</form>

...

Se agrego, la parte en negrita.

Lo primero que debemos automatizar, en nuestro formulario es que se deben mostrar en la lista desplegable, todas las ciudades disponibles en nuestra Tabla de ciudades de la base de datos, para eso vamos a agregar un poco de código PHP, quedando así:

...

<select name="selCiudad" id="selCiudad">
<option value="-1" selected>Todas</option>
<?php
$tablaciudades = mysql_query("SELECT * FROM ciudades ORDER BY nombre ASC");
// Seleccionamos las ciudades de la tabla ciudades
while ($registrociudad = mysql_fetch_array($tablaciudades)) {
// Vamos a repetir una Option (opción), de la Lista Desplegable, por cada ciudad en la tabla
?>
<option value="<?php echo $registrociudad['id']; ?>"><?php echo $registrociudad['nombre']; ?></option>
<?php
}
// termina la zona de repeticion
mysql_free_result($tablaciudades);
// se libera la memoria usada por la tabla
?>
</select>

...

Se agrego la parte en negrita, debajo de la línea del option Todas, y hasta antes de </select>.

Las lineas estan explicadas dentro del código, pero básicamente, lo que se hace es, seleccionar las ciudades de la tabla, realizar un bucle while que repita 1 renglón de la lista de ciudades, por cada ciudad en la tabla, y listo.

El resultado, cuando lo veamos en ejecución, sera similar a la imagen, donde se ven todas la ciudades ingresadas.

Listado de Ciudades

Luego de finalizado el formulario, nos resta modificar, el código PHP, del reporte, para que permita tener en cuenta si seleccionamos o no una ciudad, el código hasta ahora es:

if (isset($_POST['txtBusqueda'])) {
$tabla = mysql_query("SELECT propiedades.*, ciudades.* FROM propiedades, ciudades WHERE propiedades.idciudad = ciudades.id AND propiedades.titulo LIKE '%" . $_POST['txtBusqueda'] . "%' ORDER BY ciudades.nombre ASC");
} else {
$tabla = mysql_query("SELECT propiedades.*, ciudades.* FROM propiedades, ciudades WHERE propiedades.idciudad = ciudades.id ORDER BY ciudades.nombre ASC");
}

En ese código, ya vemos que hay partes similares, por ejemplo desde SELECT .... hasta ... WHERE es todo igual, solo cambia la condición, recordemos que el WHERE es justamente el que hace el filtro, por tanto es momento de optimizar un poco el mismo código para que sea mas sencillo de comprender, lo vamos a dividir en 3 partes:

  1. Seleccion de campos y WHERE que relaciona ambas tablas
  2. Condición, de acuerdo a los parametros del formulario (esta es la que cambia mas)
  3. Orden de los registros

por tanto, al mismo código, y sin agregarle lo nuevo de esta séptima entrega, lo vamos a optimizar, y lo dejaremos así:

$sql = "SELECT propiedades.*, ciudades.* FROM propiedades, ciudades WHERE propiedades.idciudad = ciudades.id "; // esta parte siempre es igual, por tanto la guardamos en una nueva variable.
if (isset($_POST['txtBusqueda'])) { // si se envio desde el formulario
$sql .= " AND propiedades.titulo LIKE '%" . $_POST['txtBusqueda'] . "%' "; // se le agrega esta nueva parte a la condición
}
$sql .= " ORDER BY ciudades.nombre ASC"; // sea o no desde el formulario, se le agrega esta parte del orden
$tabla = mysql_query($sql); // y elegimos la tabla, según la sentencia SELECT que hemos formado y esta guardada en la variable $sql

Ahora, es mas facil, agregar la parte de la ciudad seleccionada. Por tanto el codigo queda asi:

$sql = "SELECT propiedades.*, ciudades.* FROM propiedades, ciudades WHERE propiedades.idciudad = ciudades.id ";
if (isset($_POST['txtBusqueda'])) {
$sql .= " AND propiedades.titulo LIKE '%" . $_POST['txtBusqueda'] . "%' ";
if (intval($_POST['selCiudad']) > 0) { // si seleccionamos una ciudad, el id sera mayor a 0 (si son todas es -1)
$sql .= " AND propiedades.idciudad = '" . intval($_POST['selCiudad']) . "'";
// por tanto debemos agregar un filtro que diga que la ciudad, sea igual al numero elegido en el formulario
}
// fin de la condicion
}
$sql .= " ORDER BY ciudades.nombre ASC";
$tabla = mysql_query($sql);

Y listo, hemos finalizado. Les dejo el codigo final para descargar: click aca

Comentarios de Web de Bienes Raíces o Inmobiliarias - Parte 7, Búsqueda Avanzada PHP MySQL

↑ Tutorial

  • elquique

    elquique

    2007-06-20 17:06

    Me han consultado, sobre la posibilidad de usar cierto numero de ambientes. Les conteste que en ese caso no precisamos una tabla auxiliar, ya que la lista desplegable mostraria, 1, 2, 3, etc y acabo de postear la solucion, en el foro:

    http://www.forocreativo.net/ipb/index.php?s=&showtopic=20106&view=findpost&p=229087

    saludos :), elQuique
  • warner

    warner

    2007-06-22 13:01

    Saludos compañeros:
    Primero: el tutorial es excelente con el Quique he aprendido a trabajar con PHP, Mysql y Apache. Si el conocimiento no se difunde, entonces no sirve.

    Segundo: Me he permitido hacer algunas modificaciones. En cuanto a las condiciones para filtrar los registros hice lo siguiente:
    los IF los he separado para que los filtre bien por un dato ingresado o por el país.

    if (strlen($_POST['txtBusqueda'])>0){ //si txtBusqueda tiene contenido
    $sql.=" AND propiedades.descripcion LIKE '%".$_POST[txtBusqueda]."%'";
    }

    if (intval($_POST[selCiudad])>0){// si seleccionamos una ciudad es mayor que cero
    $numerociudad = intval($_POST[selCiudad]); //Primero almaceno el numero de ciudad y luego filtro. De la otra forma no corría
    $sql.=" AND propiedades.idciudad = $numerociudad";
    }
    Gracias
  • elquique

    elquique

    2007-07-07 16:25

    Warner, gracias por tu interes en este mini curso, con respecto a tu acotación, de la forma que la he publicado funciona igual, si razonas tu código, hace lo mismo e incluso utilizas una variable innecesaria.

    Las imágenes del tutorial son capturas del código que he dejado para descargar, por tanto es funcional.
  • frankcarrera

    frankcarrera

    2007-07-31 13:04

    holap
    quisiera compaginar el resultado de la busqueda hecha por el combobox
  • ROBINSON

    ROBINSON

    2009-10-21 17:43

    DE ANTE MANO ESTE TUTORIAL ESTA EXCELENTE, NECESITO E SU AYUDA HE CREADO DOS TABLAS UNA CIUDADES Y OTRA BARIOS, CUNADO SELECCIONA CIUDAD NECESITO ME FILTRE SOLO LOS BARRIOS DE ESA CIUDAD, ENVÍO EL CODIGO PARA SABER DONDE TENGO EL ERROR.

    GRACIAS

    $conexion = mysql_connect('localhost', 'root', 'root');
    mysql_select_db('inmobiliaria');
    ?>



    Filtro de Propiedades


    Filtra tu ciudad y luego tu barrio



    Ciudad:



    Barrio:


    mysql_close($conexion);
    ?>




    //ENVÍO MI CORREO YA QUE HE REALIZADO OTRAS CONSULTAS Y NO ME HAN LLEGADO

    jrmonroy@colasnitas.com
  • saimon

    saimon

    2009-11-08 10:31

    hola soy nuevo en este foro, pero dejeme decirle "elquigue" ke gracias por el interes en dar a conocer lo k sabe, me a servido de mucho los tutoriales,,,estoy realizando una web dinamica para la venda de pc y me a ayudado de mucho...

    ya astando en esto me gustaria comentarte una duda k traigo. veras pagina la estoy realizando en una resolucion de 1024 x 7...y cuando una persona lo visualizaa en otra resolucion pues tiene k utilizar el scrobolll,(se ve mal) cual seria la funcion css o jacascript a ajustar los tamaños de acuerdo a cada pc. mis pag son con frames...agradesco cuakier sugerencia,, gracias
    link::: http://virtualshop.comlu.com //es el link para k vean mi pagina, son bien aceptados las criticas constructivas jajaj