Foros del Web » Programando para Internet » PHP »

Buscador

Estas en el tema de Buscador en el foro de PHP en Foros del Web. Buenas, estoy intentando armar un buscador con varias opciones de busqueda. Lo que intento hacer es que el usuario pueda filtrar la informacion a buscar ...
  #1 (permalink)  
Antiguo 20/09/2006, 12:50
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta Buscador

Buenas, estoy intentando armar un buscador con varias opciones de busqueda. Lo que intento hacer es que el usuario pueda filtrar la informacion a buscar seleccionando de unos deplegables y un imput. El problema que tengo es que nose bien como hacerlo de forma independiente, es decir que pueda filtrar por una condicion dejando las otras en blaco o pueda filtar por todas a las vez.
Les paso mi codigo, es algo rustico ya que uso IF y esa es mi limitacion, como lo podria armar?

Código PHP:
<?
  
  
include('bahiaclasificadosconexion.php');

  
$aviso $_POST['aviso'];
  
$tipo $_POST['tipo'];
  
$operacion $_POST['operacion'];
  
  
$tipo addslashes($tipo);
  
$operacion addslashes($operacion);
  
$aviso addslashes($aviso);
  
if(
$operacion == "" || $aviso == "")
{
$consulta "select * from avisos_inmobiliarios where avisos_inmobiliarios.tipo='$tipo'";
$resultado mysql_query($consulta);
$num_resultados mysql_num_rows($resultado);
}
else
{ if(
$aviso == "")
 {
 
$consulta "select * from avisos_inmobiliarios where avisos_inmobiliarios.tipo='$tipo' AND avisos_inmobiliarios.operacion='$operacion' ";
 
$resultado mysql_query($consulta);
 
$num_resultados mysql_num_rows($resultado);
 }
 else
 {
 
$consulta "select * from avisos_inmobiliarios where avisos_inmobiliarios.tipo='$tipo' AND avisos_inmobiliarios.operacion='$operacion' AND avisos_inmobiliarios.aviso='$aviso' ";
 
$resultado mysql_query($consulta);
 
$num_resultados mysql_num_rows($resultado);
 }
}
  echo 
"<p><strong>Número de avisos encontrados:".$num_resultados." </strong></p>";

  for (
$i=0$i <$num_resultados$i++)
  {
     
$row mysql_fetch_array($resultado);
     echo 
"<p><strong>".($i+1).". Tipo: ";
     echo 
stripslashes($row["tipo"]);
     echo 
"</strong><br>Operacion: ";
     echo 
stripslashes($row["operacion"]);
     echo 
"<br>Ubicacion: ";
     echo 
stripslashes($row["ubicacion"]);
     echo 
"<br>Direccion: ";
     echo 
stripslashes($row["direccion"]);
     echo 
"<br>Precio: ";
     echo 
stripslashes($row["precio"]);
     echo 
"<br>Aviso: ";
     echo 
stripslashes($row["aviso"]);
     echo 
"<br>Inmobiliaria: ";
     echo 
stripslashes($row["nombre_inmobiliaria"]);
     echo 
"<p><a href=bahiainmobiliariadetalles.php?id_aviso_inm=$row[id_aviso_inm]>Ver AVISO</a> \n"
     echo 
"</p>";

  }

?>
  #2 (permalink)  
Antiguo 20/09/2006, 13:10
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
De acuerdo no te compliques...

lo unico que haces es generra una consulta con mas criterios de busqueda...

ahi un codigo con una manera de hacerlo .. analizalo y veras...
Código:
		$strsql = "SELECT mod_codigo, mod_nombre FROM int_modulos";		
		if(strlen($mod_nombre) > 0){
				$strsql.= " WHERE mod_nombre  LIKE '%".$mod_nombre."%'";				
			}				
		$rs_datos = select_data($strsql, &$filas, &$columnas);
si trae algun parametro lo agrego al select como criterio de busqueda... y eso.
saludos
__________________
sEIK! -Chile-
Analista Programador.
  #3 (permalink)  
Antiguo 21/09/2006, 14:45
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta ...sigo

Buenas, sigo dando vuelta con el tema del buscador. Alguien me puede detallar como poder hacerlo.
  #4 (permalink)  
