Foros del Web » Programando para Internet » PHP »

Problema con buscador

Estas en el tema de Problema con buscador en el foro de PHP en Foros del Web. Hola amigos. Una vez más por aqui con problemas tontos, de principiante, pero no me keda más remedio. Estoy intentando experimentar creando un buscador con ...
  #1 (permalink)  
Antiguo 03/06/2009, 04:40
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 10 meses
Puntos: 0
Problema con buscador

Hola amigos.
Una vez más por aqui con problemas tontos, de principiante, pero no me keda más remedio.

Estoy intentando experimentar creando un buscador con varios campos.

Todo funciona bien, salvo que si quiero crear como un filtro de busqueda, pues lo muestra, pero mal...es decir, yo por ejemplo selecciono TIPO DE OFERTA venta y TIPO DE VIVIENDA Atico y me muestra todos los registros que esten en venta y ademas sean atico. Se que tengo que realizar alguna condición de busqueda, pero mi torpeza me hace no llegar a más...agradeceré eternamente cualquier ayuda. Os dejo aqui el codigo de lo que estoy haciendo:

Código PHP:
<?php require_once('Connections/propiedades.php'); ?>
<?php $clase
=$_POST['clase']; ?>
<?php $tipo
=$_POST['tipo']; ?>
<?php $preciominimo
=$_POST['preciominimo']; ?>
<?php $preciomaximo
=$_POST['preciomaximo']; ?>
<?php $minimom2
=$_POST['minimom2']; ?>
<?php $maximom2
=$_POST['maximom2']; ?>
<?php $maximom2
=$_POST['maximom2']; ?>
<?php $garaje
=$_POST['garaje']; ?>
<?php $id
=$_POST['id']; ?>
<?php
$maxRows_varclase 
10;
$pageNum_varclase 0;
if (isset(
$_GET['pageNum_varclase'])) {
  
$pageNum_varclase $_GET['pageNum_varclase'];
}
$startRow_varclase $pageNum_varclase $maxRows_varclase;

mysql_select_db($database_propiedades$propiedades);
$query_varclase "SELECT id, titulo, resumen, habitaciones, tipo, superficie, precio, fotocabecera FROM propiedades WHERE clase LIKE '$clase' OR tipo LIKE '$tipo' OR precio BETWEEN '$precio_minimo' AND '$precio_maximo' OR superficie BETWEEN '$minimom2' AND '$maximom2' ";
$query_limit_varclase sprintf("%s LIMIT %d, %d"$query_varclase$startRow_varclase$maxRows_varclase);
$varclase mysql_query($query_limit_varclase$propiedades) or die(mysql_error());
$row_varclase mysql_fetch_assoc($varclase);

if (isset(
$_GET['totalRows_varclase'])) {
  
$totalRows_varclase $_GET['totalRows_varclase'];
} else {
  
$all_varclase mysql_query($query_varclase);
  
$totalRows_varclase mysql_num_rows($all_varclase);
}
$totalPages_varclase ceil($totalRows_varclase/$maxRows_varclase)-1;
?>
  #2 (permalink)  
Antiguo 03/06/2009, 06:30
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Problema con buscador

No lo entiendo bien, pero a lo mejor solo tienes que liar las condiciones en la query con el operator AND en lugar de OR
  #3 (permalink)  
Antiguo 03/06/2009, 06:39
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Problema con buscador

Cita:
Iniciado por abidibo Ver Mensaje
No lo entiendo bien, pero a lo mejor solo tienes que liar las condiciones en la query con el operator AND en lugar de OR
He probado con AND y se tienen que cumplir cada una de las selecciones que realize, pero si por ejemplo, no selecciona alguna de ellas, entonces no me muestra ningun resultado.

Es decir, si por ejemplo selecciono en el formulario de busqueda Tipo oferta y no selecciono nada más de este formulario, entonces no muestra nada, tengo que seleccionar todos los campos y no dejar ninguno sin seleccionar.
  #4 (permalink)  
Antiguo 03/06/2009, 07:05
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Problema con buscador

Bueno, solo tienes que controlar si los campos han sido seleccionados:

