Comunidad de diseño web y desarrollo en internet online

Paginar resultados de buscador en PHP y MySQL

Citar            
MensajeEscrito el 26 Ene 2009 08:08 pm
Estoy programando un buscador con 3 opciones de búsqueda por (autor, titulo y materia) y otro campo de texto el cual se introduce el término a buscar, estoy funciona perfectamente, el problema está a la hora de paginar los resultados.
formulario.html

Código HTML :

<form name="form1" method="post" action="resultados.php">
<table width="331" border="0" align="center" class="KondorOK">
  <tr>
    <td width="93">B&uacute;squeda por: </td>
   
    <td width="64"><input name="tipobusqueda" type="radio" value="titulo">
      T&iacute;tulo</td>
    <td width="63"><input name="tipobusqueda" type="radio" value="autor">
      Autor</td>
    <td width="91"><input name="tipobusqueda" type="radio" value="materia">
      Materia</td>
  </tr>
</table>
<table width="308" border="0" align="center" class="KondorOK">
  <tr>
    <td width="300">
      <input name="terminobusqueda" type="text" size="60">
   </td>
  </tr>
</table>
<table width="139" border="0" align="center" class="KondorOK">
  <tr>
    <td width="133">
   <input name="submit" type="submit" class="KondorOK" value="B&uacute;squeda_Avanzada">
   </td>
  </tr>
</table>
</form>


resultados.php

Código PHP :

<?
  $tipobusqueda = $_POST['tipobusqueda'];
  $terminobusqueda = $_POST['terminobusqueda'];
  
  trim ($terminobusqueda);
  if (!$tipobusqueda || !$terminobusqueda)
  {
     echo "No has introducido los detalles de la busqueda.  Por favor vuelve e inténtalo de nuevo.";
     exit;
  }



  @ $db = mysql_pconnect("localhost", "root");

  if (!$db)
  {
     echo "Error: No se ha podido conectar a la base de datos.  Por favor, prueba de nuevo más tarde.";
     exit;
  }

  mysql_select_db("bd_cdip");
  $_pagi_sql = "select * from lib_db where ".$tipobusqueda." like '%".$terminobusqueda."%'";
  
  $_pagi_result = mysql_query($_pagi_sql);

  $num_resultados = mysql_num_rows($_pagi_result);
  
    echo "<p>Número de libros encontrados: ".$num_resultados."</p>";
   

$_pagi_cuantos = 5;



$_pagi_mostrar_errores = false;


$_pagi_conteo_alternativo = false;


$_pagi_propagar = array("id");


$_pagi_nav_estilo = "paginacion";


$_pagi_nav_anterior = "&lt;";


$_pagi_nav_siguiente = "&gt;";



include("paginator.inc.php");


  
  while($row = mysql_fetch_array($_pagi_result)){
    echo "</strong><br>Título: ";
   echo $row['titulo'];
   echo "</strong><br>Tipo: ";
   echo $row['tipo'];
   echo "</strong><br>Ubicación: ";
   echo $row['ubic'];
   echo "</strong><br>Autor: ";
   echo $row['autor'];
   echo "</strong><br>Descripción: ";
   echo $row['materia'];
   echo "</p>";
}

echo"<p>".$_pagi_navegacion."</p>";
echo"<p>Mostrando Registrados ".$_pagi_info."</p>";
?>


paginator.inc.php

Código PHP :