Antiguo 22/09/2006, 07:36
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta Buenas

Continuo con el tema del buscador, alguien me puede dar una mano ademas de seik! (no termino de comprender bien tu codigo).
Muchas gracias
  #5 (permalink)  
Antiguo 22/09/2006, 08:08
Avatar de jeanclon  
Fecha de Ingreso: mayo-2005
Mensajes: 258
Antigüedad: 19 años
Puntos: 2
Bueno lo que yo hago es crear cada query segun lo que haya enviado el usuario

Código PHP:
    if (empty($_SESSION["anal"]) && empty($_SESSION["clasific"]) && empty($_SESSION["numcas"]) && empty($_SESSION["dc1"])) { 
                
$strsql "select * from evaluacion order by '".$_GET['order']."'";            
    }
    if (!empty(
$_SESSION["anal"]) && empty($_SESSION["clasific"]) && empty($_SESSION["numcas"]) && empty($_SESSION["dc1"])) {
                
$strsql "select * from evaluacion where analista='".$_SESSION["anal"]."' order by '".$_GET['order']."'";            
    }
    if (empty(
$_SESSION["anal"]) && !empty($_SESSION["clasific"]) && empty($_SESSION["numcas"]) && empty($_SESSION["dc1"])) {
                
$strsql "select * from evaluacion where tipocla='".$_SESSION["clasific"]."' order by '".$_GET['order']."'";            
    } 
Bueno como ves es hacer los condicionales con cada posibilidad, solo puse las primeras en el caso este que son 4 variables de filtrado seria 16 combinaciones (creo).

Puse fuae parte del codigo que tengo obvia lo que son variables de sesion, para ti serian las pariables POST del formulario. y obvia tambien lo de order by.
  #6 (permalink)  
Antiguo 22/09/2006, 08:08
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
continua

si me dices que no entiendes, seguro te podre ayudar...
pero intentalo... es dificil que te den algo listo, siempre tienes que poner de tu investigacion y analisis de los codogos propuestos...
pero insisto, pregunta que no entiendes y te explico no ahi problema
__________________
sEIK! -Chile-
Analista Programador.
  #7 (permalink)  
Antiguo 22/09/2006, 08:13
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
joya.

Muchas gracias, jeanclon y seik!
lo que no entiendo bien de tu codigo seik! es la siguiente linea:

