Foros del Web » Programando para Internet » PHP »

Paginacion

Estas en el tema de Paginacion en el foro de PHP en Foros del Web. Hola, tengo este buscador, pero no puedo paginar los resultados. Espero que alguien me pueda ayudar. <?php $str_seek = trim($str_seek) ; $str_seek = strtolower($str_seek) ; ...
  #1 (permalink)  
Antiguo 06/07/2005, 17:40
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 0
Paginacion

Hola, tengo este buscador, pero no puedo paginar los resultados. Espero que alguien me pueda ayudar.

<?php
$str_seek = trim($str_seek) ;
$str_seek = strtolower($str_seek) ;
$str_seek = ucwords($str_seek) ;
$conexion = mysql_connect("localhost","root","")
or die("No se pudo conectar a la base de datos") ;
mysql_select_db("proyecto");
if ($str_seek<>''){
$trozos=explode(" ",$str_seek);
$numero=count($trozos);
if ($numero==1) {
$cadbusca="select * from seek where dominio like '%$str_seek%' or
titulo like '%$str_seek%' or descripcion like '%$str_seek%' or
word1 like '%$str_seek%' or word2 like '%$str_seek%' or
word3 like '%$str_seek%' or word4 like '%$str_seek%' or
word5 like '%$str_seek%' or word6 like '%$str_seek%' LIMIT 25 ";
} elseif ($numero>1) {
$cadbusca="SELECT * , MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
AGAINST ('$str_seek') AS ranking FROM seek WHERE
MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
AGAINST ('$str_seek') ORDER BY ranking DESC LIMIT 50 " ;
}
$result = mysql_query($cadbusca,$conexion) ;
$tot_rows = mysql_num_rows($result) ;
}
?>
<?
while (list($titulo, $descripcion, $dominio, $word1) = mysql_fetch_row($result))
{
?>
<?php echo $titulo ?><br><?php echo $descripcion ?><br><a href="http://<?php echo $dominio ?>"><?php echo $descripcion ?></a><br><br>
<?
}
?>
<?
mysql_free_result($result)
?>




  #2 (permalink)  
Antiguo 06/07/2005, 19:20
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:
Con un script como Paginator sólo necesitarás pequeños cambios y tendrás la paginación:
Código PHP:
<?php
// Primero leemos str_seek de donde venga (POST o URL)
$str_seek $_REQUEST['str_seek'];

$str_seek trim($str_seek);
$str_seek strtolower($str_seek);
$str_seek ucwords($str_seek);

$conexion mysql_connect("localhost","root","") or die("No se pudo conectar a la base de datos");
mysql_select_db("proyecto");

if (
$str_seek != ''){
    
$trozos explode(" "$str_seek);
    
$numero count($trozos);
    if (
$numero == 1) {
        
$cadbusca "select * from seek where dominio like '%$str_seek%' or
        titulo like '%$str_seek%' or descripcion like '%$str_seek%' or
        word1 like '%$str_seek%' or word2 like '%$str_seek%' or
        word3 like '%$str_seek%' or word4 like '%$str_seek%' or
        word5 like '%$str_seek%' or word6 like '%$str_seek%' LIMIT 25 "
;
    } elseif (
$numero 1) {
        
$cadbusca "SELECT * , MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
        AGAINST ('$str_seek') AS ranking FROM seek WHERE
        MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
        AGAINST ('$str_seek') ORDER BY ranking DESC LIMIT 50 " 
;
    }
    
    
// Configuración de Paginator
    
$_pagi_sql $cadbusca// El sql que se va a paginar
    
$_pagi_propagar = array('str_seek'); // Las variable que se necesitan en todas las páginas
    
    // Ejecutar Paginación:
    
include("paginator.inc.php"); // esto agregará la cláusula "LIMIT" y ejecutará el mysql_query()
        
    
while (list($titulo$descripcion$dominio$word1) = mysql_fetch_row($_pagi_result)){ // Hay que utilizar la variable $_pagi_result
        
echo $titulo."<br>";
        echo 
$descripcion."<br>
        <br><a href=\"http://$dominio \">$descripcion</a><br><br>"
;
    }

    
mysql_free_result($result)
}
?>
Saludos
  #3 (permalink)  
Antiguo 06/07/2005, 19:28
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
Me olvidaba:
Paginator es un pequeño script (en español) que puedes descargar aquí:
http://jpinedo.webcindario.com/scripts/paginator

Además, faltó decirte que se muestran los registros de 20 en 20. Si quieres modificar ese número, puedes hacerlo mediante la variable $_pagi_cuantos.

Algunas veces Paginator tiene problemas con las consultas complejas (como podría ser la que utiliza MATCH - AGAINST). Si los tuvieras, también deberás setear la variable $_pagi_conteo_alternativo a true.

