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 consulta que realizo en un array 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 en el caso del input al mostrarme los resultados de la búsqueda, me muestra correctamente la primera página, pero 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, que sería lo suyo y por tanto, en la segunda página me dice que no se han encontrado resultados.
Código HTML :
<form action="index.php" method="post"> <input type="text" name="TxtBuscar" value="Ingresar texto de búsqueda" /> </form> <div><a href=\"index.php?categoria=administrativo\">Administrativo</a></div> <div><a href=\"index.php?categoria=directorcomercial\">Director comercial</a></div> <div><a href=\"index.php?categoria=gerente\">Gerente</a></div> <div><a href=\"index.php?categoria=informatico\">Informático</a></div> <div><a href=\"index.php?categoria=mozoalmacén\">Mozo Almacén</a></div>
Código PHP :
<?php $datos = array ( array('administrativo','Maria','25'), array('directorcomercial','Antonio','45'), array('gerente','Susana','37'), array('administrativo','Luis','28'), array('mozoalmacén','Antonio','38'), array('informatico','Susana','37'), array('administrativo','Maria','25'), array('directorcomercial','Antonio','45'), array('gerente','Susana','37'), array('administrativo','Maria','25'), array('directorcomercial','Antonio','45'), array('gerente','Susana','37') ); ?> <?php include_once 'paginar.php'; if (isset($_GET['p'])) $p = $_GET['p']; else $p = 1; $t = ''; if (isset($_GET['t'])) $t = $_GET['t']; else if(isset($_POST['TxtBuscar'])) $t = $_POST['TxtBuscar']; else if(isset($_GET['categoria'])) $t = $_GET['categoria']; ?> <?php if (isset($t) && !empty($t)) { $coincidencias = array(); foreach($datos as $valor) { //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 if (!empty($_POST["TxtBuscar"])) { $cadena = $valor[1]; //busca por el nombre, la búsqueda la hace bien, pero al paginar NO muestra los resultados } else { $cadena = $valor[0]; //busca por la categoria, la búsqueda y la paginación la hace perfectamente } $encontrar_coincidencia = stripos($cadena, $t); if ($encontrar_coincidencia !== false) { $coincidencias[] = $valor; } } } else $coincidencias = $datos; ?> <?php //Aqui ponemos el número de elementos que queremos que aparezca por página, en este caso 3 paginar($coincidencias, 3, $p, $t); ?>
En este archivo genero todo el código referente a la muestra de resultados y la paginación
paginar.php
Código PHP :
<?php function paginar($datos, $l, $p, $t) { // DEFINIMOS LA CANTIDAD DE PÁGINAS $paginas = ceil(count($datos) / $l); // CONDICION DE INICIO $inicio = ($p-1)*$l; // CONDICION DE FINAL $final = $p*$l; // LISTAMOS LAS PÁGINAS echo '<div id="paginas">'; if ($p>1) echo "<a href=\"index.php?p=" . ($p-1) . "&t=".$t."\"> « Página Anterior</a> "; for($i=$pagInicio; $i<=$pagFin; $i++) { if ($i == $p) echo "<strong>$i</strong> "; else echo "<a href=\"index.php?p=$i&t=$t\">$i</a> "; } if ($p<$paginas) echo "<a href=\"index.php?p=" . ($p+1) . "&t=$t\">Página Siguiente » </a>"; echo '</div>'; return; } ?>