Foros del Web » Programando para Internet » PHP »

Ayuda con buscador

Estas en el tema de Ayuda con buscador en el foro de PHP en Foros del Web. Hola a todos, Hace tiempo pedí ayuda para combinar la función like con la match en un buscador en php sobre una base de datos ...
  #1 (permalink)  
Antiguo 06/04/2005, 12:28
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
Ayuda con buscador

Hola a todos,

Hace tiempo pedí ayuda para combinar la función like con la match en un buscador en php sobre una base de datos mysql.

el código:

Código PHP:
<?php require_once('Connections/mallorcaempresa.php'); ?>
<?php
$colname2_Recordset1 
"1";
if (isset(
$_GET['select'])) {
  
$colname2_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['select'] : 
addslashes($_GET['select']);
}
$colname_Recordset1 "1";
if (isset(
$_GET['busca'])) {
  
$colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['busca'] : 
addslashes($_GET['busca']);
}


$palabrasexplode (" "$_GET['busca']); 

if(
count($palabras)>1) { 
$query.=mysql_select_db($database_mallorcaempresa$mallorcaempresa);
$query_Recordset1 sprintf("SELECT * , MATCH (nomempresa,frase) 
AGAINST ('%%%s%%') AS puntuacion FROM empreses WHERE MATCH 
(nomempresa,frase) AGAINST ('%%%s%%') ORDER BY puntuacion DESC 
LIMIT 50"
$colname_Recordset1,$colname_Recordset1);
$Recordset1 mysql_query($query_Recordset1$mallorcaempresa) or die
(
mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);
} else { 
$query.=mysql_select_db($database_mallorcaempresa$mallorcaempresa);
$query_Recordset1 sprintf("SELECT * FROM empreses WHERE (nomempresa 
like '%%%s%%' or frase like '%%%s%%' )and idpoble like '%s'"

$colname_Recordset1,$colname_Recordset1,$colname2_Recordset1);
$Recordset1 mysql_query($query_Recordset1$mallorcaempresa) or die
(
mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);

 
echo 
$query

?>
El buscador funciona correctamente, pero tiene que haber algo que está mal, ya que en la hoja de respuesta me aparece un "1" en una esquina.

También quisiera que me paginase los resultados (20 por página) y no encuentro la manera de hacerlo.

Muchas gracias por su ayuda,
Un saludo
  #2 (permalink)  
Antiguo 06/04/2005, 13:32
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
jpinedo, usuario de este foro tiene la siguiente pagina http://jpinedo.webcindario.com/
donde puedes encontrar un script llamado paginator, nunca lo he usado pero debe ser bueno para lo que necesitas de mostrar los resultados de 20 en 20 (eso se llama paginación).

Con respecto al 1 que aparece en la esquina, el código que incluyes no parece ser el responsable, buca en otra parte. saludos
  #3 (permalink)  
Antiguo 06/04/2005, 13:56
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
No creo que me sirva

Gracias,
Pero me interesa hacer la paginación desde el própio código fuente que adjunto arriba.

Si a alguien se le ocurre como hacerlo me hará un gran favor
  #4 (permalink)  
Antiguo 06/04/2005, 16:19
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
La paginacion es una simple cuenta matematica, y la ayuda de nuestro amigo "limit". No necesitas nada mas, pero vale que leas esto por ejemplo y lo hagas vos, asi aprendes tambien:

http://www.desarrolloweb.com/articul...5.php?manual=6
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 06/04/2005, 19:57
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
Ayuda!!

He probado con eso y no consigo que funcione.

Sugeridme algo, por favor
  #6 (permalink)  
Antiguo 06/04/2005, 20:34
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
Como que no? es un listado con paginación...aparte, por que decis que no te funciona? que error te dá?
Sino usa el paginador http://jpinedo.webcindario.com/, que es muy usado por estos foros, y a todos les funciona.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #7 (permalink)  
Antiguo 06/04/2005, 23:34
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
sintesk, me da la impresion que quieres que alguien te escriba el codigo y te lo de, eso muy pocas veces pasa, ponte a leer y pregunta dudas especificas.

saludos
  #8 (permalink)  
Antiguo 07/04/2005, 06:12
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
sobre buscador

