Foros del Web » Programando para Internet » PHP »

Buscador

Estas en el tema de Buscador en el foro de PHP en Foros del Web. Hola gente, mi problema es el siguiente: tengo una tabla con noticias y quiero hacer un buscador para buscar noticias. la idea es que yo ...
  #1 (permalink)  
Antiguo 04/07/2005, 15:49
Avatar de PabloP  
Fecha de Ingreso: marzo-2005
Mensajes: 83
Antigüedad: 12 años, 8 meses
Puntos: 0
Buscador

Hola gente, mi problema es el siguiente:

tengo una tabla con noticias y quiero hacer un buscador para buscar noticias.
la idea es que yo ingrese en una caja de texto por ejemplo hola mundo y me traiga todas las noticias que en el titulo tengan la palabra hola o que tengan la palabra mundo, o ambas y para ello hice el siguiente código.

<?php
$palabras = $_GET['txtpal'];
$desglose = explode(" ", $palabras);
$cantidad = 0;
for ($i=0;$i<count($desglose);$i++)
{
$cantidad++;
}

if (!isset($pag)) $pag = 1; // Por defecto, pagina 1
//Cuenta cuantas noticias existen en la consulta
$j = 0;
$a = 0;
while ($j<$cantidad) {
mysql_select_db($database_conexportal, $conexportal);
$consulta_query_not = ("SELECT COUNT(*) FROM noticias WHERE noticias.titulo_noticia LIKE '%".$desglose[$j]."%'");
$consulta_reg = mysql_query($consulta_query_not, $conexportal) or die(mysql_error());
$j++;
}
list($total) = mysql_fetch_row($consulta_reg);
$tampag = 6;
$reg1 = ($pag-1) * $tampag;
///////////////////////////////////////////////////////////////////
while ($a<$cantidad) {
mysql_select_db($database_conexportal, $conexportal);
$query_not = "SELECT * FROM noticias WHERE noticias.titulo_noticia LIKE '%".$desglose[$a]."%' ORDER BY noticias.fecha_noticia DESC LIMIT $reg1, $tampag";
$reg = mysql_query($query_not, $conexportal) or die(mysql_error());
$a++;
}
if (mysql_num_rows($reg)){
echo "<table width='550' border = '0'> \n";
while ($row = @mysql_fetch_array($reg)) {
echo "<tr><td>".$row["titulo_noticia"]."<br>
".$row["subtitulo_noticia"]."<br><br>
".$row["bajada_noticia"]."<br><br>
".$row["fuente_noticia"]."<br></td></tr>
<tr><td><img src='../imagenes/lineaazul.gif' width='500' height='2'></td></tr> \n";
}
echo "</table> \n";

}
else
echo "¡ No se ha encontrado ningún registro !";


/* Funcion paginar
* actual: Pagina actual
* total: Total de registros
* por_pagina: Registros por pagina
* enlace: Texto del enlace
* Devuelve un texto que representa la paginacion
*/
function paginar($actual, $total, $por_pagina, $enlace) {
$total_paginas = ceil($total/$por_pagina);
$anterior = $actual - 1;
$posterior = $actual + 1;

if ($actual>1)
$texto = "<a href=\"$enlace$anterior\">&laquo;</a> ";
else
$texto = "<b>&laquo;</b> ";
for ($i=1; $i<$actual; $i++)
$texto .= "<a href=\"$enlace$i\">$i</a> ";
$texto .= "<b>$actual</b> ";
for ($i=$actual+1; $i<=$total_paginas; $i++)
$texto .= "<a href=\"$enlace$i\">$i</a> ";
if ($actual<$total_paginas)
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
else
$texto .= "<b>&raquo;</b>";
return $texto;
}

echo paginar($pag, $total, $tampag, "resultado.php?pag=");
?>

el problema es que al entrar el el while que contiene el sql pasa lo siguiente.

la primera vez cuando $a es cero busca todo lo que contenga hola en el titulo, pero luego se incrementa $a para traer todo lo que en el titulo contenga mundo pero reemplaza a la busqueda anterior por lo que pierdo las coincidencias de tutolos con hola, alguien sabe que puedo agregar para solucionarlo, grax.
  #2 (permalink)  
