Foros del Web » Programando para Internet » PHP »

Buscar Precio - No puedo resolverlo

Estas en el tema de Buscar Precio - No puedo resolverlo en el foro de PHP en Foros del Web. Busque, pregunte e intente mil veces y no me sale. Estoy haciendo un buscador para una inmobiliaria y funciona bien con el LIKE% y los ...
  #1 (permalink)  
Antiguo 17/09/2010, 22:20
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Buscar Precio - No puedo resolverlo

Busque, pregunte e intente mil veces y no me sale. Estoy haciendo un buscador para una inmobiliaria y funciona bien con el LIKE% y los otros dos parametros que paso. Ahora, le quiero agregar el filtro por precio y no me sale, no hay caso
Pido por favor ayuda...
El form de busqueda:
Código:
<form name="form1" method="post" action="buq2.php">
	<label>Buscar:
	<input type="text" name="txtBusqueda" id="txtBusqueda">
	Ciudad:
	<select name="selCiudad" id="selCiudad">
		<option value="-1" selected>Todas</option>
<?php
	$tablaciudades = mysql_query("SELECT * FROM ciudades ORDER BY nombre DESC"); // 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>
	Ambientes: 
<select name="selAmbientes" id="selAmbientes"> 
<option value="-1" selected>Todos</option>
<?php //seleccion de ambientes
for($i=1;$i<=10;$i++) {
?>
<option value="<?php echo $i;?>"><?php echo $i; ?></option>
<?php
}
?>
</select>
</select>  
Precio Venta:  
<select name="precio">  
<option value="">Mostrar Todos</option>  
<option value="100000-200000">$100000 a $200000</option>  
<option value="200000-300000">$200000 a $300000</option>  
</select>  
	</label>
	<input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR">
</form>
El Buscador:
Código PHP:
<?php //Esto es lo que devuelve segun los datos de la tabla de arriba
$sql "SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id ";
if (isset(
$_POST['txtBusqueda'])) {
    
$sql .= " AND prueba.titulo LIKE '%" $_POST['txtBusqueda'] . "%' ";
    if (
intval($_POST['selCiudad']) > 0) {
        
$sql .= " AND prueba.idciudad = '" intval($_POST['selCiudad']) . "'";
    }
    if (
intval($_POST['selAmbientes']) > 0) {
$sql .= " AND Habitaciones = '" intval($_POST['selAmbientes']) . "'";
}
    if (
intval($_POST['precio']) > 0) {
$precio=$_POST['precio']; 
$ed=explode("-",$precio);    
$precio1=$ed[0];  
$precio2=$ed[1];  
$sql .= " AND SELECT precioVenta from prueba where precioVenta between $precio1 and $precio2 = '" intval($_POST['precio']) . "'";
}
}
$sql .= " ORDER BY ciudades.nombre ASC";
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
Si busco con "Mostrar Todos" mas los otros parametros. La busqueda se realiza correctamente. Pero si le sumo el parametro del precio, me da este error:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Archivos de programa\EasyPHP5.3.0\www\buq2.php on line 86

Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in C:\Archivos de programa\EasyPHP5.3.0\www\buq2.php on line 99