No pretendo que nadie me haga el trabajo, de hecho lo único que me queda es paginar los resultados, lo he probado de varias maneras, incluida la paginación automática en el dreamweaver, lo que pasa es que si pagino los resultados, la función match me da un error (algo así como error en la fila 1, LIMIT 10,0).

El problema es que al poner más de una palabra en el buscador se "condiciona" la búsqueda y debe iniciarse la función "match" en lugar de la like, y aquí es cuando me da el error.

No es que no lo quiera hacer, pero es que no me funciona de ninguna manera, estoy convencido de que es una tontería, pero no la veo.

Disculpen mi ignorancia.
  #9 (permalink)  
Antiguo 07/04/2005, 14:07
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
hola:
Lo primero que tienes que hacer es probar la consulta sin hacer la paginación. Si funciona con una o varias palabras, entonces sabrás que no hay error ahí.
Por si te interesa, puedes probar Paginator y decir cual es el resultado que obtienes.

Aquí te pongo un ejemplo:
Código PHP:
//Primero, sacar el select_db() del if  porque en los dos se hace lo mismo.
$query.=mysql_select_db($database_mallorcaempresa,   $mallorcaempresa);// por qué ".="?? no sé, así estaba.
$query_Recordset1 '';
if(
count($palabras)>1){
    
$query_Recordset1 sprintf("SELECT * , MATCH (nomempresa,frase)
    AGAINST ('%%%s%%') AS puntuacion FROM empreses 
    WHERE MATCH(nomempresa,frase) AGAINST('%%%s%%') 
    ORDER BY puntuacion DESC"
    
$colname_Recordset1,$colname_Recordset1);
}else{
    
$query_Recordset1 sprintf("SELECT * FROM empreses 
    WHERE (nomempresa like '%%%s%%' or frase like '%%%s%%')
    AND idpoble like '%s'"
    
$colname_Recordset1,$colname_Recordset1,$colname2_Recordset1); 
}

// Aquí arrancamos con la Paginación:
$_pagi_sql $query_Recordset1;
// Supongo que habrá que propagar un par de variables:
$_pagi_propagar = array('colname_Recordset1''colname2_Recordset1');
// Si es necesario otras variables que puedes ver en la doc de Paginator.
//...

// Ahora incluyes el script (que ya realiza la consulta).
include("paginator.inc.php");

//Y puedes mostrar los resultados:
while($row_Recordset1 mysql_fetch_assoc($Recordset1)){
    
// Muestras los datos como quieras, por ejemplo:
    
echo "<pre>";
    
var_dump($row_Recordset1);
    echo 
"</pre><hr />";
}

// Y muestras la barra de navegación entre páginas:
echo $_pagi_navegacion
Si obtienes algún error, por favor detállalo.
Saludos

Última edición por jpinedo; 07/04/2005 a las 14:14
  #10 (permalink)  
Antiguo 08/04/2005, 04:17
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
No me funciona

Agadezco vuestra ayuda, pero no logro que funcione.

Adjunto el código entero por si alguien lo ve:

Código PHP:
<?php require_once('Connections/mallorcaempresa.php'); ?>
<?php
$colname2_Recordset1 
"1";
if (isset(
$_GET['select'])) {
  
$colname2_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['select'] : addslashes($_GET['select']);
}
$colname_Recordset1 "1";
if (isset(
$_GET['busca'])) {
  
$colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['busca'] : addslashes($_GET['busca']);
}

$query=mysql_select_db($database_mallorcaempresa$mallorcaempresa);

$palabrasexplode (" "$_GET['busca']); 

if(
count($palabras)>1) { 
$query_Recordset1 sprintf
("SELECT * , MATCH (nomempresa,frase) AGAINST ('%%%s%%') AS puntuacion 
FROM empreses WHERE MATCH (nomempresa,frase) AGAINST ('%%%s%%') ORDER BY puntuacion 
DESC LIMIT 50"

$colname_Recordset1,$colname_Recordset1);
$Recordset1 mysql_query($query_Recordset1$mallorcaempresa) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);


} if(
count($palabras)<2) { 
$query_Recordset1 sprintf
("SELECT * FROM empreses WHERE (nomempresa like '%%%s%%' or frase like '%%%s%%' )
and idpoble like '%s'"

$colname_Recordset1,$colname_Recordset1,$colname2_Recordset1);
$Recordset1 mysql_query($query_Recordset1$mallorcaempresa) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);

 
echo 
$query

