Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/07/2008, 11:32
wisygo
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 15 años, 9 meses
Puntos: 0
Exclamación Ayuda con buscador php y mysql. Os lo agradezco

Hola a todos!

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&iacute; los datos de su b&uacute;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) | &quot;palabra y palabra&quot;
        (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>
buscar.php (donde se muestra el resultado y supongo que estara el error)

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)<=&& !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>
Tambien esta el archivo funciones.php pero no me deja pegarlo porque el post se pasa de largo. Si es necesario lo copio en otro post.


Muchas gracias.