Foros del Web » Programando para Internet » PHP »

Precio máximo con php

Estas en el tema de Precio máximo con php en el foro de PHP en Foros del Web. Hola, Estoy creando una web inmobiliaria. Tengo preparado el formulario para insertar los anuncios y estoy preparando el formuario para la busqueda de los anuncios. ...
  #1 (permalink)  
Antiguo 12/06/2009, 02:04
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Exclamación Precio máximo con php

Hola,

Estoy creando una web inmobiliaria. Tengo preparado el formulario para insertar los anuncios y estoy preparando el formuario para la busqueda de los anuncios. Mi problema es que no hacer para la busqueda del precio máximo de una vivienda, es decir el desplegable para escoger un precio.
En la base de datos tengo un campo llamado precio, y ahi irá a parar todos los precios... Como tengo que hacer para sacar un precio por ejemplo máximo de hasta 200€, o 300 €?

Alguien me puede dar algun consejo?

Gracias!
  #2 (permalink)  
Antiguo 12/06/2009, 02:29
Avatar de AnisDelMono  
Fecha de Ingreso: febrero-2007
Ubicación: Pas de la Casa
Mensajes: 247
Antigüedad: 17 años, 2 meses
Puntos: 7
Respuesta: Precio máximo con php

Hola

Código PHP:

