Foros del Web » Programando para Internet » PHP »

buscador avanzado

Estas en el tema de buscador avanzado en el foro de PHP en Foros del Web. Mi problema es el siguiente: tengo un buscador senzillo de noticias, que funciona bien. EL problema es cuando quiero hacer la búsqueda avanzada. Le doy ...
  #1 (permalink)  
Antiguo 23/08/2007, 09:59
 
Fecha de Ingreso: julio-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 0
buscador avanzado

Mi problema es el siguiente:
tengo un buscador senzillo de noticias, que funciona bien. EL problema es cuando quiero hacer la búsqueda avanzada. Le doy la posibilidad al usuario de buscar segun título(textfield), contenido(textarea), importancia(select), tema(checkbox)
y lectores(radiobutton). Es decir, cada una de las opciones posibles del formulario.

He empezado habilitando solo las opciones de titulo, contenido e importancia.
Tengo que decir, que en el select de importancia, he tenido que añadir el valor en blanco (value=nada) por si el usuario no quiere buscar según ese criterio

El código adjunto, funciona bien. Pero creo que si tengo que hacer esto para cada una de las opciones de mi formulario, se llenará de IF's y no creo que sea lo correcto. Alguien me puede dar una mano??


Código PHP:
$campo1=$_POST["tit"];
$campo2=$_POST["cont"];
$campo4=$_POST["imp"];

if (
$campo4=="nada"){
$ssql mysql_query("SELECT * FROM noticias WHERE titulo LIKE '%$campo1%' AND contenido LIKE '%$campo2%'"$link); 
while(
$tabla=mysql_fetch_array($ssql)){
 echo 
"<table width='655' border='1' cellspacing='0' cellpadding='0'>";
 echo 
"<tr><td><strong>Noticia: </strong>".$tabla['titulo']."</td></tr>";
 echo 
"<tr><td><strong>Contenido: </strong>".$tabla['contenido']."</td></tr>";
 echo 
"<tr><td><strong>Importancia: </strong>".$tabla['importancia']."</td></tr>"
 echo 
"</table>";
 echo
"<br>";
 } }
else {
$ssql mysql_query("SELECT * FROM noticias WHERE titulo LIKE '%$campo1%' AND contenido LIKE '%$campo2%' AND importancia LIKE '%$campo4%' "$link); 
while(
$tabla=mysql_fetch_array($ssql)){
 echo 
"<table width='655' border='1' cellspacing='0' cellpadding='0'>";
 echo 
"<tr><td><strong>Noticia: </strong>".$tabla['titulo']."</td></tr>";
 echo 
"<tr><td><strong>Contenido: </strong>".$tabla['contenido']."</td></tr>";
 echo 
"<tr><td><strong>Importancia: </strong>".$tabla['importancia']."</td></tr>"
 echo 
"</table>";
 echo
"<br>"
}
}
?> 
ya de paso...¿como hago para mostrar el mensaje "No se ha encontrado nada" si eso ocurre?

Muchisimas gracias por adelantado!
  #2 (permalink)  
Antiguo 23/08/2007, 11:27
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 8 meses
Puntos: 33
Re: buscador avanzado

Desgraciadamente, el numero de if's sera proporcional al numero de criterios que uses en tu busqueda, .... no hay vuelta de hoja con eso.... ahora con respecto a como mostrar que no hay resultado es muy sencillo puedo usar la función empty() para verificar, de manera elegante, si tu consulta es diferente de null, es decir

Código PHP:
$ssql mysql_query("consulta");
if(empty(
$ssql))
 echo 
"No existen resultados"
else
//Tu info 
Saludillos.
  #3 (permalink)  
Antiguo 23/08/2007, 11:37
 
Fecha de Ingreso: julio-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: buscador avanzado

En serio???

bua!! me voy a morir! jejeje

Pues nada, a crear if's..
Gracias por lo otro!
  #4 (permalink)  
Antiguo 23/08/2007, 11:55
Avatar de demiurgo_daemon  
Fecha de Ingreso: diciembre-2006
Ubicación: Querétaro
Mensajes: 184
Antigüedad: 17 años, 11 meses
Puntos: 2
Re: buscador avanzado

Hola,