<?php

 if(empty($_pagi_sql)){
   
   die("<b>Error Paginator : </b>No se ha definido la variable \$_pagi_sql");
 }
 
 if(empty($_pagi_cuantos)){
   
   $_pagi_cuantos = 20;
 }
 
 if(!isset($_pagi_mostrar_errores)){
   
   $_pagi_mostrar_errores = true;
 }

 if(!isset($_pagi_conteo_alternativo)){
   
   $_pagi_conteo_alternativo = false;
 }
 
 if(!isset($_pagi_separador)){
   
   $_pagi_separador = " | ";
 }
 
  if(isset($_pagi_nav_estilo)){
   
   $_pagi_nav_estilo_mod = "class=\"$_pagi_nav_estilo\"";
 }else{
    
    $_pagi_nav_estilo_mod = "";
 }
 
 if(!isset($_pagi_nav_anterior)){
   
   $_pagi_nav_anterior = "&laquo; Anterior";
 } 
 
 if(!isset($_pagi_nav_siguiente)){
   
   $_pagi_nav_siguiente = "Siguiente &raquo;";
 } 

 if(!isset($_pagi_nav_primera)){
   
   $_pagi_nav_primera = "&laquo;&laquo; Primera";
 } 
 
 if(!isset($_pagi_nav_ultima)){
   
   $_pagi_nav_ultima = "&Uacute;ltima &raquo;&raquo;";
 } 
 

 if (empty($_GET['_pagi_pg'])){
   
   $_pagi_actual = 1;
 }else{
   
       $_pagi_actual = $_GET['_pagi_pg'];
 }

 if($_pagi_conteo_alternativo == false){
    $_pagi_sqlConta = eregi_replace("select[[:space:]](.*)[[:space:]]from", "SELECT COUNT(*) FROM", $_pagi_sql);
    $_pagi_result2 = mysql_query($_pagi_sqlConta);
   
    if($_pagi_result2 == false && $_pagi_mostrar_errores == true){
      die (" Error en la consulta de conteo de registros: $_pagi_sqlConta. Mysql dijo: <b>".mysql_error()."</b>");
    }
    $_pagi_totalReg = mysql_result($_pagi_result2,0,0);
 }else{
   $_pagi_result3 = mysql_query($_pagi_sql);
   
    if($_pagi_result3 == false && $_pagi_mostrar_errores == true){
      die (" Error en la consulta de conteo alternativo de registros: $_pagi_sql. Mysql dijo: <b>".mysql_error()."</b>");
    }
   $_pagi_totalReg = mysql_num_rows($_pagi_result3);
 }
 
 $_pagi_totalPags = ceil($_pagi_totalReg / $_pagi_cuantos);


 $_pagi_enlace = $_SERVER['PHP_SELF'];
 $_pagi_query_string = "?";
 
 if(!isset($_pagi_propagar)){
    
   if (isset($_GET['_pagi_pg'])) unset($_GET['_pagi_pg']); 
   $_pagi_propagar = array_keys($_GET);
 }elseif(!is_array($_pagi_propagar)){
   
   die("<b>Error Paginator : </b>La variable \$_pagi_propagar debe ser un array");
 }
 
 foreach($_pagi_propagar as $var){
    if(isset($GLOBALS[$var])){
      
      $_pagi_query_string.= $var."=".$GLOBALS[$var]."&";
   }elseif(isset($_REQUEST[$var])){
      
      $_pagi_query_string.= $var."=".$_REQUEST[$var]."&";
   }
 }

 
 $_pagi_enlace .= $_pagi_query_string;
 

 $_pagi_navegacion_temporal = array();
 if ($_pagi_actual != 1){
   
   $_pagi_url = 1; 
   $_pagi_navegacion_temporal[] = "<a ".$_pagi_nav_estilo_mod." href='".$_pagi_enlace."_pagi_pg=".$_pagi_url."'>$_pagi_nav_primera</a>";

   
   $_pagi_url = $_pagi_actual - 1; 
   $_pagi_navegacion_temporal[] = "<a ".$_pagi_nav_estilo_mod." href='".$_pagi_enlace."_pagi_pg=".$_pagi_url."'>$_pagi_nav_anterior</a>";
 }
 
 
 
 if(!isset($_pagi_nav_num_enlaces)){
   
   $_pagi_nav_desde = 1;
   $_pagi_nav_hasta = $_pagi_totalPags;
 }else{
   
   $_pagi_nav_intervalo = ceil($_pagi_nav_num_enlaces/2) - 1;
   
   
   $_pagi_nav_desde = $_pagi_actual - $_pagi_nav_intervalo;
   
   $_pagi_nav_hasta = $_pagi_actual + $_pagi_nav_intervalo;
   
   
   if($_pagi_nav_desde < 1){
      
      $_pagi_nav_hasta -= ($_pagi_nav_desde - 1);
      
      $_pagi_nav_desde = 1;
   }
   
   if($_pagi_nav_hasta > $_pagi_totalPags){
      
      $_pagi_nav_desde -= ($_pagi_nav_hasta - $_pagi_totalPags);
      
      $_pagi_nav_hasta = $_pagi_totalPags;
      
      if($_pagi_nav_desde < 1){
         $_pagi_nav_desde = 1;
      }
   }
 }

 for ($_pagi_i = $_pagi_nav_desde; $_pagi_i<=$_pagi_nav_hasta; $_pagi_i++){
   if ($_pagi_i == $_pagi_actual) {
      
      $_pagi_navegacion_temporal[] = "<span ".$_pagi_nav_estilo_mod.">$_pagi_i</span>";
   }else{
      
      $_pagi_navegacion_temporal[] = "<a ".$_pagi_nav_estilo_mod." href='".$_pagi_enlace."_pagi_pg=".$_pagi_i."'>".$_pagi_i."</a>";
   }
 }

 if ($_pagi_actual < $_pagi_totalPags){
   
   $_pagi_url = $_pagi_actual + 1; 
   $_pagi_navegacion_temporal[] = "<a ".$_pagi_nav_estilo_mod." href='".$_pagi_enlace."_pagi_pg=".$_pagi_url."'>$_pagi_nav_siguiente</a>";

   
   $_pagi_url = $_pagi_totalPags; 
   $_pagi_navegacion_temporal[] = "<a ".$_pagi_nav_estilo_mod." href='".$_pagi_enlace."_pagi_pg=".$_pagi_url."'>$_pagi_nav_ultima</a>";
 }
 $_pagi_navegacion = implode($_pagi_separador, $_pagi_navegacion_temporal);


 $_pagi_inicial = ($_pagi_actual-1) * $_pagi_cuantos;
 
 
 $_pagi_sqlLim = $_pagi_sql." LIMIT $_pagi_inicial,$_pagi_cuantos";
 $_pagi_result = mysql_query($_pagi_sqlLim);
 
 if($_pagi_result == false && $_pagi_mostrar_errores == true){
    die ("Error en la consulta limitada: $_pagi_sqlLim. Mysql dijo: <b>".mysql_error()."</b>");
 }


 $_pagi_desde = $_pagi_inicial + 1;
 
 
 $_pagi_hasta = $_pagi_inicial + $_pagi_cuantos;
 if($_pagi_hasta > $_pagi_totalReg){
    
    $_pagi_hasta = $_pagi_totalReg;
 }
 
 $_pagi_info = "desde el $_pagi_desde hasta el $_pagi_hasta de un total de $_pagi_totalReg";


