Estoy interesado en hacer un buscador y he encontrado en esta pagina web http://www.php-hispano.net/archivos/Scripts/285/2.0.Fix un script que me parecia bueno. Todavia me falta adaptar el diseño pero me da un error raro.
Si entrais en http://www.giraworks.com/indagopru/index.php lo podeis comprobar lo he subido ahi. Si hago una busqueda de algo que solo tiene un resultado, todo funciona bien. Me devuelve ese resultado. Por ejemplo probad a buscar la palabra "extendida".
El problema esta en si hago una busqueda de algo que tenga mas de un resulado por ejemplo con la palabra "error". El resultado se muestra en tablas y deberian de ser 3 resultados. El buscador me crea una tabla con 3 lineas (3 resultados) pero solo me escribe en la primera linea el primer resultado, las otras dos lineas me las deja en blanco. Es decir, reconoce que tiene 3 resultados pero solo me escribe el primero.
Si podeis hacer la prueba para ver lo que digo os lo agredeceria y si sabeis donde puede estar el error tb os lo agradeceria. En el scrpit original solo he modificado los datos de conexion a la base de datos (host, usuario, pass...) por lo tanto supongo que algo falla en el scritp original pero yo no logro adivinarlo.
Os copio el codigo.
index.php (lo primero que se ve y donde introduces la palabra a buscar)
Código PHP:
<?
// Si queremos realizar otra busqueda, borramos los datos de la busqueda anterior
if(isset($_GET['off']))
{
session_name('buscador');
session_start();
session_unset();
session_destroy();
}
?>
<html>
<head>
<title>Buscador de datos en una DB</title>
<style>
.boton {
background-color: <a class=\"numPost\" href=\"/foros/PHP/31180#000000\">#000000</a>;
border-width: 1;
color: #FFFFFF;
font-size: 10pt;
font-family: verdana;
font-weight: bold;
}
</style>
</head>
<body bgcolor="<a class=\"numPost\" href=\"/foros/PHP/31180#000000\">#000000</a>">
<div align="center"><b><font color="#FFFFFF" size="5" face="Arial"><u>Bienvenido
al Buscador de datos en una DB</u></font></b><br>
<br>
</div>
<table width="100%" height="50%" border="3" align="center" cellpadding="0" cellspacing="2" bordercolor="<a class=\"numPost\" href=\"/foros/PHP/31180#00\">#00</a>CC00">
<tr>
<td height="30"> <div align="center"><font color="#FFFFFF" size="3" face="Arial"><b><u>Ingrese
aquí los datos de su búsqueda:</u></b></font></div></td>
</tr>
<tr>
<td><div align="center">
<p align="center"><font color="#FFFFFF" size="2" face="Arial"><b>Ayudas
de busqueda:
</b></font></div>
<div align="center">
<font color="#FFFFFF" size="2" face="Arial"><b> +palabra (OBLIGATORIA)
| -palabra (EXCLUIR) | palab* (COMODIN) | "palabra y palabra"
(FRASE COMPLETA)</b></font></p> </div></td>
</tr>
<tr>
<td><form action="buscar.php" method="post" name="formulario1" id="formulario1">
<div align="center"><br>
<font color="#FFFFFF" size="3"><b>Palabra a buscar:</b></font>
<input name="palabra" type="text" id="palabra" size="24" maxlength="24" class="boton">
<br>
<br>
<input name="enviar" type="submit" id="enviar" value="Buscar" class="boton">
</div>
</form></td>
</tr>
</table>
</body>
</html>
Código PHP:
<?
// Recordar agregar el Indice FULLTEXT a la tabla de busqueda que no lo contengan
// Ejemplo:
// ALTER TABLE nombre_de_la_tabla ADD FULLTEXT(campo de busqueda)
// Asegurarse que los campos que contengan el indice FULLTEXT sean Varchar o TEXT
// Tambien tener en cuenta que la palabra de busqueda debe tener mas de 3 caracteres
// Configuracion del Script
$host = "localhost";
$user = "**";
$pass = "**";
$datb = "**";
$tabla = "**"; // Tabla donde se realiza la busqueda
$campos = "descripcion2"; // Campo donde se realiza la busqueda
$result_cant = "30"; // Cantidad de Resultados por pagina
// Incluimos nuestro Paginador
include('funciones.php');
$pag = $_SERVER['PHP_SELF'];
$palabra = $_POST['palabra'];
// Conectamos a la Base de Datos
if(!$conect = @mysql_connect($host,$user,$pass))
{
$error = mysql_error();
die ('<font size=2 face=Arial>No se ha podido conectar a la base de datos. <b>Error:</b> '.$error.'</font><br><br><a href="index.php">Volver</a>');
}
// Seleccionamos la Base de Datos
mysql_select_db($datb,$conect);
// Si no se ha introducido una palabra o esta contiene menos de 3 digitos
// Imprimimos el error
if ((empty($palabra) || !isset($palabra)) && !isset($_GET['pag']))
{
$error = true;
?>
<html>
<head>
<title>Buscador de datos en una DB</title>
<style>
a:link {
font-style: normal;
color: <a class=\"numPost\" href=\"/foros/PHP/31180#4646\">#4646</a>FF;
text-decoration: none;
}
a:visited {
font-style: normal;
color: <a class=\"numPost\" href=\"/foros/PHP/31180#9\">#9</a>D9D9D;
text-decoration: underline;
}
a:hover {
font-style: normal;
color: #FF0000;
text-decoration: underline overline;
}
</style>
</head>
<body bgcolor="<a class=\"numPost\" href=\"/foros/PHP/31180#000000\">#000000</a>">
<div align="center">
<table width="400" border="3" align="center" cellpadding="0" cellspacing="2" bordercolor="<a class=\"numPost\" href=\"/foros/PHP/31180#00\">#00</a>CC00">
<div align="center">
<table width="400" border="3" align="center" cellpadding="0" cellspacing="2" bordercolor="<a class=\"numPost\" href=\"/foros/PHP/31180#00\">#00</a>CC00">
<tr>
<td>
<div align="center">
<font color="#FFFFFF" size="3">
<b>ERROR: No se ha introducido una palabra de busqueda</b>
</font>
</div>
</td>
</tr>
</table>
<?
}
elseif(strlen($palabra)<=3 && !isset($_GET['pag']))
{
$error = true;
?>
<html>
<head>
<title>Buscador de datos en una DB</title>
<style>
a:link {
font-style: normal;
color: <a class=\"numPost\" href=\"/foros/PHP/31180#4646\">#4646</a>FF;
text-decoration: none;
}
a:visited {
font-style: normal;
color: <a class=\"numPost\" href=\"/foros/PHP/31180#9\">#9</a>D9D9D;
text-decoration: underline;
}
a:hover {
font-style: normal;
color: #FF0000;
text-decoration: underline overline;
}
</style>
</head>
<body bgcolor="<a class=\"numPost\" href=\"/foros/PHP/31180#000000\">#000000</a>">
<div align="center">
<table width="400" border="3" align="center" cellpadding="0" cellspacing="2" bordercolor="<a class=\"numPost\" href=\"/foros/PHP/31180#00\">#00</a>CC00">
<div align="center">
<table width="400" border="3" align="center" cellpadding="0" cellspacing="2" bordercolor="<a class=\"numPost\" href=\"/foros/PHP/31180#00\">#00</a>CC00">
<tr>
<td>
<div align="center">
<font color="#FFFFFF" size="3">
<b>ERROR: La palabra debe contener mas de 3 Digitos</b>
</font>
</div>
</td>
</tr>
</table>
<?
}
// Si no hay error, realizamos la busqueda, paginacion y muestra de resultados
if (!$error)
{
session_name('buscador');
session_start();
$palab = Seguridad($palabra);
// Si no entramos a una pagina del paginador, guardamos la palabra de busqueda en una variable de session
if (!isset($_GET['pag'])) $_SESSION['palabra'] = $palab;
$buscar = $_SESSION['palabra'];
// Buscamos en la Base de Datos y Paginamos
$page = new Paginador($campos, $tabla, "MATCH($campos) AGAINST('$buscar' IN BOOLEAN MODE)", "$pag?pag=", $result_cant, $conect);
// Mostramos los Resultados
echo '<html>
<head>
<title>Buscador de datos en una DB</title>
<style>
a:link {
font-style: normal;
color: <a class=\"numPost\" href=\"/foros/PHP/31180#4646\">#4646</a>FF;
text-decoration: none;
}
a:visited {
font-style: normal;
color: <a class=\"numPost\" href=\"/foros/PHP/31180#9\">#9</a>D9D9D;
text-decoration: underline;
}
a:hover {
font-style: normal;
color: #FF0000;
text-decoration: underline overline;
}
</style>
</head>
<body bgcolor="<a class=\"numPost\" href=\"/foros/PHP/31180#000000\">#000000</a>">
<div align="center">
<b><font color="#FFFFFF" size="5" face="Arial"><u>Buscador de datos en una DB</u></font></b><br><br>
<table width="100%" height="50%" border="3" align="center" cellpadding="0" cellspacing="2" bordercolor="<a class=\"numPost\" href=\"/foros/PHP/31180#00\">#00</a>CC00">
<tr>
<td><div align="center">
<p><font color="#FFFFFF" size="4">Los resultados para la busqueda de <b>'.strtoupper($palabra).'</b> son:</font></p>
</div></td>
</tr>
';
if ($page->vacio())
{
echo '<tr>
<td><div align="center"><font color="#FFFFFF" size="3"><b><p>
No se han encontrado coincidencias</p></b></font></div></td>
</tr>
</table>';
}
else
{
$i = 0;
foreach ($page->get_elementos() as $row)
{
echo "<tr>
<td><div align=center><font color=#FFFFFF size=3><b><p>$row[$i]</p></b></font></div></td>
</tr>";
$i++;
}
echo '<tr><td><div align="center"><font color=#FFFFFF size=3><b>Paginas: </b>'.$page->get_paginas().'</font></div></td></tr></table>';
}
}
// Cerramos la conexion con la Base de Datos
mysql_close($conect);
?>
<br><a href="index.php?off">Realizar Otra Busqueda</a>
</body>
</html>
Muchas gracias.