Código PHP:
if(strlen($mod_nombre) > 
Muchas gracias
  #8 (permalink)  
Antiguo 22/09/2006, 08:16
Avatar de maralbust  
Fecha de Ingreso: febrero-2004
Ubicación: Santiago
Mensajes: 578
Antigüedad: 20 años, 2 meses
Puntos: 0
mi querido amigo la respuesta ya te la habian dado, si quieres que te creemos el codigo nones, mas menos quedaria asi

Código PHP:
<?
if($operacion == "" || $aviso == "") {
    
$consulta "select * from avisos_inmobiliarios where avisos_inmobiliarios.tipo='$tipo'";
}
if(
$operacion != "") {
    
$consulta .= " AND avisos_inmobiliarios.operacion='$operacion' ";
}
if(
$aviso != "") {
     
$consulta .= " AND avisos_inmobiliarios.aviso='$aviso' ";
}
?>
saludos
__________________
..:: NADA SE PIERDE SOLO SE TRANSFORMA ::..
  #9 (permalink)  
Antiguo 22/09/2006, 08:27
Avatar de jeanclon  
Fecha de Ingreso: mayo-2005
Mensajes: 258
Antigüedad: 19 años
Puntos: 2
maralbust

hay algun where que yo pueda poner pero que no filtre nada, por que concatenando a mi no me sirve por que el select principal es que traiga todo, y concatenar colocando " AND .... " no me sirve por que nunca tendria el where en la consulta sql.
  #10 (permalink)  
Antiguo 22/09/2006, 08:38
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta gracias

gracias, maralbust
ahora pruebo.
  #11 (permalink)  
Antiguo 22/09/2006, 09:05
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
me falto mencionar...

lo que pasa, que hago refencia a un bucador dentro del mismo frame (pagina)
entoces cada vez que carga la pagina pregunto si los valores del formulario de busqueda contienen valor los agrego a la consulta a la base datos.
entoces el codigo completo quedaria mas o menos asi.

Código PHP:
<?php    
        
if (isset($_POST["txtnombre"])){
            
            
$mod_nombre =$_POST["txtnombre"];    
        }

        
$strsql "SELECT mod_codigo, mod_nombre FROM int_modulos";        
        if(
strlen($mod_nombre) > 0){
                
$strsql.= " WHERE mod_nombre  LIKE '%".$mod_nombre."%'";                
            }                
        
$rs_datos select_data($strsql, &$filas, &$columnas);    
?>
cuando carga por primera vez la pagina... verifico si trae regisstros con el if (isset($_POST["txtnombre"])) si trae lo guardo en $mod_nombre =$_POST["txtnombre"]; genero la consulta normal y como segunda validacion if(strlen($mod_nombre) > 0){ pregunto si el largo de caracteres de "txtnombre" es mayor a 0 (cero)
si es mayor pasa y se agrega una parte de la consulta a la base datos con ese parametro, asi cuando el usuario presiona buscar , rescata el valor y lo agrega a la consulta dejado filtrado el SQL. asi genero mi buscador...
este es bien basico pero es mas entendible... por lo menos una idea...

si te das cuenta la linea donde se escribe esto
$strsql.=
lleva un punto lo cual concatena a la pregunta inicial del $strsql=

espero sea mas claro esta vez
__________________
sEIK! -Chile-
Analista Programador.
  #12 (permalink)  
Antiguo 22/09/2006, 09:11
Avatar de maralbust  
Fecha de Ingreso: febrero-2004
Ubicación: Santiago
Mensajes: 578
Antigüedad: 20 años, 2 meses
Puntos: 0
Cita:
Iniciado por jeanclon Ver Mensaje
maralbust

hay algun where que yo pueda poner pero que no filtre nada, por que concatenando a mi no me sirve por que el select principal es que traiga todo, y concatenar colocando " AND .... " no me sirve por que nunca tendria el where en la consulta sql.
pon una if si todas la variables son = "" entonces arrojas la consulta completa de lo contrario haz la otra consulta


saludos
__________________
..:: NADA SE PIERDE SOLO SE TRANSFORMA ::..
  #13 (permalink)  
Antiguo 22/09/2006, 09:48
Avatar de jeanclon  
Fecha de Ingreso: mayo-2005
Mensajes: 258
Antigüedad: 19 años
Puntos: 2
ok esta bien seria entonces como yo lo puse en la respuesta, pero claro haciendo la concatenacion es mucho mas corto, solo que si no tengo un where con una condicion fija, no puedo hacerlo.

Lo preguntaba por que creo que me tocara hacer uno fdonde existen creo que 9 o 10 campos para filtrar, imaginate las combinaciones que tendria que hacer....
  #14 (permalink)  
Antiguo 22/09/2006, 09:52
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
De acuerdo

serian menos que todas las
if (empty($_SESSION["anal"]) && !empty($_SESSION["clasific"]) && empty($_SESSION["numcas"]) && empty($_SESSION["dc1"])) {
$strsql = "select * from evaluacion where tipocla='".$_SESSION["clasific"]."' order by '".$_GET['order']."'";
}

ya que solo son concatenar AND a la consulta.
__________________
sEIK! -Chile-
Analista Programador.
  #15 (permalink)  
Antiguo 22/09/2006, 10:17
Avatar de jeanclon  
Fecha de Ingreso: mayo-2005
Mensajes: 258
Antigüedad: 19 años
Puntos: 2
Aja seik eso lo se y es lo que trato de hacer, pero como concatenar AND si en la consulta principal no tengo WHERE???, tampoco puedria concatenar con WHERE por que tendria varios WHERE en una consulta lo cual da error.

Por eso pregunte si puedo poner un WHERE algo=$algo pero que traiga todo.
  #16 (permalink)  
Antiguo 22/09/2006, 10:25
Avatar de maralbust  
Fecha de Ingreso: febrero-2004
Ubicación: Santiago
Mensajes: 578
Antigüedad: 20 años, 2 meses
Puntos: 0
if ($var1 != "" || $var != "" || $var3 != "") {
$strsql .= " WHERE ";
}

asi en caso de de que una de tus variables vaya definida se concatenara el where solito al final de tu query de lo contrario solo arrojara la consulta inicial

saludos
__________________
..:: NADA SE PIERDE SOLO SE TRANSFORMA ::..
  #17 (permalink)  
Antiguo 22/09/2006, 10:43
Avatar de jeanclon  
Fecha de Ingreso: mayo-2005
Mensajes: 258
Antigüedad: 19 años
Puntos: 2
Excelente pero no serviria por que luego de colocar el where lo otro seria poner las condiciones, el problema esta en que la primera no llevaria el AND, y las otras si. Asi no podria colocar las concatenaciones de las condiciones de la siguiente manera

if($var1!= "") {
$strsql .= " AND var1='$var1";
}
  #18 (permalink)  
Antiguo 02/10/2006, 18:44
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta sigo

Buenas, despues de algun tiempo vuelvo a intentar armar un buscador con diferentes filtros, pero al realizar una busqueda me tira el siguiente error:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/city45/public_html/bahiaagenciabuscar.php on line 289

Que es lo que estoy haciendo mal¿?

Aca va el codigo de mi buscador:

Código PHP:
<?
  
include('bahiaclasificadosconexion.php');
  
$MARCANOMBRE $_POST['MARCANOMBRE'];
  
$modelos $_POST['modelos'];
  
$ano $_POST['ano'];
  
$combustible $_POST['combustible'];
  
$precio $_POST['precio'];
  
$MARCANOMBRE addslashes($MARCANOMBRE);
  
$modelos addslashes($modelos);
  
$ano addslashes($ano);
  
$combustible addslashes($combustible);
  
$precio addslashes($precio);
    
if(
$ano == "" || $combustible == "" || $precio == "") {
    
$consulta "select * from avisos_agencias where avisos_agencias.modelos='$modelos'";
}
if(
$ano != "") {
    
$consulta .= " AND avisos_agencias.ano='$ano' ";
}
if(
$combustible != "") {
     
$consulta .= " AND avisos_agencias.combustible='$combustible' ";
}
if(
$precio != "") {
     
$consulta .= " AND avisos_agencias.precio='$precio' ";
}
  
  
$resultado mysql_query($consulta);
  
$num_resultados mysql_num_rows($resultado); // ACA TIRA EL ERROR

  
echo "<p><strong>Número de avisos encontrados: ".$num_resultados."</strong></p>"

  for (
$i=0$i <$num_resultados$i++)
  {
    
$row mysql_fetch_array($resultado);
     echo 
"<p><strong>".($i+1).". Tipo: ";
     echo 
stripslashes($row["tipo"]);
     echo 
"</strong><br>Marca: ";
     echo 
stripslashes($row["marca"]);
     echo 
"<br>Modelo: ";
     echo 
stripslashes($row["modelo"]);
     echo 
"<br>Año: ";
     echo 
stripslashes($row["ano"]);
     echo 
"<br>Combustible: ";
     echo 
stripslashes($row["combustible"]);
     echo 
"<br>Kilometros: ";
     echo 
stripslashes($row["kilometros"]);
     echo 
"<br>Color: ";
     echo 
stripslashes($row["color"]);
     echo 
"<br>Precio: ";
     echo 
stripslashes($row["precio"]);
     echo 
"<br>Aviso: ";
     echo 
stripslashes($row["aviso"]);
     echo 
"<br>Agencia: ";
     echo 
stripslashes($row["nombre_agencia"]);
     echo 
"<p><a href=bahiaagenciasdetalles.php?id_aviso_agencia=$row[id_aviso_agencia]>Ver AVISO</a> \n";
     echo 
"</p>";
  }

?>
Muchas gracias!
  #19 (permalink)  
Antiguo 03/10/2006, 05:06
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta una mano?

Buenas, introduje en mi buscador el siguiente where:
Código PHP:
<? where ".$modelos." like '%".$modelos."%'"; ?>
y no me ha tirado mas error, lo que me interesa saber si es correcta la forma de utilizar los if.
Ya que quiero hacer un formulario donde el usuario pueda filtrar la busqueda. Es decir si tiene:
FILTRO 01
FILTRO 02
FILTRO 03
FILTRO 04
Pueda seleccionar cualquiera, por ejemplo el FILTRO 03 independientemente de los otros. Es por esto que creo que con los IF que tengo armados no voy muy lejos. Alguna idea?

Muchas gracias
  #20 (permalink)  
Antiguo 03/10/2006, 17:40
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta aca me quede

Buenas, escribo para que me den una mano ya que nose si es correcto el desarrollo del siguiente codigo, que tiene como fin buscar dentro de una tabla.
Este codigo toma los valores que el usuario setea en un formulario. Donde puede filtrar de distinto modo la informacion.
En este caso puede consultar el modeo, el año, el combustible o el precio. Todas estas consultas deben ser independientes para asi poder siempre realizar una busqueda, sin necesidad de que todo el formulario este completo.
Espero se entienda y poder arreglar esto.
Aqui les paso el codigo:
Código PHP:
<?
  
include('bahiaclasificadosconexion.php');
  
$MARCANOMBRE $_POST['MARCANOMBRE'];
  
$modelos $_POST['modelos'];
  
$ano $_POST['ano'];
  
$combustible $_POST['combustible'];
  
$precio $_POST['precio'];
  
$MARCANOMBRE addslashes($MARCANOMBRE);
  
$modelos addslashes($modelos);
  
$ano addslashes($ano);
  
$combustible addslashes($combustible);
  
$precio addslashes($precio);
    
if(
$ano == "" || $combustible == "" || $precio == "") {
    
$consulta "select * from avisos_agencias where avisos_agencias.modelos like '%".$modelos."%'";
}
if(
$ano != "") {
    
$consulta .= " AND avisos_agencias.ano like '%".$ano."%' ";
}
if(
$combustible != "") {
     
$consulta .= " AND avisos_agencias.combustible like '%".$combustible."%'";
}
if(
$precio != "") {
     
$consulta .= " AND avisos_agencias.precio like '%".$precio."%'";
}
  
  
$resultado mysql_query($consulta);
  
$num_resultados mysql_num_rows($resultado);

  echo 
"<p><strong>Número de avisos encontrados: ".$num_resultados."</strong></p>";

  for (
$i=0$i <$num_resultados$i++)
  {
    
$row mysql_fetch_array($resultado);
     echo 
"<p><strong>".($i+1).". Tipo: ";
     echo 
stripslashes($row["tipo"]);
     echo 
"</strong><br>Marca: ";
     echo 
stripslashes($row["marca"]);
     echo 
"<br>Modelo: ";
     echo 
stripslashes($row["modelo"]);
     echo 
"<br>Año: ";
     echo 
stripslashes($row["ano"]);
     echo 
"<br>Combustible: ";
     echo 
stripslashes($row["combustible"]);
     echo 
"<br>Kilometros: ";
     echo 
stripslashes($row["kilometros"]);
     echo 
"<br>Color: ";
     echo 
stripslashes($row["color"]);
     echo 
"<br>Precio: ";
     echo 
stripslashes($row["precio"]);
     echo 
"<br>Aviso: ";
     echo 
stripslashes($row["aviso"]);
     echo 
"<br>Agencia: ";
     echo 
stripslashes($row["nombre_agencia"]);
     echo 
"<p><a href=bahiaagenciasdetalles.php?id_aviso_agencia=$row[id_aviso_agencia]>Ver AVISO</a> \n";
     echo 
"</p>";
  }

?>
Muchas gracias
  #21 (permalink)  
Antiguo 04/10/2006, 10:07
Avatar de skatomundo  
Fecha de Ingreso: junio-2002
Ubicación: Santiago - CL
Mensajes: 2.532
Antigüedad: 21 años, 10 meses
Puntos: 125
No leí todos los comentarios sobre el tema, pero lo que hago sobre búsquedas por múltiples criterios es:

Generar la SQL dinamicamente, es decir, sino que los nombres de los elementos toman el valor del dato Campo y luego los valores son las determinantes de búsqueda, ahora si no las declaras debes validar los contenidos solamente!

salu2
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 07:20.