?>

Por jorgemesa

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Ene 2009 02:50 am
si quieres que ta haga tu trabajo puedes depositar en mi cuenta, si quieres ayuda resume todo eso y date el trabajo de postear solo lo que si tiene que ver con el problema, ademas usa las etiquetas de bbcode (propias de clab) [ php] para el codigo PHP y [mysql] para el codigo sql

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 28 Ene 2009 05:23 pm
Enserio crees q alguien va a leer el codigo asi como lo escribiste??

Te recomiendo q al menos uses los bbcode [ php] y [/ php] (sin espacios) para colorear el codigo... va a quedar mucho mas entendible y alguien se va a animar a leerlo....

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 29 Ene 2009 03:27 pm
Esta confuso el codigo...

Pero lo que puedo aportar...
En La busqueda de la variable que rescatas mediante _$REQUEST O _$POST y lo introduces en la busqueda..
muy bien..
ahora necesitas delimitar la busqueda, eso se le llama crear un OFFSET, que quiere decir esto
que delimitas la busqueda, en vez de tirar todos los resultados de una sola vez, lo hace de modo delimitado

Ejemplo:

$datos=mysql_query("SELECT *from articulos limit ".$offset.",5"); // depende del sql del hosting si anda con o si n parentesis. limit selecciona desde los valores limites k les paso

Yo voy definiendo mi OFFSET mediante la paginacion lo necesite..
por defecto $offset es cero para que comience la busqueda desde el principio de la tabla de tu db

entonz por la linea que te escribi, mostrara solamente los primeros cinco resultados

ahroa debes construir con un while la cantidad de paginas, eso es otro calculo matematico pero te lo resumo en algunas lineas

$datos=mysql_query("SELECT count(cod) as total from articulos"); //la cuenta de filas se la dejo al sql para ahorrar memoria ram, ya que solo selecciono un campo y el manejo de volumen de datos lo hace el sql, ya que php esta diseñado para la inteligencia en los datos no pàra el manejo de grandes volumentes
$res=mysql_fetch_array($datos); // encapsulo en una matriz el recordset
$total=$res['total'];
//print_r($total);

$paginas=ceil($total/5); // calculo de paginas. ceill corta la parte decimal

ya tenes calculada las paginas que tienen un RIGHT MATCH en relacion a tu consulta

construyes con todo esto los numeros para que el usuario los vaya aprentando o lo tipico: <<Anterior Siguiente>>
y los hipervinculas segun sea el offset correcto mediante Query String, algo asi

echo "<a href='paginacion.php?offset=".($offset-5)."&pagina=".($pagina-1)."'><<Anterior/a>&nbsp;&nbsp;";