Te pongo un ejemplo:
Código PHP:
    // Configuración de Paginator
$_pagi_sql $cadbusca// El sql que se va a paginar.
$_pagi_cuantos 10// Para que se muestren los registros de 10 en 10.
$_pagi_propagar = array('str_seek'); // Las variable que se necesitan en todas las páginas.
$_pagi_conteo_alternativo true// Utiliza mysql_num_rows() para contar. (consultas complejas) 
Saludos
  #4 (permalink)  
Antiguo 07/07/2005, 10:24
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 0
Muchas gracias

Gracias, lo estoy probando pero no me funciono, seguramente cometi algun error en algo, voy a seguir probando.

  #5 (permalink)  
Antiguo 07/07/2005, 10:38
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 0
Gracias

Gracias por la ayuda, pero la verdad no me salio (no soy tan buena programando) no se si me equivoque de version del paginator o algo, ya probe varias cosas pero no me salio, espero me puedas dar algun consejo.

  #6 (permalink)  
Antiguo 07/07/2005, 13:19
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:
Como verás, si simplemente dices "no me salió" va a ser imposible ayudarte.
Te ruego que des todos los detalles que puedas. Por ejemplo: mensajes de error, qué es lo que debería pasar y qué es lo que en realidad está pasando. Sería mejor si posteas el código que utilizas así como el código del formulario de búsqueda.

Saludos
  #7 (permalink)  
Antiguo 08/07/2005, 14:06
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 0
Sonrisa Cierto

Tienes razon, no fui muy específica, esto seria así:

index.htm

<form action="proyecto.php" method="get" name="proyecto"><input name="str_seek" type="text" size="52"> &nbsp; <input name="buscar" type="submit" value="Buscar"></form>


proyecto.php


<?php
$str_seek = trim($str_seek) ;
$str_seek = strtolower($str_seek) ;
$str_seek = ucwords($str_seek) ;
$conexion = mysql_connect("localhost","root","")
or die("No se pudo conectar a la base de datos") ;
mysql_select_db("proyecto");
if ($str_seek<>''){
$trozos=explode(" ",$str_seek);
$numero=count($trozos);
if ($numero==1) {
$cadbusca="select * from seek where dominio like '%$str_seek%' or
titulo like '%$str_seek%' or descripcion like '%$str_seek%' or
word1 like '%$str_seek%' or word2 like '%$str_seek%' or
word3 like '%$str_seek%' or word4 like '%$str_seek%' or
word5 like '%$str_seek%' or word6 like '%$str_seek%' LIMIT 25 ";
} elseif ($numero>1) {
$cadbusca="SELECT * , MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
AGAINST ('$str_seek') AS ranking FROM seek WHERE
MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
AGAINST ('$str_seek') ORDER BY ranking DESC LIMIT 50 " ;
}
$result = mysql_query($cadbusca,$conexion) ;
$tot_rows = mysql_num_rows($result) ;
}
?>
<?
while (list($titulo, $descripcion, $dominio, $word1) = mysql_fetch_row($result))
{
?>
<?php echo $titulo ?><br><?php echo $descripcion ?><br><a class="a" href="http://<?php echo $dominio ?>"><?php echo $dominio ?></a><br><br>
<?
}
?>
<?
mysql_free_result($result)
?>


busca en base a la relevancia los resultados (en base a los factores que vienen ahí las palabras, dominio, descripcion y dominio), en si asi como esta ya funciona, el problema es que no lo puedo paginar, puse ya lo que me dijiste y de hecho tambien intente otras cosas, pero me salia un error en la ultima linea de codigo

Parse error: parse error in c:\inetpub\wwwroot\proyecto\proyecto.php on line ... (pongo puntitos porque cada vez que hacia la prueba me sacaba el error en la ultima linea)

Espero sea suficiente la verdad estoy un poco perdida

  #8 (permalink)  
Antiguo 08/07/2005, 14:12
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
Ok... el error de la última línea es que falta el punto y coma ";" desopués de mysql_free_result().

Pon ese ";" y vuelve a probar el código que te puse.

Saludos
  #9 (permalink)  
Antiguo 08/07/2005, 14:22
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 0
tampoco

Tampoco funciono
  #10 (permalink)  
Antiguo 08/07/2005, 14:27
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
Ok... acabo de ver que olvidé cambiar la variable $result por $_pagi_result en la última línea.
Además había olvidado también poner los enlaces de paginación:
Código PHP:
<?php
error_reporting
(E_ALL);

// Primero leemos str_seek de donde venga (POST o URL)
$str_seek $_REQUEST['str_seek'];