también puedes reducir un poco el código dentro de los if, concatenando condiciones en vez de escribir la cadena completa cada vez. Tal vez así te queda la aplicación más entendible.

Código PHP:
$campo1=$_POST["tit"];
$campo2=$_POST["cont"];
$campo4=$_POST["imp"];

$query "SELECT * FROM noticias WHERE titulo LIKE '%$campo1%' AND contenido LIKE '%$campo2%'";
if (
$campo4!="nada"){
    
$query .= " AND importancia LIKE '%$campo4%'";
}
$ssql mysql_query($query$link);
if(empty(
$ssql))
    echo 
"No existen resultados"
else while($tabla=mysql_fetch_array($ssql)){
    echo 
"<table width='655' border='1' cellspacing='0' cellpadding='0'>";
    echo 
"<tr><td><strong>Noticia: </strong>".$tabla['titulo']."</td></tr>";
    echo 
"<tr><td><strong>Contenido: </strong>".$tabla['contenido']."</td></tr>";
    echo 
"<tr><td><strong>Importancia: </strong>".$tabla['importancia']."</td></tr>"
    echo 
"</table>";
    echo
"<br />";

saludos
  #5 (permalink)  
Antiguo 23/08/2007, 12:08
 
Fecha de Ingreso: julio-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: buscador avanzado

bueno, algo es algo!! gracias

Pero lo he provado y me manda el sigueinte error:

Parse error: parse error, unexpected T_ELSE, expecting ',' or ';' in --> linea
Código PHP:
else while($tabla=mysql_fetch_array($ssql)){ 
alomejor es cosa mía...
  #6 (permalink)  
Antiguo 23/08/2007, 12:10
 
Fecha de Ingreso: julio-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: buscador avanzado

Nada, ya está.

Faltaba el ; en la línea anterior.

Gracias
  #7 (permalink)  
Antiguo 24/08/2007, 10:55
 
Fecha de Ingreso: julio-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: buscador avanzado

Cita:
Iniciado por mauled Ver Mensaje
Desgraciadamente, el numero de if's sera proporcional al numero de criterios que uses en tu busqueda, .... no hay vuelta de hoja con eso.... ahora con respecto a como mostrar que no hay resultado es muy sencillo puedo usar la función empty() para verificar, de manera elegante, si tu consulta es diferente de null, es decir

Código PHP:
$ssql mysql_query("consulta");
if(empty(
$ssql))
 echo 
"No existen resultados"
else
//Tu info 
Saludillos.
Hola Mauled!

Estube probando esto pero cuando no encuentra nada no me muestra el mensaje. Te mando parte del codigo a ver si tu o alguien puede detectar mi error

Código PHP:
<?php $query "SELECT * FROM noticias WHERE titulo LIKE '%$campo1%' AND contenido LIKE '%$campo2%'"
$ssql mysql_query($query$link); 
if(empty(
$ssql)) 
 echo 
"No existen resultados"
else 
while(
$tabla=mysql_fetch_array($ssql)) {
 echo 
"<table width='655' border='1' cellspacing='0' cellpadding='0'>";
 echo 
"<tr><td><strong>Noticia: </strong>".$tabla['titulo']."</td></tr>";
 echo 
"</table>";
 echo
"<br>";
}
?>
Gracias!
  #8 (permalink)  
Antiguo 24/08/2007, 11:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: buscador avanzado

Prueba asi:
Código PHP:
<?php $query "SELECT * FROM noticias WHERE titulo LIKE '%$campo1%' AND contenido LIKE '%$campo2%'"
$ssql mysql_query($query$link); 
if(
mysql_num_rows$ssql ) == 0) {
 echo 
"No existen resultados"
} else  {
while(
$tabla=mysql_fetch_array($ssql)) {
 echo 
"<table width='655' border='1' cellspacing='0' cellpadding='0'>";
 echo 
"<tr><td><strong>Noticia: </strong>".$tabla['titulo']."</td></tr>";
 echo 
"</table>";
 echo
"<br>";
}
}
?>
Saludos.
  #9 (permalink)  
Antiguo 24/08/2007, 11:05
 
Fecha de Ingreso: julio-2007
Mensajes: 63
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: buscador avanzado

Al final voy a creer que eres mi salvador!! jejej

Gracias de nuevo
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 21:39.