Resumiendo

-Defines tu Offset
-Haces la consulta
-Calculas las PAginas
-Constuyes el menu de navegacion

Creo que eso lo resume, cualquier cosa preguntas...

Por calebzion

51 de clabLevel



Genero:Masculino  

Diseñador Programador Principiante

msie7
Citar            
MensajeEscrito el 29 Ene 2009 07:08 pm
jorge, igual podria hacer el analisis de tu codigo pero creo que te va a servir mas que te sugiera otra forma de hacer consultas

porque no usas abstraccion para tus consultas... ?
* todas las operaciones comunes se generan solas
* no escribes 1 sola linea de sql asi que tu codigo es migrable de mysql -> postgress -> oracle, etc
* accesas a las tablas con metodos estaticos y a los registros como objetos

es mucho mas facil que extiendas las clases que te generan propel o doctrine y de ahi utilices la clase paginadora, tu paginacion tiene demasiadas cosas cuando ya existen metodos mas sencillos

http://propel.phpdb.org

Por ejemplo, esto es un paginador ya listo de un cliente del cual requiero regresar todas las transacciones

Código PHP :

   /**
    * retrive the sent money
    *
    * @param int $page
    * @param int $qty
    * @return PropelPager
    */
   public function getSentPager($page=1,$qty=1){
      
      $c = new Criteria();
      $c->addJoin(WalletPeer::ID,WalletTransferPeer::SENDER_WALLET_ID);
      $c->add(WalletPeer::CLIENT_ID,$this->getId());
      $c->add(WalletPeer::TYP3,1);
      $c->add(WalletTransferPeer::STATUS,1);
      
      
      $p = new PropelPager($c,'WalletTransferPeer','doSelect',$page,$qty);
      return $p;
      
   }


Este es el page de la documentacion del CRUD
http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/BasicCRUD



Yo no manejo doctrine, manejo propel porque es el que viene integrado con symfony que es el framework en el que desarrollo.

saludos

Por maltos

Claber

113 de clabLevel


1 articulo

 

Queretaro

firefox
Citar            
MensajeEscrito el 21 Feb 2009 10:09 pm
Hola Jorge, espero ya lo hayas resuelto, si no entonces checa este parametro que produce la validación.

Código PHP :

<?php
$tipobusqueda = $_POST['tipobusqueda'];
$terminobusqueda = $_POST['terminobusqueda'];

  trim ($terminobusqueda);
  if (!$tipobusqueda || $terminobusqueda)
  {
     echo "No has introducido los detalles de la busqueda.  Por favor vuelve e int&eacute;ntalo de nuevo.";
     exit;
  }

  $tipobusqueda = addslashes($tipobusqueda);
  $terminobusqueda = addslashes($terminobusqueda);


Solo falta decirle cual es la condicion que buscamos.

Código PHP :

if (!$tipobusqueda || $terminobusqueda)

Fijate que le falta esto =="", que le dice al php que si los campos están vacios entonces de error.

Por lo tanto esa líneaquedaria así

Código PHP :

if (!$tipobusqueda || $terminobusqueda=="")


Completo:

Código PHP :

<?php
$tipobusqueda = $_POST['tipobusqueda'];
$terminobusqueda = $_POST['terminobusqueda'];

  trim ($terminobusqueda);
  if (!$tipobusqueda || $terminobusqueda=="")
  {
     echo "No has introducido los detalles de la busqueda.  Por favor vuelve e int&eacute;ntalo de nuevo.";
     exit;
  }

  $tipobusqueda = addslashes($tipobusqueda);
  $terminobusqueda = addslashes($terminobusqueda);


Muchos exitos.

Por Masterweb

5 de clabLevel



 

msie8
Citar            
MensajeEscrito el 25 Ago 2010 03:18 pm
Dime si ya terminaste el buscador ese o es que tengo que ir a hacerlo completo??

Por alemanyardy

1 de clabLevel



Genero:Masculino  

Programador Sistemas Audiovisuales

msie8
Citar            
MensajeEscrito el 11 Ene 2012 10:49 pm

Por el_quick

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ene 2012 04:39 am
Mmm propel :),aunq admito que nunca pude hacer andar el generador de codigo, lo veo como buena opcion

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 02 Feb 2012 04:36 pm
Hola, acá hay un tutorial para implementar paginaciones con php usando kpaginate, está bastante entendible: como implementar una paginación con php

Por el_quick

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.