$str_seek trim($str_seek);
$str_seek strtolower($str_seek);
$str_seek ucwords($str_seek);

$conexion mysql_connect("localhost","root","") or die("No se pudo conectar a la base de datos");
mysql_select_db("proyecto");

if (
$str_seek != ''){
    
$trozos explode(" "$str_seek);
    
$numero count($trozos);
    if (
$numero == 1) {
        
$cadbusca "select * from seek where dominio like '%$str_seek%' or
        titulo like '%$str_seek%' or descripcion like '%$str_seek%' or
        word1 like '%$str_seek%' or word2 like '%$str_seek%' or
        word3 like '%$str_seek%' or word4 like '%$str_seek%' or
        word5 like '%$str_seek%' or word6 like '%$str_seek%' LIMIT 25 "
;
    } elseif (
$numero 1) {
        
$cadbusca "SELECT * , MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
        AGAINST ('$str_seek') AS ranking FROM seek WHERE
        MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
        AGAINST ('$str_seek') ORDER BY ranking DESC LIMIT 50 " 
;
    }
    
    
// Configuración de Paginator
    
$_pagi_sql $cadbusca// El sql que se va a paginar.
    
$_pagi_cuantos 10// Para que se muestren los registros de 10 en 10.
    
$_pagi_propagar = array('str_seek'); // Las variable que se necesitan en todas las páginas.
    
$_pagi_conteo_alternativo true// Utiliza mysql_num_rows() para contar. (consultas complejas)
    
    // Ejecutar Paginación:
    
include("paginator.inc.php"); // esto agregará la cláusula "LIMIT" y ejecutará el mysql_query()
        
    
while (list($titulo$descripcion$dominio$word1) = mysql_fetch_row($_pagi_result)){ // Hay que utilizar la variable $_pagi_result
        
echo $titulo."<br>";
        echo 
$descripcion."<br>
        <br><a href=\"http://$dominio \">$descripcion</a><br><br>"
;
    }
    
    
mysql_free_result($_pagi_result);
    
    echo 
"<p>".$_pagi_navegacion."</p>";
}
?>
Si te da error, por favor pon el texto completo del mensaje.

Saludos
  #11 (permalink)  
Antiguo 08/07/2005, 14:32
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 0
me puso esto:

Error en la consulta limitada: select * from seek where dominio like '%Dulce%' or titulo like '%Dulce%' or descripcion like '%Dulce%' or word1 like '%Dulce%' or word2 like '%Dulce%' or word3 like '%Dulce%' or word4 like '%Dulce%' or word5 like '%Dulce%' or word6 like '%Dulce%' LIMIT 25 LIMIT 0,10. Mysql dijo: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0,10' at line 5
  #12 (permalink)  
Antiguo 08/07/2005, 14:38
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
Perfecto!
Ahora sólo tienes que quitarle el "LIMIT" a tus consultas.
Código PHP:
    if ($numero == 1) {
        
$cadbusca "select * from seek where dominio like '%$str_seek%' or
        titulo like '%$str_seek%' or descripcion like '%$str_seek%' or
        word1 like '%$str_seek%' or word2 like '%$str_seek%' or
        word3 like '%$str_seek%' or word4 like '%$str_seek%' or
        word5 like '%$str_seek%' or word6 like '%$str_seek%'"
;
    } elseif (
$numero 1) {
        
$cadbusca "SELECT * , MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
        AGAINST ('$str_seek') AS ranking FROM seek WHERE
        MATCH (dominio,titulo,descripcion, word1,word2,word3,word4,word5,word6)
        AGAINST ('$str_seek') ORDER BY ranking DESC" 
;
    } 
Paginator las agregará automáticamente.

Saludos
  #13 (permalink)  
Antiguo 08/07/2005, 15:05
 
Fecha de Ingreso: mayo-2005
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 0
Gracias

Muchisimas GRACIAS !

Funciono de maravilla

Saludos
  #14 (permalink)  
Antiguo 17/08/2005, 02:10
Avatar de PeiShar  
Fecha de Ingreso: abril-2001
Ubicación: España
Mensajes: 125
Antigüedad: 16 años, 7 meses
Puntos: 0
Buenas, a mi me funciona el paginator a medias, quiero decir, me coloca el número de páginas, pero siempre que hago clic en alguna de ellas, siempre me salen los 11 resultados, sin embargo lo tengo paginado de 5 en 5.

Saludos
  #15 (permalink)  
Antiguo 17/08/2005, 17:55
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 PeiShar:
Sería bueno que coloques tu código para ver dónde puede estar el error.
Recuerda que la variable $_pagi_sql debe ser una cadena simple con la sentencia SQL y NO debe contener la llamada a la función mysql_query().

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 11:38.