Que es:
Linea 86 while ($registro = mysql_fetch_array($tabla) ESTO ESTA EN EL BUSCADOR

Linea 99 mysql_free_result($tabla); LUEGO DE QUE MUESTRE EL RESULTADO

Gente, lo intente todo...alguien que la tenga clara y me pueda ayudar??
Gracias!!!!!!!!!!!!!!!
  #2 (permalink)  
Antiguo 18/09/2010, 03:53
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Buscar Precio - No puedo resolverlo

Hola
uhm... bueno pues lo raro que veo es esto

Código PHP:
Ver original
  1. $sql .= " AND SELECT precioVenta from prueba where precioVenta between $precio1 and $precio2 = '" . intval($_POST['precio']) . "'";

se me ocurre cambiarlo por

Código PHP:
Ver original
  1. $sql .= " AND precioVenta between $precio1 and $precio2 = '" . intval($_POST['precio']) . "'";

esto porque el select , tabla y where ya están en la línea 2 del archivo del Buscador.
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 18/09/2010, 10:41
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: Buscar Precio - No puedo resolverlo

Que tal morti, gracias por tu respuesta.
Hice la modificacion que sugeriste (claro, el select , tabla y where ya están en la línea 2 del archivo del Buscador ) y de momento no me tira los warning. Bien!
El tema esta en que tampoco me hace la busqueda, no me trae nada (excepto para mostrar todo).
Parte buscador precio:
Código:
Precio Venta:  
<select name="precio">  
<option value="">Mostrar Todos</option>  
<option value="100000-200000">$100000 a $200000</option>  
<option value="200000-300000">$200000 a $300000</option>  
</select>
El cambio realizado:
Código PHP:
if (intval($_POST['precio']) > 0) {
$precio=$_POST['precio']; 
$ed=explode("-",$precio); 
$precio1=$ed[0]; #obtienes el primer parametro del rango   
$precio2=$ed[1];  #obtienes el segundo parametro del rango   
$sql .= " AND precioVenta between $precio1 and $precio2 = '" intval($_POST['precio']) . "'";

No se porque no funciona...
Gracias....!!!!!
  #4 (permalink)  
Antiguo 18/09/2010, 10:58
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Buscar Precio - No puedo resolverlo

uhmm, bueno, conviertes a entero pero mandas una cadena (con el signo menos entre los números) tal vez ese sea el problema

intenta ponerle un echo a $precio,
y un echo a $sql una vez termine todas sus comparaciones
(es decir, antes del mysql_query)

esto para ver el valor de ambas variables
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 19/09/2010, 09:11
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
Respuesta: Buscar Precio - No puedo resolverlo

Morti, puse los echo (fijate si lo hice bien, como lo sugeriste)
Código PHP:
<?php //Esto es lo que devuelve segun los datos de la tabla de arriba
$sql "SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id ";
if (isset(
$_POST['txtBusqueda'])) {
    
$sql .= " AND prueba.titulo LIKE '%" $_POST['txtBusqueda'] . "%' ";
    if (
intval($_POST['selCiudad']) > 0) {
        
$sql .= " AND prueba.idciudad = '" intval($_POST['selCiudad']) . "'";
    }
    if (
intval($_POST['selAmbientes']) > 0) {
$sql .= " AND Habitaciones = '" intval($_POST['selAmbientes']) . "'";
}
    if (
intval($_POST['precio']) > 0) {
$precio=$_POST['precio']; # ya esta el nombre asociado jaja  
$ed=explode("-",$precio); #esto te crea un array con la separacion del rango GRACIAS, NO CONOCIA ESA PROPIEDAD    
$precio1=$ed[0]; #obtienes el primer parametro del rango   
$precio2=$ed[1];  #obtienes el segundo parametro del rango   
echo "$precio";
$sql .= " AND precioVenta between $precio1 and $precio2 = '" intval($_POST['precio']) . "'";
echo 
"$sql";
}
}
$sql .= " ORDER BY ciudades.nombre ASC";
echo 
"$sql";
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
Lo que muestra para a) echo "$precio"; b) echo "$sql" (del between);
"mostrar todos": nada

"100000-200000": a) 100000-200000 ; b)
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 100000 and 200000 = '100000'
"200000-300000": a) 200000-300000 ; b)
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 200000 and 300000 = '200000'
y para el buscador total
Código PHP:
$sql .= " ORDER BY ciudades.nombre ASC";
echo 
"$sql"
tenemos como resultado:

"mostrar todos":
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' ORDER BY ciudades.nombre ASC
"100000-200000":
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 100000 and 200000 = '100000' ORDER BY ciudades.nombre ASC
"200000-300000":
Código:
'SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 200000 and 300000 = '200000' ORDER BY ciudades.nombre ASC
Espero responder a tu sugerencia.
Saludos cordiales
Leonidas
  #6 (permalink)  
Antiguo 19/09/2010, 12:04
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Buscar Precio - No puedo resolverlo

Cita:
Iniciado por ingleonidas Ver Mensaje
Morti, puse los echo (fijate si lo hice bien, como lo sugeriste)
Código PHP:
<?php //Esto es lo que devuelve segun los datos de la tabla de arriba
$sql "SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id ";
if (isset(
$_POST['txtBusqueda'])) {
    
$sql .= " AND prueba.titulo LIKE '%" $_POST['txtBusqueda'] . "%' ";
    if (
intval($_POST['selCiudad']) > 0) {
        
$sql .= " AND prueba.idciudad = '" intval($_POST['selCiudad']) . "'";
    }
    if (
intval($_POST['selAmbientes']) > 0) {
$sql .= " AND Habitaciones = '" intval($_POST['selAmbientes']) . "'";
}
    if (
intval($_POST['precio']) > 0) {
$precio=$_POST['precio']; # ya esta el nombre asociado jaja  
$ed=explode("-",$precio); #esto te crea un array con la separacion del rango GRACIAS, NO CONOCIA ESA PROPIEDAD    
$precio1=$ed[0]; #obtienes el primer parametro del rango   
$precio2=$ed[1];  #obtienes el segundo parametro del rango   
echo "$precio";
$sql .= " AND precioVenta between $precio1 and $precio2 = '" intval($_POST['precio']) . "'";
echo 
"$sql";
}
}
$sql .= " ORDER BY ciudades.nombre ASC";
echo 
"$sql";
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
Lo que muestra para a) echo "$precio"; b) echo "$sql" (del between);
"mostrar todos": nada