//este seria eol tipico bucle que recorre el array del query
while ($bucle=mysql_fetch_array(tuQuery)){
    if (
$bucle['precio'] < 300) && ($bucle['precio'] > 200) {
    echo 
$bucle['precio'];
    }

Otra forma seria la de tener una tabla que relacione apartamentos -> precios mediante una id que que coincida con el value del select. Esa id la utilizarias como variable a la hora de hacer la llamada a la base de datos.
__________________
=>=>=>=>=>=>=>=>=>=>=>=>=>
¡Disidente!
Frente Popular de Judea, Life of Brian
  #3 (permalink)  
Antiguo 12/06/2009, 03:52
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

Perdona mi ignorancia, pero hace dos semanas que estoy metido con el php y aún no lo entiendo bien del todo.

Este es mi código php para la busqueda, el de tipo de vivienda y ciudad ya los tengo listos, pero me falta el del precio. Como y donde debería introducir el código que me has facilitado para que esto funcione, teniendo en cuenta que el precio se me introduce en la tabla dentro de un registro que es precio.

Código php:

Código PHP:
<?php
$conexion 
mysql_connect('localhost''''');
mysql_select_db('');
?>
<html>
<head>
<title>Reporte de Propiedades</title>
</head>
<body>
<h1>B&uacute;squeda de Propiedades</h1>

<form name="form1" method="post" action="Busqueda.php">
<label>Tipo de vivienda:<br />
<select name="tipovivienda" id="tipovivienda">
  <option value="0">--Escoja tipo alquiler--</option>
  <?php
    $tablavivienda 
mysql_query("SELECT * FROM vivienda ORDER BY id ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrovivienda mysql_fetch_array($tablavivienda)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrovivienda['id']; ?>"><?php echo $registrovivienda['tipo']; ?></option>
  <?php
    
// termina la zona de repeticion
    
mysql_free_result($tablavivienda); // se libera la memoria usada por la tabla
?>
</select>
    <br>
</label>
    <label>Ciudad:<br />
      <select name="ciudad" id="ciudad">
        <option value="0">---Escoja la ciudad---</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 (opcion), 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>
      <br>
       <label>Precio máximo<br>
      <select name="precio" id="precio">
        <option value="0">--Cualquier precio--</option>
        <option value="1">Máximo 200€</option>
        <option value="2">Máximo 400€</option>
        <option value="3">Máximo 600€</option>
        <option value="4">Máximo 800€</option>
      </select>
      <br>
    </label>
    <input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR">
</form>
<table border="1">
<tr>
<td>Referencia</td>
<td>Foto</td>
<td>Tipo Vivienda</td>
<td>Ciudad</td>
<td>Población</td>
<td>Precio</td>
<td>Descripción</td>
</tr>
<?php
$sql 
"SELECT propiedades.*, ciudades.*, vivienda.* FROM propiedades, ciudades, vivienda WHERE propiedades.idciudad = ciudades.id && propiedades.idvivienda = vivienda.id ";
if (isset(
$_POST['tipovivienda'])) {
    
$sql .= " AND propiedades.idvivienda = '" . ($_POST['tipovivienda']) . "'";
    if (
intval($_POST['ciudad']) > 0) {
        
$sql .= " AND propiedades.idciudad = '" intval($_POST['ciudad']) . "'";
    }
}    
$sql .= " ORDER BY referencia ASC";
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
<tr>
<td><?php echo $registro['referencia']; ?></td>
<td><img src="ver.php?referencia=<?php echo $registro['referencia']; ?>" width="200" height="150" alt="" /></td>
<td><?php echo $registro['tipo']; ?></td>
<td><?php echo $registro['nombre']; ?></td>
<td><?php echo $registro['poblacion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
</table>
</body>
</html>
  #4 (permalink)  
Antiguo 12/06/2009, 04:25
Avatar de AnisDelMono  
Fecha de Ingreso: febrero-2007
Ubicación: Pas de la Casa
Mensajes: 247
Antigüedad: 17 años, 2 meses
Puntos: 7
Respuesta: Precio máximo con php

Aqui

Código PHP:
if ($registro['precio'] < 300) && ($registro['precio'] > 200) {    
?>

<tr>
<td><?php echo $registro['referencia']; ?></td>
<td><img src="ver.php?referencia=<?php echo $registro['referencia']; ?>" width="200" height="150" alt="" /></td>
<td><?php echo $registro['tipo']; ?></td>
<td><?php echo $registro['nombre']; ?></td>
<td><?php echo $registro['poblacion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
</tr>
<?php
}

}
Pero ten en cuenta que en mi ejemplo he puesto un valor fijo (200, 300). Eso deberia ser una variable que se debe recoger del select "precio".

De alguna manera has de convertir los valores a valores dinamicos. Un forma seria la siguiente:

Código PHP:
$sql .= " ORDER BY referencia ASC";
$tabla = mysql_query($sql);

switch ($_POST['precio']){
    case 1:
    $precio_bajo=0;
    $precio_alto=200;
    break;

    case 2:
    $precio_bajo=201;
    $precio_alto=400;
    break;

    //y el resto de valores

    default:
    $precio_bajo=0;
    $precio_alto=10000000000000;
}

while ($registro = mysql_fetch_array($tabla)) {

if ($registro['precio'] < $precio_alto) && ($registro['precio'] > $precio_bajo) {    
?>

<tr>
<td><?php echo $registro['referencia']; ?></td>
<td><img src="ver.php?referencia=<?php echo $registro['referencia']; ?>" width="200" height="150" alt="" /></td>
<td><?php echo $registro['tipo']; ?></td>
<td><?php echo $registro['nombre']; ?></td>
<td><?php echo $registro['poblacion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
</tr>
<?php
}
Como veras, se utiliza un switch (una forma de condicional) para definir las variables $precio_alto, $precio_bajo para utilizarlas en el if de mas abajo

Prueba si funciona, por que lo he hecho muy rapido
__________________
=>=>=>=>=>=>=>=>=>=>=>=>=>
¡Disidente!
Frente Popular de Judea, Life of Brian
  #5 (permalink)  
Antiguo 12/06/2009, 06:00
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

Muchas gracias! De verdad!

A parte de por el código por la explicación, así puedo ir intentando hacerlo por mi cuenta. Lo provaré y te digo algo.

Gracias de nuevo y un gran saludo!
  #6 (permalink)  
Antiguo 16/06/2009, 04:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Exclamación Respuesta: Precio máximo con php

Hola,

Aquí estoy de nuevo, he estado probando el codigo y me daba algunos pequeños errores a la hora de adaptarlo pero ya he conseguido que no de ningún error. Pero el problema es que no funciona, funciona el desplegable de tipovivienda y el de ciudad pero el de precio no funciona, es como si no entrase dentro del registro precio y no lo recorriese buscando la información...
Se te ocurre algo donde falte algún dato?
Tengo que decirte que el desplegable del precio lo he hecho manual no dinámico ya que no tengo una tabla especifica para el precio... Puede ser que el problema esté en ligar el desplegable con el php ?

Te dejo el código limpio de errores:


Código PHP:
<?php
$conexion 
mysql_connect('localhost''''');
mysql_select_db('');
?>
<html>
<head>
<title>Reporte de Propiedades</title>
</head>
<body>
<h1>B&uacute;squeda de Propiedades</h1>

<form name="form1" method="post" action="Busqueda2.php">
<label>Tipo de vivienda:<br />
<select name="tipovivienda" id="tipovivienda">
  <option value="0">--Escoja tipo alquiler--</option>
  <?php
    $tablavivienda 
mysql_query("SELECT * FROM vivienda ORDER BY id ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrovivienda mysql_fetch_array($tablavivienda)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrovivienda['id']; ?>"><?php echo $registrovivienda['tipo']; ?></option>
  <?php
    
// termina la zona de repeticion
    
mysql_free_result($tablavivienda); // se libera la memoria usada por la tabla
?>
</select>
    <br>
</label>
    <label>Ciudad:<br />
      <select name="ciudad" id="ciudad">
        <option value="0">---Escoja la ciudad---</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 (opcion), 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>
      <br>
       <label>Precio máximo<br>
      <select name="precio" id="precio">
        <option value="0">--Cualquier precio--</option>
        <option value="1">Máximo 200€</option>
        <option value="2">Máximo 400€</option>
        <option value="3">Máximo 600€</option>
        <option value="4">Máximo 800€</option>
      </select>
      <br>
    </label>
    <input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR">
</form>
<br>
<table border="1">
<tr>
<td>Referencia</td>
<td>Foto</td>
<td>Tipo Vivienda</td>
<td>Ciudad</td>
<td>Población</td>
<td>Precio</td>
<td>Descripción</td>
</tr>
<?php
$sql 
"SELECT propiedades.*, ciudades.*, vivienda.* FROM propiedades, ciudades, vivienda WHERE propiedades.idciudad = ciudades.id && propiedades.idvivienda = vivienda.id ";
if (isset(
$_POST['tipovivienda'])) {
    
$sql .= " AND propiedades.idvivienda = '" . ($_POST['tipovivienda']) . "'";
    if (
intval($_POST['ciudad']) > 0) {
        
$sql .= " AND propiedades.idciudad = '" intval($_POST['ciudad']) . "'";    
    }
}    
$sql .= " ORDER BY referencia ASC";
$tabla mysql_query($sql);


switch (
$_POST['precio']){
    case 
1:
    
$precio_bajo=0;
    
$precio_alto=200;
    break;

    case 
2:
    
$precio_bajo=201;
    
$precio_alto=400;
    break;

    case 
3:
    
$precio_bajo=401;
    
$precio_alto=600;
    break;
    
    case 
4:
    
$precio_bajo=601;
    
$precio_alto=800;
    break;
    
    default:
    
$precio_bajo=0;
    
$precio_alto=10000000000000;
}
while (
$registro mysql_fetch_array($tabla)) {
    if ((
$registro['precio'] < $precio_alto) && ($registro['precio'] > $precio_bajo)) 
?> 
<tr>
<td><?php echo $registro['referencia']; ?></td>
<td><img src="ver.php?referencia=<?php echo $registro['referencia']; ?>" width="200" height="150" alt="" /></td>
<td><?php echo $registro['tipo']; ?></td>
<td><?php echo $registro['nombre']; ?></td>
<td><?php echo $registro['poblacion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
</tr>
<?php
    
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
</table>
</body>
</html>
  #7 (permalink)  
Antiguo 16/06/2009, 06:20
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Precio máximo con php

Hola Info23,

Te voy a proponer otra solución que te puede resultar interesante:

En primer lugar, los precios los puedes meter en una tabla de base de datos y mostrarlos en el select igual que haces con las ciudades:

Código PHP:
  <label for="precio">Precio máximo</label><br/>
    <select id="precio" name="precio" id="precio">
      <option value="0">--Cualquier precio--</option>
      <?php
        $tablaprecios 
mysql_query("SELECT * FROM precios ORDER BY id ASC"); // Seleccionamos los precios de la tabla precio
        
while ($registroprecio mysql_fetch_array($tablaprecios)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada precio en la tabla
      
?>
        <option value="<?php echo $registroprecio['id']; ?>"><?php echo $registroprecio['texto']; ?></option>
      <?php
        
// termina la zona de repeticion
        
mysql_free_result($tablaprecios); // se libera la memoria usada por la tabla
      
?>
    </select>
  <br/>
Observa que también he corregido la forma de usar la etiqueta <label>, que debe relacionar el atributo "for" con el atributo "id" del tag al que hace referencia la etiqueta.

La tabla de precios (realmente rango de precios) podría contener los siguientes campos:
  • id: identificador del precio
  • desde: precio mínimo para el rango
  • hasta: precio máximo para el rango
  • texto: descripción del rango

Te quedaría algo así:

id desde hasta texto
1 0 200 Máximo 200€
2 201 300 Máximo 400€
...

Luego, para las búsquedas, primero debes extraer los datos "desde" y "hasta" con una query SQL a partir del valor seleccionado (supongamos que lo guardas en la variable $idPrecio):

Código PHP:
$query 'SELECT desde, hasta FROM precio WHERE id='.$idPrecio
Con los valores obtenidos puedes hacer una búsqueda en la tabla de las viviendas y extraer sólo las que tengan un precio dentro de los márgenes:

Código PHP:
$queryViviendas 'SELECT * FROM vivienda WHERE precio>='.$desde.' AND precio<'.$hasta.' ORDER BY precio ASC'
Salu2,
Carlos.
  #8 (permalink)  
Antiguo 16/06/2009, 07:20
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

Pero tengo una duda.... Yo para que la gente inserte el precio solo tienen que poner en el campo de texto precio 200, 300, 250,... dependiendo del precio del inmueble. Con la opción que me dices que la verdad la veo muy intereante al introducir ellos un precio ejemplo como puede ser "240 euros" esto tendria una id, y un texto, pero como sabe el código php dentro de donde ubicarlo es decir en los campos desde y hasta?

Porque me has dicho "al igual que haces con las ciudades", pero las ciudades son nombres únicos y los precios son casi infinitos, como hago yo para que al introducir alguien un precio de 245 euros se me guarde en la tabla como desde 200 hasta 400?

Espero que entiendas mi pregunta! jeje

Última edición por Info23; 16/06/2009 a las 07:51 Razón: Aclaración de texto
  #9 (permalink)  
Antiguo 16/06/2009, 08:32
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Precio máximo con php

Cita:
Iniciado por Info23 Ver Mensaje
Pero tengo una duda.... Yo para que la gente inserte el precio solo tienen que poner en el campo de texto precio 200, 300, 250,... dependiendo del precio del inmueble. Con la opción que me dices que la verdad la veo muy intereante al introducir ellos un precio ejemplo como puede ser "240 euros" esto tendria una id, y un texto, pero como sabe el código php dentro de donde ubicarlo es decir en los campos desde y hasta?

Porque me has dicho "al igual que haces con las ciudades", pero las ciudades son nombres únicos y los precios son casi infinitos, como hago yo para que al introducir alguien un precio de 245 euros se me guarde en la tabla como desde 200 hasta 400?

Espero que entiendas mi pregunta! jeje
Realmente, trabajas con 2 conceptos: el precio del inmueble y el rango de precios para la búsqueda, que es lo que yo he tratado en mi mensaje anterior.

Comentabas que has puesto el selector de precios (realmente de rangos) manualmente, porque no tenías tabla. Mi propuesta era para hacer esto con tabla y no manualmente para luego poder usar la misma tabla para buscar los inmuebles por rango de precio.

El precio de la vivienda lo recogerás en el formulario de alta, como dices, en un campo de texto, pero entiendo que lo guardas en la tabla que contiene los datos de la vivienda. Esta tabla es la que yo he llamado "vivienda" en mi explicación.

El procedimiento para las búsquedas sería:
  1. Mostrar el formulario de búsqueda: generas el select para el rango de precios como te he indicado, que es como lo has hecho para las ciudades, pero usando la tabla nueva que he llamado "precio". Mejor llamémosla "rango_precios", que es más representativo y así no nos confundimos.
  2. Recoger el identificador del rango de precios seleccionado por el usuario. Esto lo haces cuando el usuario pulse el botón de buscar y debes coger el valor seleccionado en el select del rango de precios.
  3. Extraer los datos del rango de precios seleccionado, haciendo una búsqueda en la tabla rango_precios (filtrando por el id del rango de precios seleccionado) . Aquí se obtienen los datos desde y hasta.
  4. Hacer una búsqueda sobre la tabla "vivienda" (donde tengas los datos de la vivienda y, por tanto, su precio) filtrando por los datos desde y hasta, que has obtenido en la búsqueda anterior.
  5. Mostrar los resultados devueltos por la query

Espero haberte aclarado la duda.
  #10 (permalink)  
Antiguo 16/06/2009, 09:42
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

Estoy provando tu ejemplo, la parte de la busqueda la tengo clara.
El problema se me presenta a la hora de introducir el anuncio con su precio.
Me explico, yo para introducir las ciudades ofrezco un metodo de opción desplegable que al elegir madrid detecta la id de la ciudad y me la envia a la tabla vivienda donde esta la descripción general, pero para el precio solo es el campo de texto, no ofrezco un desplegable y al no ofrecer un desplegable no se como llevar la id de la tabla del rango_precios a la tabla vivienda en el registro idprecios.
Si fuese un desplegable de precios a la hora de insertar entiendo lo que me dices, pero al no ser desplegable ahí esta mi duda. Ya te digo, para la busqueda me lo has dejado muy claro, pero mi problema es cuando lo insertan, que mediante un código detecte que ese valor se encuentra desde 200 hasta 400 y me lleve la id de ese registro a la tabla vivienda.

(Siento no entenderlo a la primera, soy bastante nuevo en el php)

Muchas gracias!
  #11 (permalink)  
Antiguo 16/06/2009, 10:05
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Precio máximo con php

Cita:
Iniciado por Info23 Ver Mensaje
Estoy provando tu ejemplo, la parte de la busqueda la tengo clara.
El problema se me presenta a la hora de introducir el anuncio con su precio.
Me explico, yo para introducir las ciudades ofrezco un metodo de opción desplegable que al elegir madrid detecta la id de la ciudad y me la envia a la tabla vivienda donde esta la descripción general, pero para el precio solo es el campo de texto, no ofrezco un desplegable y al no ofrecer un desplegable no se como llevar la id de la tabla del rango_precios a la tabla vivienda en el registro idprecios.
Si fuese un desplegable de precios a la hora de insertar entiendo lo que me dices, pero al no ser desplegable ahí esta mi duda. Ya te digo, para la busqueda me lo has dejado muy claro, pero mi problema es cuando lo insertan, que mediante un código detecte que ese valor se encuentra desde 200 hasta 400 y me lleve la id de ese registro a la tabla vivienda.

(Siento no entenderlo a la primera, soy bastante nuevo en el php)

Muchas gracias!
En realidad no debes cambiar nada del alta. El precio de la vivienda no lo tienes que relacionar con el rango de precios, sino que debes guardarlo tal cual lo introduzca el usuario mediante la caja de texto que tienes puesta. Este valor se guardará como un campo más en la tabla que contenga los datos de la vivienda. Yo he considerado que esta tabla se llama "vivienda" y que el campo se llama "precio", pero no sé si es así como lo tienes.

El procedimiento del alta sería:
  1. Muestras el formulario de alta ofreciendo un campo de texto para que el usuario introduzca el precio
  2. El usuario pincha en el botón buscar y recoges todos los datos introducidos, entre ellos el precio (tal cual lo haya introducido el usuario)
  3. Guardas los datos en la tabla "vivienda" (o como la hayas llamado). En esta tabla tendrás un campo "precio" donde guardarás el precio que ha introducido el usuario

Ahora tienes, por un lado el precio de cada vivienda guardado en el campo "precio" de la tabla "vivienda" y, por otro lado, los rangos de precios para filtrar las búsquedas guardados en la tabla "rango_precios". No existe relación entre ellos, ni hay que establecerla.

Al buscar, el usuario elige un rango de precios que te permite obtener un precio mínimo y un precio máximo a partir de la tabla "rango_precios". Con esos 2 valores, extraes de la tabla "vivienda" todos los registros que cumplan que el campo "precio" (dato introducido por el usuario en el alta) sea mayor o igual que el precio mínimo y menor o igual que el precio máximo.

No te preocupes por no entenderlo a la primera. Sé que el tema es algo lioso y más aún si llevas poco tiempo con PHP, así que no dudes en preguntar lo que no entiendas.
  #12 (permalink)  
Antiguo 16/06/2009, 11:42
Avatar de cesarpi80  
Fecha de Ingreso: mayo-2009
Mensajes: 159
Antigüedad: 15 años
Puntos: 10
Respuesta: Precio máximo con php

Como dice ruizdeeguilaz en el Sql se resolveria perfectamente esa situación y no complicarías tanto el código. Aunque difiero de la tabla de rango de precios, podria hacerse dentro del código mismo.

$queryViviendas = 'SELECT * FROM vivienda WHERE precio>='.$desde.' AND precio<'.$hasta.' ORDER BY precio ASC';

Y el $desde y $hasta provenientes del mismo formulario. Claro a eso hay que añadirles los demas parametros de busquedas que tienes en tu SQL. algo asi:

$sql = "SELECT propiedades.*, ciudades.*, vivienda.* FROM propiedades, ciudades, vivienda WHERE (propiedades.idciudad = ciudades.id && propiedades.idvivienda = vivienda.id ) and (precio>='.$desde.' AND precio<'.$hasta.')";

donde precio es el valor de la propiedad.
  #13 (permalink)  
Antiguo 16/06/2009, 11:51
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

Parece que te tengo que seguir molestando...

He hecho la parte sencilla que es en la cual el desplegable del precio entra a la base de datos dentro de la tabla rango_precios y hace visible el precio máximo en el desplegable. Pero he intendado amoldar los que me has dicho para extraer los datos "desde" y "hasta" con una query SQL:

Código PHP:
$query 'SELECT desde, hasta FROM precio WHERE id='.$idPrecio
Extraer sólo las que tengan un precio dentro de los márgenes:

Código PHP:
 $queryViviendas 'SELECT * FROM vivienda WHERE precio>='.$desde.' AND precio<'.$hasta.' ORDER BY precio ASC'
Y no consigo amoldar estos códigos al mio general que es este:

Código PHP:
<?php
$conexion 
mysql_connect('localhost''''');
mysql_select_db('');
?>
<html>
<head>
<title>Reporte de Propiedades</title>
</head>
<body>
<h1>B&uacute;squeda de Propiedades</h1>

<form name="form1" method="post" action="Busqueda3.php">
  <p>
    <label>Tipo de vivienda:<br />
      <select name="tipovivienda" id="tipovivienda">
        <option value="0">--Escoja tipo alquiler--</option>
        <?php
    $tablavivienda 
mysql_query("SELECT * FROM vivienda ORDER BY id ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrovivienda mysql_fetch_array($tablavivienda)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrovivienda['id']; ?>"><?php echo $registrovivienda['tipo']; ?></option>
        <?php
    
// termina la zona de repeticion
    
mysql_free_result($tablavivienda); // se libera la memoria usada por la tabla
?>
      </select>
    <br>
    </label>
    <label>Ciudad:<br />
      <select name="ciudad" id="ciudad">
        <option value="0">---Escoja la ciudad---</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 (opcion), 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>
  <br>
    <label for="precio">Precio máximo</label>
    <br/>
    <select name="precio" id="precio">
      <option value="0">--Cualquier precio--</option>
      <?php
        $tablaprecios 
mysql_query("SELECT * FROM precios ORDER BY id ASC"); // Seleccionamos los precios de la tabla precio
        
while ($registroprecio mysql_fetch_array($tablaprecios)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada precio en la tabla
      
?>
      <option value="<?php echo $registroprecio['id']; ?>"><?php echo $registroprecio['texto']; ?></option>
      <?php
        
// termina la zona de repeticion
        
mysql_free_result($tablaprecios); // se libera la memoria usada por la tabla
      
?> 
      </select>
    <br>
    </label>
    <input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR">
  </p>
</form>
<table border="1">
<tr>
<td>Referencia</td>
<td>Foto</td>
<td>Tipo Vivienda</td>
<td>Ciudad</td>
<td>Población</td>
<td>Precio</td>
<td>Descripción</td>
</tr>
<?php 
$sql 
"SELECT propiedades.*, ciudades.*, vivienda.* FROM propiedades, ciudades, vivienda WHERE propiedades.idciudad = ciudades.id && propiedades.idvivienda = vivienda.id ";
if (isset(
$_POST['tipovivienda'])) {
    
$sql .= " AND propiedades.idvivienda = '" . ($_POST['tipovivienda']) . "'";
    if (
intval($_POST['ciudad']) > 0) {
        
$sql .= " AND propiedades.idciudad = '" intval($_POST['ciudad']) . "'";
    }
}    
$sql .= " ORDER BY referencia ASC";
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
<tr>
<td><?php echo $registro['referencia']; ?></td>
<td><img src="ver.php?referencia=<?php echo $registro['referencia']; ?>" width="200" height="150" alt="" /></td>
<td><?php echo $registro['tipo']; ?></td>
<td><?php echo $registro['nombre']; ?></td>
<td><?php echo $registro['poblacion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
</table>
</body>
</html>
Si encuantras el porque puede ser o como debería hacrlo te estaría nuevamente muy agradecido.

Saludos!
  #14 (permalink)  
Antiguo 17/06/2009, 15:22
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Precio máximo con php

Primero debes obtener 'desde' y 'hasta' para el precio seleccionado. Tal y como tienes el código, puedes aprovechar la query para obtener los rangos de precios y guardarlos en un array asociativo:

Código PHP:
<?php
  
/* Arrays para guardar los valores 'desde' y 'hasta' de los rangos de precios */    
  
$rangosPreciosDesde = array();
  
$rangosPreciosHasta = array();

  
$tablaprecios mysql_query("SELECT * FROM precios ORDER BY id ASC"); // Seleccionamos los precios de la tabla precio
  
while ($registroprecio mysql_fetch_array($tablaprecios)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada precio en la tabla

    /* Extraemos los valores 'desde' y 'hasta' y los guardamos en los arrays que hemos creado */    
    
$rangoPreciosDesde[$registroprecio['id']] = $registroprecio['desde'];
    
$rangoPreciosHasta[$registroprecio['id']] = $registroprecio['hasta'];

?>
    <option value="<?php echo $registroprecio['id']; ?>"><?php echo $registroprecio['texto']; ?></option>
<?php
  
// termina la zona de repeticion
  
mysql_free_result($tablaprecios); // se libera la memoria usada por la tabla
?>
Como digo, obtenemos los valores 'desde' y 'hasta' para el precio seleccionado (si se ha seleccionado) y luego, como bien dice cesarpi80 usamos estos valores para filtrar la query junto a las demás condiciones:
Código PHP:
<?php 
$sql 
"SELECT propiedades.*, ciudades.*, vivienda.* FROM propiedades, ciudades, vivienda WHERE propiedades.idciudad = ciudades.id && propiedades.idvivienda = vivienda.id ";
if (isset(
$_POST['tipovivienda'])) {
    
$sql .= " AND propiedades.idvivienda = '" . ($_POST['tipovivienda']) . "'";
    if (
intval($_POST['ciudad']) > 0) {
        
$sql .= " AND propiedades.idciudad = '" intval($_POST['ciudad']) . "'";
    }
}

/* Aprovechando los arrays anteriores, obtenemos los valores 'desde' y 'hasta' para el precio seleccionado por el usuario */
if (isset($_POST['precio'])
{
  
$desde $rangoPreciosDesde[$_POST['precio']];
  
$hasta $rangoPreciosHasta[$_POST['precio']];

  
/* Añadimos los criterios a la query */
  
$sql .= " AND vivienda.precio >= ' . $desde . ' AND vivienda.precio <= ' . $hasta;

}

$sql .= " 
ORDER BY referencia ASC";
$tabla = mysql_query($sql);
while ($registro = mysql_fetch_array($tabla)) {
?>
Espero que se entienda bien la explicación. He puesto comentarios en el código para facilitar el entendimiento.

Salu2,
Carlos.

Última edición por ruizdeeguilaz; 17/06/2009 a las 15:28
  #15 (permalink)  
Antiguo 18/06/2009, 06:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

He probado el código y me da el siguiente error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/d416630/public_html/nuevaweb/Busqueda3.php on line 102

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/d416630/public_html/nuevaweb/Busqueda3.php on line 115

He visto que en el código que me has facilitado habia un error en la parte de :

$sql .= " AND propiedades.precio >= ' . $desde . ' AND propiedades.precio <= ' . $hasta;

Y lo he cambiado a esto:

$sql .= " AND propiedades.precio >= ' . $desde . ' AND propiedades.precio <= ' . $hasta ";

Pero parece que tampoco funciona...

Te dejo el código entero y habiendo introducido tus códigos dentro del mio:

Código PHP:
<?php
$conexion 
mysql_connect('localhost''''');
mysql_select_db('');
?>
<html>
<head>
<title>Reporte de Propiedades</title>
</head>
<body>
<h1>B&uacute;squeda de Propiedades</h1>

<form name="form1" method="post" action="Busqueda3.php">
  <p>
    <label>Tipo de vivienda:<br />
      <select name="tipovivienda" id="tipovivienda">
        <option value="0">--Escoja tipo alquiler--</option>
        <?php
    $tablavivienda 
mysql_query("SELECT * FROM vivienda ORDER BY id ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrovivienda mysql_fetch_array($tablavivienda)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrovivienda['id']; ?>"><?php echo $registrovivienda['tipo']; ?></option>
        <?php
    
// termina la zona de repeticion
    
mysql_free_result($tablavivienda); // se libera la memoria usada por la tabla
?>
      </select>
    <br>
    </label>
    <label>Ciudad:<br />
      <select name="ciudad" id="ciudad">
        <option value="0">---Escoja la ciudad---</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 (opcion), 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>
  <br>
    <label for="precio">Precio máximo</label>
    <br/>
    <select name="precio" id="precio">
    <option value="0">---Cualquier precio---</option>
      <?php
  
/* Arrays para guardar los valores 'desde' y 'hasta' de los rangos de precios */    
  
$rangosPreciosDesde = array();
  
$rangosPreciosHasta = array();

  
$tablaprecios mysql_query("SELECT * FROM precios ORDER BY id ASC"); // Seleccionamos los precios de la tabla precio
  
while ($registroprecio mysql_fetch_array($tablaprecios)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada precio en la tabla

    /* Extraemos los valores 'desde' y 'hasta' y los guardamos en los arrays que hemos creado */    
    
$rangoPreciosDesde[$registroprecio['id']] = $registroprecio['desde'];
    
$rangoPreciosHasta[$registroprecio['id']] = $registroprecio['hasta'];

?>
    <option value="<?php echo $registroprecio['id']; ?>"><?php echo $registroprecio['texto']; ?></option>
<?php
  
// termina la zona de repeticion
  
mysql_free_result($tablaprecios); // se libera la memoria usada por la tabla
?>  
      </select>
    <br>
    </label>
    <input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR">
  </p>
</form>
<table border="1">
<tr>
<td>Referencia</td>
<td>Foto</td>
<td>Tipo Vivienda</td>
<td>Ciudad</td>
<td>Población</td>
<td>Precio</td>
<td>Descripción</td>
</tr>
<?php 
$sql 
"SELECT propiedades.*, ciudades.*, vivienda.* FROM propiedades, ciudades, vivienda WHERE propiedades.idciudad = ciudades.id && propiedades.idvivienda = vivienda.id ";
if (isset(
$_POST['tipovivienda'])) {
    
$sql .= " AND propiedades.idvivienda = '" . ($_POST['tipovivienda']) . "'";
    if (
intval($_POST['ciudad']) > 0) {
        
$sql .= " AND propiedades.idciudad = '" intval($_POST['ciudad']) . "'";
    }
}

/* Aprovechando los arrays anteriores, obtenemos los valores 'desde' y 'hasta' para el precio seleccionado por el usuario */
if (isset($_POST['precio']))
{
  
$desde $rangoPreciosDesde[$_POST['precio']];
  
$hasta $rangoPreciosHasta[$_POST['precio']];

  
/* Añadimos los criterios a la query */
  
$sql .= " AND propiedades.precio >= ' . $desde . ' AND propiedades.precio <= ' . $hasta ";
}

$sql .= " ORDER BY referencia ASC";
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
<tr>
<td><?php echo $registro['referencia']; ?></td>
<td><img src="ver.php?referencia=<?php echo $registro['referencia']; ?>" width="200" height="150" alt="" /></td>
<td><?php echo $registro['tipo']; ?></td>
<td><?php echo $registro['nombre']; ?></td>
<td><?php echo $registro['poblacion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
</table>
</body>
</html>
Gracias Carlos.
  #16 (permalink)  
Antiguo 18/06/2009, 08:07
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Precio máximo con php

El error que te da es porque la query no devuelve resultados; es decir, no hay ningún registro que cumpla todas las condiciones que se han introducido en el formulario.

La función mysql_query($sql) devuelve FALSE si no encuentra ningún registro para la sentencia SQL enviada, por lo tanto, antes de usar el resultado, debes comprobar que sí ha devuelto resultados con un simple if:

Código PHP:
$tabla mysql_query($sql);
if (
$tabla)    // En el caso de que $tabla no sea FALSE (hay registros)
{
  while (
$registro mysql_fetch_array($tabla)) { 
    
// Aquí va el código para mostrar los datos obtenidos en la query
    
...
  }
}
else    
// $tabla = FALSE, por lo que no ha encontrado registros
{
  echo(
'No se han encontrado inmuebles que cumplan los criterios seleccionados...');

Para saber la query que se está ejecutando, te recomiendo que hagas un echo justo antes de llamar a mysql_query($sql)

Código PHP:
echo($sql);
$tabla mysql_query($sql);
... 
Con esto podrás comprobar que la query es correcta; en este caso, asegúrate de que en la base de datos hay registros que cumplan los criterios seleccionados.

Salu2,
Carlos.
  #17 (permalink)  
Antiguo 18/06/2009, 10:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

Tengo registros que cumplan los resultados.
Por ejemplo tengo 6 tipos de vivienda de 3 de Madrid y 3 de Barcelona con diferentes precios.
Si ejecuto el código sin el buscador de precios el resto de buscadores funciona, pero si lo ejecuto con el precio me da ese error, y tengo un gran abanico de precios desde 200 hasta 800.
Es decir si que tengo registros...seguiré probando.
  #18 (permalink)  
Antiguo 18/06/2009, 11:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
De acuerdo Respuesta: Precio máximo con php

Hola Carlos, al final ya lo he conseguido, no lo he hecho creando otra tabla sino que lo busco desde la misma tabla donde tengo la descripción completa de todos los pisos y a la hora de coger el precio sencilamente le digo que sea
<= . intval($_POST['precio']) .
Dejo el código completo por si lo quieres mirar o le sirve a álguien.
Antes de nada darte las gracias por todo el tiempo que me has dedicado y las explicaciones, sino no lo hubiese conseguido!!

Código PHP:
<?php
$conexion 
mysql_connect('localhost''''');
mysql_select_db('');
?>
<html>
<head>
<title>Reporte de Propiedades</title>
</head>
<body>
<h1>B&uacute;squeda de Propiedades</h1>

<form name="form1" method="post" action="Busqueda4.php">
<label>Tipo de vivienda:<br />
<select name="tipovivienda" id="tipovivienda">
  <option value="0">--Escoja tipo alquiler--</option>
  <?php
    $tablavivienda 
mysql_query("SELECT * FROM vivienda ORDER BY id ASC"); // Seleccionamos las ciudades de la tabla ciudades
    
while ($registrovivienda mysql_fetch_array($tablavivienda)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
        <option value="<?php echo $registrovivienda['id']; ?>"><?php echo $registrovivienda['tipo']; ?></option>
  <?php
    
// termina la zona de repeticion
    
mysql_free_result($tablavivienda); // se libera la memoria usada por la tabla
?>
</select>
    <br>
</label>
    <label>Ciudad:<br />
      <select name="ciudad" id="ciudad">
        <option value="0">---Escoja la ciudad---</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 (opcion), 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>
      <br>
       <label>Precio máximo<br>
      <select name="precio" id="precio">
        <option value="0">--Cualquier precio--</option>
        <option value="200">Máximo 200€</option>
        <option value="400">Máximo 400€</option>
        <option value="600">Máximo 600€</option>
        <option value="800">Máximo 800€</option>
      </select>
      <br>
    </label>
    <input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR">
</form>
<table border="1">
<tr>
<td>Referencia</td>
<td>Foto</td>
<td>Tipo Vivienda</td>
<td>Ciudad</td>
<td>Población</td>
<td>Precio</td>
<td>Descripción</td>
</tr>
<?php
$sql 
"SELECT propiedades.*, ciudades.*, vivienda.*, precio FROM propiedades, ciudades, vivienda WHERE propiedades.idciudad = ciudades.id && propiedades.idvivienda = vivienda.id ";
if (isset(
$_POST['tipovivienda'])) {
    
$sql .= " AND propiedades.idvivienda = '" . ($_POST['tipovivienda']) . "'";
    if (
intval($_POST['ciudad']) > 0) {
        
$sql .= " AND propiedades.idciudad = '" intval($_POST['ciudad']) . "'";
        if (
intval($_POST['precio'])) {
        
$sql .= " AND propiedades.precio <= '" intval($_POST['precio']) . "'";
       }
    }
}
    
$sql .= " ORDER BY referencia ASC";
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
<tr>
<td><?php echo $registro['referencia']; ?></td>
<td><img src="ver.php?referencia=<?php echo $registro['referencia']; ?>" width="200" height="150" alt="" /></td>
<td><?php echo $registro['tipo']; ?></td>
<td><?php echo $registro['nombre']; ?></td>
<td><?php echo $registro['poblacion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
</table>
</body>
</html>
Gracias y un saludo Ernesto
  #19 (permalink)  
Antiguo 18/06/2009, 16:43
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Precio máximo con php

Hola Ernesto,

Me parece muy válida tu solución y si así te funciona, genial. Ha sido un placer ayudarte y te deseo un buen futuro en este mundillo del PHP.

Salu2,
Carlos.
  #20 (permalink)  
Antiguo 19/06/2009, 05:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 1
Respuesta: Precio máximo con php

Gracias a ti Carlos, espero que nos veamos más amenudo por aquí!

Un saludo!
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 12:08.