Antiguo 04/07/2005, 16:03
Avatar de PabloP  
Fecha de Ingreso: marzo-2005
Mensajes: 83
Antigüedad: 12 años, 8 meses
Puntos: 0
ya encontre la solucion, gracias
  #3 (permalink)  
Antiguo 04/07/2005, 16:09
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Y si pones la solucion?

Le puede servir a alguien;)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 04/07/2005, 16:27
Avatar de PabloP  
Fecha de Ingreso: marzo-2005
Mensajes: 83
Antigüedad: 12 años, 8 meses
Puntos: 0
ok aca esta la solución
<?php require_once('../Connections/conexportal.php'); ?>//archivo de conexión

<?php
$palabras = $_GET['txtpal'];
$desglose = explode(" ", $palabras);
$cantidad = 0;
for ($i=0;$i<count($desglose);$i++)
{
$cantidad++;
}

if (!isset($pag)) $pag = 1; // Por defecto, pagina 1
//Cuenta cuantas noticias existen en la consulta
$j = 0;
$a = 0;
while ($j<$cantidad) {
mysql_select_db($database_conexportal, $conexportal);
$consulta_query_not = ("SELECT COUNT(*) FROM noticias WHERE noticias.titulo_noticia LIKE '%".$desglose[$j]."%'");
$consulta_reg = mysql_query($consulta_query_not, $conexportal) or die(mysql_error());
$j++;
}
list($total) = mysql_fetch_row($consulta_reg);
$tampag = 6;
$reg1 = ($pag-1) * $tampag;
///////////////////////////////////////////////////////////////////
while ($a<$cantidad) {
mysql_select_db($database_conexportal, $conexportal);
$query_not = "SELECT * FROM noticias WHERE noticias.titulo_noticia LIKE '%".$desglose[$a]."%' ORDER BY noticias.fecha_noticia DESC LIMIT $reg1, $tampag";
$reg = mysql_query($query_not, $conexportal) or die(mysql_error());

if (mysql_num_rows($reg)){
echo "<table width='550' border = '0'> \n";
while ($row = @mysql_fetch_array($reg)) {
echo "<tr><td>".$row["titulo_noticia"]."<br>
".$row["subtitulo_noticia"]."<br><br>
".$row["bajada_noticia"]."<br><br>
".$row["fuente_noticia"]."<br></td></tr>
<tr><td><img src='../imagenes/lineaazul.gif' width='500' height='2'></td></tr> \n";
}
echo "</table> \n";

}
else
echo "¡ No se ha encontrado ningún registro !";

$a++;
}
/* Funcion paginar
* actual: Pagina actual
* total: Total de registros
* por_pagina: Registros por pagina
* enlace: Texto del enlace
* Devuelve un texto que representa la paginacion
*/
function paginar($actual, $total, $por_pagina, $enlace) {
$total_paginas = ceil($total/$por_pagina);
$anterior = $actual - 1;
$posterior = $actual + 1;

if ($actual>1)
$texto = "<a href=\"$enlace$anterior\">&laquo;</a> ";
else
$texto = "<b>&laquo;</b> ";
for ($i=1; $i<$actual; $i++)
$texto .= "<a href=\"$enlace$i\">$i</a> ";
$texto .= "<b>$actual</b> ";
for ($i=$actual+1; $i<=$total_paginas; $i++)
$texto .= "<a href=\"$enlace$i\">$i</a> ";
if ($actual<$total_paginas)
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
else
$texto .= "<b>&raquo;</b>";
return $texto;
}

echo paginar($pag, $total, $tampag, "resultado.php?pag=");
?>

aparentemente ahi se me soluciono, sólo falta validar un par de cosas como que no incluya monosílabos en las busquedas como "y", "de" , "a" etc.
y que por ejemplo si buscas con dos palabras y un registro contiene las dos aparece dos veces. pero no parecen validaciones muy complejas.
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 13:37.