"100000-200000": a) 100000-200000 ; b)
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 100000 and 200000 = '100000'
"200000-300000": a) 200000-300000 ; b)
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 200000 and 300000 = '200000'
y para el buscador total
Código PHP:
$sql .= " ORDER BY ciudades.nombre ASC";
echo 
"$sql"
tenemos como resultado:

"mostrar todos":
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' ORDER BY ciudades.nombre ASC
"100000-200000":
Código:
SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 100000 and 200000 = '100000' ORDER BY ciudades.nombre ASC
"200000-300000":
Código:
'SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id AND prueba.titulo LIKE '%%' AND precioVenta between 200000 and 300000 = '200000' ORDER BY ciudades.nombre ASC
Espero responder a tu sugerencia.
Saludos cordiales
Leonidas
bueno
revisando los querys, usas el like pero no vienen datos (imagino porque no escribiste nada en los campos de búsqueda)
y en el between tienes esto

Código MySQL:
Ver original
  1. consulta 1     AND precioVenta between 100000 and 200000 = '100000'
  2. consulta2      AND precioVenta between 200000 and 300000 = '200000'
  3. consulta4      AND precioVenta between 100000 and 200000 = '100000' ORDER BY ciudades.nombre ASC
  4. consulta5      AND precioVenta between 200000 and 300000 = '200000' ORDER BY ciudades.nombre ASC

y en primera, comparas números contra cadenas según veo, y en segundo estas comparandolo dentro del between,
para que eso??
nos comentas
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 19/09/2010 a las 12:53 Razón: add_c
  #7 (permalink)  
Antiguo 19/09/2010, 14:51
 
Fecha de Ingreso: abril-2010
Mensajes: 87
Antigüedad: 14 años
Puntos: 1
De acuerdo Respuesta: Buscar Precio - No puedo resolverlo [RESUELTO]

MUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUCHASGRACIAS!!!!!!!
Estuve bastante tiempo con este tema y con tu orientacion pude resolverlo.
Aqui se evidencia el potencial de las preguntas y cuestionamientos, para poder ver lo que hasta el momento no se tenia en claro. Basto con que preguntes:

"y en primera, comparas números contra cadenas según veo, y en segundo estas comparandolo dentro del between,
para que eso??"


Para que saque el "=" y VOILA! Resuelto!

El codigo queda asi:

Código PHP:
<?php //Esto es lo que devuelve segun los datos de la tabla de arriba
$sql "SELECT prueba.*, ciudades.* FROM prueba, ciudades WHERE prueba.idciudad = ciudades.id ";
if (isset(
$_POST['txtBusqueda'])) {
    
$sql .= " AND prueba.titulo LIKE '%" $_POST['txtBusqueda'] . "%' ";
    if (
intval($_POST['selCiudad']) > 0) {
        
$sql .= " AND prueba.idciudad = '" intval($_POST['selCiudad']) . "'";
    }
    if (
intval($_POST['selAmbientes']) > 0) {
$sql .= " AND Habitaciones = '" intval($_POST['selAmbientes']) . "'";
}
    if (
intval($_POST['precio']) > 0) {
$precio=$_POST['precio']; 
$ed=explode("-",$precio); #esto te crea un array con la separacion del rango   
$precio1=$ed[0]; # primer parametro del rango   
$precio2=$ed[1];  # segundo parametro del rango   

$sql .= " AND precioVenta between $precio1 and $precio2 " ;

}
}
$sql .= " ORDER BY ciudades.nombre ASC";

$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
Te cuento, soy ingeniero industrial y la programacion me gusta mucho.
He estudiado y avanzo cada dia mas,. pero hay cosas de las que no me doy cuenta por mi falta de conocimiento en la materia.
Te vuelvo a agradecer!
Abrazo!!
Leonidas

Etiquetas: precio
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 01:32.