?>

Código HTML:
<html>
<head>
<title>mallorca</title>

<link href="estilos/estilos.css" rel="stylesheet" type="text/css">
<style type="text/css">

</head>

<body bgcolor="#325579" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" style="color: #666666">
<br>
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr> 
    <td valign="bottom" class="blanco"> <p align="center">
    <img border="0" src="images/cabecera.jpg" width="695" height="50"></p>
    </td>
  </tr>
</table>
<br>
<div align="center">
  <center>
<table width="700" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
  <tr> 
    <td align="left"> 
      <table width="700" border="0" align="center" cellpadding="0" cellspacing="20" bgcolor="#FFFFFF" height="1">
        <tr> 
          <td valign="top" class="tabla-datos" height="1">
            <table width="660" border="0" cellspacing="0" cellpadding="0" height="79"  style="border-collapse: collapse" bordercolor="#111111">
              <tr valign="top"> 
                <td width="400" align="center" height="79"> 
                  <table width="500" border="0" cellspacing="0" cellpadding="0" height="73" style="border-collapse: collapse" bordercolor="#111111">
      <tr> 
        <td height="20" colspan="3" bgcolor="#FEE05E"><span class="blanco  Estilo7"><span class="blanco  Estilo13"><span class="blanco  Estilo11"><img src="images/pixel.gif" width="10" height="10"><span class="Estilo21"><?php echo $row_Recordset1['nomempresa']; ?></span></span></span></span></td>
        </tr>
      <tr> 
        <td height="1" colspan="3" background="images/pnts_h.gif">
        <img src="images/pixel.gif" width="1" height="1"></td>
      </tr>
      <tr> 
        <td height="20"><p>&nbsp;</p></td>
        <td height="20" colspan="2" class="Estilo22"><?php echo $row_Recordset1['frase']; ?></td>
      </tr>
      <tr> 
        <td height="1" colspan="3" background="images/pnts_h.gif">
        <img src="images/pixel.gif" width="1" height="1"></td>
      </tr>
      <tr> 
        <td width="6" height="20"><p align="left">&nbsp; </p></td>
        <td width="400"><?php echo $row_Recordset1['direccio']; ?></td>
        <td width="127">Tel: <?php echo $row_Recordset1['telefon']; ?></td>
      </tr>
      <tr> 
        <td height="1" colspan="3" background="images/pnts_h.gif">
        <img src="images/pixel.gif" width="1" height="1"></td>
      </tr>
      <tr> 
        <td height="18"><p>&nbsp; </p></td>
        <td height="18" colspan="2"><?php echo $row_Recordset1['email']; ?><?php echo $row_Recordset1['link']; ?></td>
      </tr>
      </table>
                      
                </td>
                <td width="1" align="center" background="images/pnts_v.gif" height="79">
                <img src="images/pixel.gif" width="1" height="1"></td>
                <td width="493" height="79" align="center" valign="middle" bgcolor="#DDF1F1"><div align="center"><img src="fotos/<?php echo $row_Recordset1['foto']; ?>"> 
                </div></td>
              </tr>
            </table></td>
        </tr>
      </table></td>
    <td bgcolor="#434633"><img src="images/pixel.gif" width="2" height="1"></td>
  </tr>
</table>
  </center>
</div>
<table width="702" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td align="left" bgcolor="#434633">
    <img src="images/pixel.gif" width="1" height="2"></td>
  </tr>
</table>
<br>
<div align="center"><br>
</div>
<p>&nbsp;</p></body>
</html> 



Código PHP:
<?php
mysql_free_result
($Recordset1);
?>
  #11 (permalink)  
Antiguo 11/04/2005, 20:01
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Hola:
No sé si probaste lo que te puse... parece que no.
No entiendo por qué haces "echo $query", si la variable $query sólo contiene el estado de la selección de la base de datos "true" o "false" (uno o cero en tu caso, por eso se imprime un uno).
Cuando dices que "el buscador funciona correctamente" ¿a qué te refieres exactamente?.
Lo que recomiendo hacer es aprender a utilizar las funciones de acceso a la base de datos. O sea, cómo leer registros y sobretodo, cómo mostrarlos.
Para poder pensar en Paginar primero tienes que tener un script que funcione correctamente sin paginación.

Saludos
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 05:18.