Código PHP:
$campo1 $_POST['campo1'];
$campo2 $_POST['campo2'];
$campo3 $_POST['campo3'];
$where = array();
if(
$campo1array_push($where"campo1='$campo1'");
if(
$campo2array_push($where"campo2 LIKE '%$campo2%'");
if(
$campo3array_push($where"(campo3<'$campo3' OR campo3>'$campo3')");
//...
$where_string implode(" AND "$where);
if(
$where_string$where_string "WHERE ".$where_string;

// utilizas este where_string en la query
$query "SELECT * FROM tabla $where"
Asì en la query solo pones los datos que han sido seleccionados. Si no seleccionas nada pues te salen todos lo registros.
Asi' puede funccionar?
  #5 (permalink)  
Antiguo 03/06/2009, 07:30
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Problema con buscador

Cita:
Iniciado por abidibo Ver Mensaje
Bueno, solo tienes que controlar si los campos han sido seleccionados:

Código PHP:
$campo1 $_POST['campo1'];
$campo2 $_POST['campo2'];
$campo3 $_POST['campo3'];
$where = array();
if(
$campo1array_push($where"campo1='$campo1'");
if(
$campo2array_push($where"campo2 LIKE '%$campo2%'");
if(
$campo3array_push($where"(campo3<'$campo3' OR campo3>'$campo3')");
//...
$where_string implode(" AND "$where);
if(
$where_string$where_string "WHERE ".$where_string;

// utilizas este where_string en la query
$query "SELECT * FROM tabla $where"
Asì en la query solo pones los datos que han sido seleccionados. Si no seleccionas nada pues te salen todos lo registros.
Asi' puede funccionar?

Gracias amigo por tu interes.
Solo una cosilla

¿donde tendría que insertar exactamente el codigo?
  #6 (permalink)  
Antiguo 03/06/2009, 07:40
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Problema con buscador

Código PHP:
<?php 
require_once('Connections/propiedades.php');
$clase=$_POST['clase']; 
$tipo=$_POST['tipo']; 
$preciominimo=$_POST['preciominimo']; 
$preciomaximo=$_POST['preciomaximo']; 
$minimom2=$_POST['minimom2']; 
$maximom2=$_POST['maximom2']; 
$garaje=$_POST['garaje']; 
$id=$_POST['id']; 
$maxRows_varclase 10;
$pageNum_varclase 0;
if (isset(
$_GET['pageNum_varclase'])) {
  
$pageNum_varclase $_GET['pageNum_varclase'];
}
$startRow_varclase $pageNum_varclase $maxRows_varclase;

$where = array();
if(
$clasearray_push($where"clase LIKE '$clase'");
if(
$tipoarray_push($where"tipo LIKE '$tipo'");
if(
$preciominimo && $preciomaximoarray_push($where"(precio BETWEEN '$precio_minimo' AND '$precio_maximo')");
if(
$minimom2 && $maximom2array_push($where"(superficie BETWEEN '$minimom2' AND '$maximom2')");

$where_string implode(" AND "$where);
if(
$where_string$where_string "WHERE ".$where_string

mysql_select_db($database_propiedades$propiedades);
$query_varclase "SELECT id, titulo, resumen, habitaciones, tipo, superficie, precio, fotocabecera FROM propiedades $where_string";
$query_limit_varclase sprintf("%s LIMIT %d, %d"$query_varclase$startRow_varclase$maxRows_varclase);
$varclase mysql_query($query_limit_varclase$propiedades) or die(mysql_error());
$row_varclase mysql_fetch_assoc($varclase);

if (isset(
$_GET['totalRows_varclase'])) {
  
$totalRows_varclase $_GET['totalRows_varclase'];
} else {
  
$all_varclase mysql_query($query_varclase);
  
$totalRows_varclase mysql_num_rows($all_varclase);
}
$totalPages_varclase ceil($totalRows_varclase/$maxRows_varclase)-1;
?>
  #7 (permalink)  
Antiguo 03/06/2009, 08:03
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Problema con buscador

Perdona. Pero no funciona. Sigue sin mostrar resultados.
Solo muestra resultados si selecciono cualquier valor de los campos del formulario. Si dejo alguno sin seleccionar, no aparece nada

Última edición por Okiro; 03/06/2009 a las 09:02
  #8 (permalink)  
Antiguo 04/06/2009, 01:37
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Problema con buscador

Cita:
Iniciado por Okiro
Abidibo, con el codigo que me pasastes no realiza nada diferente a lo que ya tenía. Si dejo alguna opción sin seleccionar no muestra nada
Hola, bueno vamos a ver porque: modifica tu codigo asi':
Código PHP:
<?php 
require_once('Connections/propiedades.php');
$clase=$_POST['clase']; 
$tipo=$_POST['tipo']; 
$preciominimo=$_POST['preciominimo']; 
$preciomaximo=$_POST['preciomaximo']; 
$minimom2=$_POST['minimom2']; 
$maximom2=$_POST['maximom2']; 
$garaje=$_POST['garaje']; 
$id=$_POST['id']; 
$maxRows_varclase 10;
$pageNum_varclase 0;
if (isset(
$_GET['pageNum_varclase'])) {
  
$pageNum_varclase $_GET['pageNum_varclase'];
}
$startRow_varclase $pageNum_varclase $maxRows_varclase;

$where = array();
if(
$clasearray_push($where"clase LIKE '$clase'");
if(
$tipoarray_push($where"tipo LIKE '$tipo'");
if(
$preciominimo && $preciomaximoarray_push($where"(precio BETWEEN '$precio_minimo' AND '$precio_maximo')");
if(
$minimom2 && $maximom2array_push($where"(superficie BETWEEN '$minimom2' AND '$maximom2')");

$where_string implode(" AND "$where);
if(
$where_string$where_string "WHERE ".$where_string

mysql_select_db($database_propiedades$propiedades);
$query_varclase "SELECT id, titulo, resumen, habitaciones, tipo, superficie, precio, fotocabecera FROM propiedades $where_string";
$query_limit_varclase sprintf("%s LIMIT %d, %d"$query_varclase$startRow_varclase$maxRows_varclase);
$varclase mysql_query($query_limit_varclase$propiedades) or die(mysql_error());
exit(
$query_limit_varclase);
$row_varclase mysql_fetch_assoc($varclase);

if (isset(
$_GET['totalRows_varclase'])) {
  
$totalRows_varclase $_GET['totalRows_varclase'];
} else {
  
$all_varclase mysql_query($query_varclase);
  
$totalRows_varclase mysql_num_rows($all_varclase);
}
$totalPages_varclase ceil($totalRows_varclase/$maxRows_varclase)-1;
?>
Y haz una busqueda sin seleccionar nada. El script tndria que parar y mostrarte la query que se produce. Despues ponme la query que voy a ver porque se comporta asi, gracia.
Ciao!
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 17:56.