Foros del Web » Programando para Internet » PHP »

PHP OO Problema con paginación php y MySql

Estas en el tema de Problema con paginación php y MySql en el foro de PHP en Foros del Web. Saludos he estado tratando de hacer que los resultados de búsqueda se dividan en pagina y no logro hacerlo tengo este código y busca muy ...
  #1 (permalink)  
Antiguo 04/03/2014, 14:59
 
Fecha de Ingreso: diciembre-2008
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
Problema con paginación php y MySql

Saludos
he estado tratando de hacer que los resultados de búsqueda se dividan en pagina y no logro hacerlo
tengo este código y busca muy bien los resultados pero en ocasiones los resultados son tantos que la pagina no carga y me gustaría paginar los resultados

Código PHP:
Ver original
  1. <form name="buscar" action="<?php $_SERVER['PHP_SELF'] ?>" method="get">
  2.     Buscar: <input type="text" size="50" value="<?php echo $_GET['frase']; ?>" name="frase" />
  3.     <input type="submit" name="buscar" value="Buscar" />
  4. </form>
  5.  
  6. <?php
  7. // conectar al servidor
  8. $server_link = mysql_connect("localhost", "root", "");
  9. if(!$server_link){
  10.     die("Falló la Conexión ". mysql_error());
  11. }
  12. // seleccionamos la base de datos
  13. $db_selected = mysql_select_db("db", $server_link);
  14. if(!$db_selected){
  15.     die("No se pudo seleccionar la Base de Datos ". mysql_error());
  16. }
  17. // varificamos que el formulario halla sido enviado
  18. if(isset($_GET['buscar']) && $_GET['buscar'] == 'Buscar'){
  19.     $frase = addslashes($_GET['frase']);
  20.     // hacemos la consulta de busqueda
  21.     // ver explicación mas abajo
  22.     $sqlBuscar = mysql_query("SELECT libro, id_libro, capitulo, verso, texto,
  23.                            MATCH (libro, id_libro, capitulo, verso, texto)
  24.                            AGAINST ('$frase' IN BOOLEAN MODE) AS coincidencias
  25.                            FROM reina_valera_60, libros_biblia WHERE MATCH (libro, id_libro, capitulo, verso, texto)
  26.                            AGAINST ('$frase' IN BOOLEAN MODE)
  27.                            ORDER BY coincidencias DESC", $server_link)
  28.                             or die(mysql_error());
  29.     $totalRows = mysql_num_rows($sqlBuscar);
  30.     // Enviamos un mensaje
  31.     // indicando la cantidad de resultados ($totalRows)
  32.     // para la frase busada ($frase)
  33.     if(!empty($totalRows)){
  34.         echo stripslashes("<p>Su b&uacute;squeda arroj&oacute; <strong>$totalRows</strong> resultados para <strong>$frase</strong></p><hr>");
  35.         // mostramos los resultados
  36.         while($row = mysql_fetch_array($sqlBuscar)){
  37.          echo "<div class='resu'><div class='titu'>";
  38.             echo "<strong>$row[libro]: cap: $row[capitulo] : $row[verso]</strong> ";
  39.          echo " || <em class='coin'>Coincidencias: ". round($row['coincidencias']) ."</em></div>";
  40.             echo "<p>".substr(strip_tags($row['texto']), 0, 255)."...</p>";
  41.          echo "</div>";
  42.         }
  43.     }
  44.     // si se ha enviado vacio el formulario
  45.     // mostramos un mensaje del tipo Oops...!
  46.     elseif(empty($_GET['frase'])){
  47.         echo "Debe introducir una palabra o frase.";
  48.     }
  49.     // si no hay resultados //
  50.     elseif($totalRows == 0){
  51.         echo stripslashes("Su busqueda no arrojo resultados para <strong>$frase</strong>");
  52.     }
  53. }
  54. ?>

intente hacerlo de esta manera pero muestra 5 resultados y la paginación pero no mas resultados.
si presiono el numero 2 sale la pagina en blanco

Código PHP:
Ver original
  1. <form name="buscar" action="<?php $_SERVER['PHP_SELF'] ?>" method="get">
  2.     Buscar: <input type="text" size="50" value="<?php echo $_GET['frase']; ?>" name="frase" />
  3.     <input type="submit" name="buscar" value="Buscar" />
  4. </form>
  5.  
  6. <?php
  7. // conectar al servidor
  8. $server_link = mysql_connect("localhost", "root", "");
  9. if(!$server_link){
  10.     die("Falló la Conexión ". mysql_error());
  11. }
  12. // seleccionamos la base de datos
  13. $db_selected = mysql_select_db("db", $server_link);
  14. if(!$db_selected){
  15.     die("No se pudo seleccionar la Base de Datos ". mysql_error());
  16. }
  17. // varificamos que el formulario halla sido enviado
  18. if(isset($_GET['buscar']) && $_GET['buscar'] == 'Buscar'){
  19.     $frase = addslashes($_GET['frase']);
  20. // maximo por pagina
  21. $limit = 5;
  22.  
  23. // pagina pedida
  24. $pag = (int) $_GET["pag"];
  25. if ($pag < 1)
  26. {
  27.    $pag = 1;
  28. }
  29. $offset = ($pag-1) * $limit;
  30.  
  31.     // hacemos la consulta de busqueda
  32.     // ver explicación mas abajo
  33.     $sqlBuscar = mysql_query("SELECT SQL_CALC_FOUND_ROWS libro, id_libro, capitulo, verso, texto,
  34.                            MATCH (libro, id_libro, capitulo, verso, texto)
  35.                            AGAINST ('$frase' IN BOOLEAN MODE) AS coincidencias
  36.                            FROM reina_valera_60, libros_biblia WHERE MATCH (libro, id_libro, capitulo, verso, texto)
  37.                            AGAINST ('$frase' IN BOOLEAN MODE)
  38.                            ORDER BY coincidencias DESC LIMIT $offset, $limit", $server_link)
  39.                             or die(mysql_error());
  40.                      $sqlTotal = "SELECT FOUND_ROWS() as total";
  41.     $totalRows = mysql_num_rows($sqlBuscar);  
  42.    $rs = mysql_query($sql);
  43.    $rsTotal = mysql_query($sqlTotal);
  44.  
  45.    $rowTotal = mysql_fetch_assoc($rsTotal);
  46.    // Total de registros sin limit
  47.    $total = $rowTotal["total"];
  48.     // Enviamos un mensaje
  49.     // indicando la cantidad de resultados ($totalRows)
  50.     // para la frase busada ($frase)
  51.     if(!empty($totalRows)){
  52.         echo stripslashes("<p>Su b&uacute;squeda arroj&oacute; <strong>$totalRows</strong> resultados para <strong>$frase</strong></p><hr>");
  53.      
  54.         // mostramos los resultados
  55.         while($row = mysql_fetch_array($sqlBuscar)){
  56.          echo "<div class='resu'><div class='titu'>";
  57.             echo "<strong>$row[libro]: cap: $row[capitulo] : $row[verso]</strong> ";
  58.          echo " || <em class='coin'>Coincidencias: ". round($row['coincidencias']) ."</em></div>";
  59.             echo "<p>".substr(strip_tags($row['texto']), 0, 255)."...</p>";
  60.          echo "</div>";
  61.         }
  62.     }
  63.     // si se ha enviado vacio el formulario
  64.     // mostramos un mensaje del tipo Oops...!
  65.     elseif(empty($_GET['frase'])){
  66.         echo "Debe introducir una palabra o frase.";
  67.     }
  68.     // si no hay resultados //
  69.     elseif($totalRows == 0){
  70.         echo stripslashes("Su busqueda no arrojo resultados para <strong>$frase</strong>");
  71.     }
  72. }
  73. ?>
  74. <?php
  75.          $totalPag = ceil($total/$limit);
  76.          $links = array();
  77.          for( $i=1; $i<=$totalPag ; $i++)
  78.          {
  79.             $links[] = "<a href=\"?pag=$i\">$i</a>";
  80.          }
  81.          echo implode(" - ", $links);
  82.       ?>

agradezco que puedan ayudarme ya que no se mucho php
  #2 (permalink)  
Antiguo 05/03/2014, 11:19
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Problema con paginación php y MySql

1) SQL_CALC_FOUND_ROWS y FOUND_ROWS() consumen mucha memoria, es mas rapido usar dos select, una con la consulta y otra con un COUNT(*)

Código PHP:
Ver original
  1. $rs = mysql_query($sql);
No veo donde esta definida $sql

Seria util que hicieras un echo del sql que esas usando, asi sabrias cual es el problema
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: html, mysql, paginacion
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.