Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/04/2016, 02:09
pedromir
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Paginar los resultados de una búsqueda en un array

Hola a tod@s
Estoy aprendiendo a programar en php y mis conocimientos son todavía muy básicos, así que necesito un poco de ayuda, mi problema es el siguiente:

Necesito paginar los resultados de una búsqueda que realizo a través de un input, por el campo nombre $valor[1] y de unos enlaces por el campo categoría $valor[0] en el caso de la categoría me funciona perfectamente, pero al mostrarme los resultados de la búsqueda por el input, me muestra correctamente la primera página, porque al pinchar en página 2, me busca los siguientes resultados en el campo categoria, que corresponde a los enlaces y no en el campo nombre, y por tanto, me dice que no se han encontrado resultados.

index.php

Código HTML:
Ver original
  1. <form action="index.php" method="post">
  2.  
  3. <input type="text" name="TxtBuscar" value="Ingresar texto de búsqueda" />
  4.  
  5.  </form>
  6.  
  7.         <div><a href=\"index.php?categoria=administrativo\">Administrativo</a></div>
  8.         <div><a href=\"index.php?categoria=directorcomercial\">Director comercial</a></div>
  9.         <div><a href=\"index.php?categoria=gerente\">Gerente</a></div>
  10.         <div><a href=\"index.php?categoria=informatico\">Informático</a></div>
  11.         <div><a href=\"index.php?categoria=mozoalmacén\">Mozo Almacén</a></div>

Código PHP:
Ver original
  1. <?php
  2.  
  3. $datos = array
  4.                 (
  5.                 array('administrativo','Maria','25'),
  6.                 array('directorcomercial','Antonio','45'),
  7.                 array('gerente','Susana','37'),
  8.                 array('administrativo','Luis','28'),
  9.                 array('mozoalmacén','Antonio','38'),
  10.                 array('informatico','Susana','37'),
  11.                 array('administrativo','Maria','25'),
  12.                 array('directorcomercial','Antonio','45'),
  13.                 array('gerente','Susana','37'),
  14.                 array('administrativo','Maria','25'),
  15.                 array('directorcomercial','Antonio','45'),
  16.                 array('gerente','Susana','37')
  17.                 );
  18.  ?>
  19.  
  20.  <?php
  21.      
  22.      include_once 'paginar.php';         
  23.  
  24.      if (isset($_GET['p']))
  25.        $p = $_GET['p'];
  26.      else
  27.        $p = 1;
  28.  
  29.      $t = '';
  30.      if (isset($_GET['t']))
  31.        $t = $_GET['t'];
  32.      else if(isset($_POST['TxtBuscar']))
  33.        $t = $_POST['TxtBuscar'];
  34.      else if(isset($_GET['categoria']))  
  35.        $t = $_GET['categoria'];
  36.        
  37.  ?>
  38.  
  39.  
  40.  <?php
  41.        
  42.      if (isset($t) && !empty($t))
  43.      {        
  44.          
  45.          $coincidencias = array();
  46.                  
  47.                
  48.             foreach($datos as $valor) {
  49.  
  50.                 //Con este if me hace la búsqueda por un campo o por otro en función de que los datos provengan del input o de los enlaces
  51.  
  52.                 if (!empty($_POST["TxtBuscar"])) {        
  53.                     $cadena = $valor[1];  //busca por el nombre, la búsqueda la hace bien, pero al paginar NO muestra los resultados                                  
  54.                 } else {        
  55.                     $cadena = $valor[0];  //busca por la categoria, la búsqueda y la paginación la hace perfectamente
  56.                 }      
  57.                
  58.          
  59.          $encontrar_coincidencia = stripos($cadena, $t);
  60.              
  61.               if ($encontrar_coincidencia !== false) {                   
  62.                         $coincidencias[] = $valor;
  63.                                                                              
  64.              }           
  65.          }
  66.                  
  67.      }
  68.      
  69.      else  
  70.          
  71.          $coincidencias = $datos;
  72.                      
  73.  
  74.  ?>
  75.  
  76. <?php      
  77.  
  78. //Aqui ponemos el número de elementos que queremos que aparezca por página, en este caso 3
  79.    paginar($coincidencias, 3, $p, $t);
  80.  
  81. ?>
En este archivo genero todo el código referente a la muestra de resultados y la paginación
paginar.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.      function paginar($datos, $l, $p, $t) {
  4.              
  5.      // DEFINIMOS LA CANTIDAD DE PÁGINAS
  6.      $paginas = ceil(count($datos) / $l);
  7.      // CONDICION DE INICIO
  8.      $inicio = ($p-1)*$l;
  9.      // CONDICION DE FINAL
  10.      $final = $p*$l;
  11.  
  12. // LISTAMOS LAS PÁGINAS
  13.       echo '<div id="paginas">';
  14.       if ($p>1)        
  15.      echo "<a href=\"index.php?p=" . ($p-1) . "&t=".$t."\">&nbsp;« P&aacute;gina Anterior</a>&nbsp;";
  16.      
  17.       for($i=$pagInicio; $i<=$pagFin; $i++) {
  18.          if ($i == $p)
  19.             echo "<strong>$i</strong>&nbsp;";
  20.          else            
  21.         echo "<a href=\"index.php?p=$i&t=$t\">$i</a>&nbsp;";
  22.       }
  23.      
  24.       if ($p<$paginas)        
  25.      echo "<a href=\"index.php?p=" . ($p+1) . "&t=$t\">P&aacute;gina Siguiente »&nbsp</a>";
  26.       echo '</div>';
  27.  
  28. return;
  29.    }
  30.  
  31. ?>

Última edición por pedromir; 24/05/2016 a las 04:33