Foros del Web » Programando para Internet » PHP »

Ayuda con buscador php y mysql. Os lo agradezco

Estas en el tema de Ayuda con buscador php y mysql. Os lo agradezco en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/07/2008, 11:32
 
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.
  #2 (permalink)  
Antiguo 22/07/2008, 11:34
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda con buscador php y mysql. Os lo agradezco

El codigo de funciones.php que no me entraba es:

Código PHP:
<?php
// Agradecimientos a Arias por el GRAN paginador que pueden bajar
// De esta web: http://www.php-hispano.net
class Paginador {

  var 
$campos;
  var 
$tabla;
  var 
$where;
  var 
$enlace;
  var 
$epp;
  var 
$mysql;
  var 
$actual;
  var 
$elementos;

  function 
paginador ($campos$tabla$where$enlace$epp$mysql) {
    
$this->campos $campos// Campos a seleccionar de la tabla
    
$this->tabla $tabla// Tabla o tablas con las que vamos a trabajar
    
$this->where $where// Where de la consulta
    
$this->enlace $enlace// URL utilizada para generar los enlaces, se a?ra simplemente el numero al final de este
    
$this->epp max(1, (int)$epp); // Numero de Elementos Por Pagina
    
$this->mysql $mysql// Resource de conexion a MySQL
    
$this->actual min($this->max_paginas(), max(1, isset($_GET['pag']) ? $_GET['pag'] : 1)); // Pagina actual
  
}

  function 
get_elementos($type MYSQL_NUM) {
    
$inicio = ($this->actual 1) * $this->epp;
    
$result mysql_query('SELECT '.$this->campos.' FROM `'.$this->tabla.'` WHERE '.$this->where.' LIMIT '.$inicio.', '.$this->epp$this->mysql) or die (mysql_error());
    
$array = array();
    while (
$row mysql_fetch_array($result$type)) $array[] = $row;
    return 
$array;
  }

  function 
get_paginas($rango 0) {
    
$rango max (0min(10, (int)$rango));
    if (
$rango) { $inicio = ($this->actual $rango 1) ? $this->actual $rango$fin = ($this->actual $rango > ($max $this->max_paginas())) ? $max $this->actual $rango; }
    else { 
$inicio 1$fin = ($max $this->max_paginas()); }
    
$return = ($this->actual != 1)? '<a href="'.$this->enlace.($this->actual-1).'">Anterior</a> ' 'Anterior ';
    if (
$inicio 1$return .= '... ';
    for (
$i=$inicio$i<=$fin$i++) {
      
$return .= ($i != $this->actual)? '<a href="'.$this->enlace.$i.'">'.$i.'</a> '$i.' ';
    }
    if (
$fin $max$return .= ' ...';
    return 
$return . ($this->actual != $this->max_paginas() && !$this->vacio() ? ' <a href="'.$this->enlace.($this->actual+1).'">Siguiente</a>' ' Siguiente');
  }

  function 
num_elementos() {
    if (empty(
$this->elementos)) {
     
$this->elementos mysql_query('SELECT COUNT(*) FROM `'.$this->tabla.'` WHERE '.$this->where$this->mysql) or die (mysql_error());
     
$this->elementos mysql_num_rows($this->elementos) ? mysql_result($this->elementos0) : 0;
    }
    return 
$this->elementos;
  }

  function 
max_paginas() {
    return (
$max ceil($this->num_elementos() / $this->epp))? $max 1;
  }

  function 
vacio() {
    return 
$this->num_elementos() == 0;
  }
}

// Funcion de Seguridad usada para proteger la Base de Datos de posibles ataques
function Seguridad($variable)
{
$variable addslashes(trim($variable));

$var htmlentities($variable);

return 
$var;
}
?>
Gracias.
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:25.