Saludos.
Hace unos cuantos días que trato de que funcione pero nada, ha sido imposible.
Desde hace tiempo buscaba algo como esto, lo encontré en este sitio a partir de un código que publicó conte sobre una función para paginar los resultados de una consulta en sql server 2000.
Bueno sin más rodeo aquí les pongo el código:
Código PHP:
<?php
/* **************************************************
****/
/* Funcion paginar
* actual: Pagina actual
* total: Total de registros
* por_pagina: Registros por pagina
* enlace: Texto del enlace
* maxpags: El máximo de páginas a presentar simultáneamente (opcional)
* Devuelve un texto que representa la paginacion
*/
function paginar($actual, $total, $por_pagina, $enlace, $maxpags=0) {
$total_paginas = ceil($total/$por_pagina);
$anterior = $actual - 1;
$posterior = $actual + 1;
$minimo = $maxpags ? max(1, $actual-ceil($maxpags/2)): 1;
$maximo = $maxpags ? min($total_paginas, $actual+floor($maxpags/2)): $total_paginas;
if ($actual>1)
$texto = "<a href=\"$enlace$anterior\">«</a> ";
else
$texto = "<b>«</b> ";
if ($minimo!=1) $texto.= "... ";
for ($i=$minimo; $i<$actual; $i++)
$texto .= "<a href=\"$enlace$i\">$i</a> ";
$texto .= "<b>$actual</b> ";
for ($i=$actual+1; $i<=$maximo; $i++)
$texto .= "<a href=\"$enlace$i\">$i</a> ";
if ($maximo!=$total_paginas) $texto.= "... ";
if ($actual<$total_paginas)
$texto .= "<a href=\"$enlace$posterior\">»</a>";
else
$texto .= "<b>»</b>";
return $texto;
}
?>
<?php
include("conexion/conexion.php");
mssql_query("SET ANSI_NULLS ON");
mssql_query("SET ANSI_WARNINGS ON");
$pag = $HTTP_GET_VARS["pag"];
$municipio = $HTTP_GET_VARS["municipio"];
$programa = $HTTP_GET_VARS["programa"];
$color='#FFFFCC';
echo "<div align='center'><img src='imagenes/repasignacion.png' width='554' height='102'></div>";
echo "El municipio seleccionado es: ".$municipio."<br>";
echo "El programa seleccionado es: " .$programa."<br>";
if(isset($HTTP_GET_VARS['municipio']) && $HTTP_GET_VARS['programa'] && $HTTP_GET_VARS['pag']){
// asignamos los valores
// a las variables que usaremos
$municipio = $HTTP_GET_VARS['municipio'];
$programa = $HTTP_GET_VARS['programa'];
$pag = $HTTP_GET_VARS['pag'];
$clausula = "WHERE(dbo.Municipios.DMUNI = '$municipio') AND (dbo.Programa.DPROGRAMA = '$programa')";
}else{
// de lo contrario
// el titulo sera general
$titulo = "Todos los registros";
}
if (!isset($pag)) $pag = 1;
if (empty($HTTP_GET_VARS['pag'])){
// Si no se ha hecho click a ninguna página específica
// O sea si es la primera vez que se ejecuta el script
// $pag es la pagina actual-->será por defecto la primera.
$pag = 1;
}else{
// Si se "pidió" una página específica:
// La página actual será la que se pidió.
$pag = $HTTP_GET_VARS['pag'];
}
$tampag = 10;
$reg1 = ($pag-1) * $tampag;
$result = mssql_query("SELECT Empresas.DEMPRESA, Sector.DSECTOR, Programa.DPROGRAMA, Municipios.DMUNI, Filas444.[Desc] AS Indicador, Mod444.[PLAN MES] AS PlanMes, Mod444.[REAL MES] AS RealMes, Mod444.PORC, Mod444.[PLAN ACUM] AS PlanAcum, Mod444.[REAL ACUM] AS RealAcum, Mod444.[PORC AC] AS PorcAc, Mod444.[REAL AÑO ANT] AS RealAA, Mod444.[PLAN AÑO ACT] AS PlanAA, Mod444.REL FROM Sector RIGHT OUTER JOIN Mod444 ON Sector.Sector = Mod444.Sector LEFT OUTER JOIN Filas444 ON Mod444.FILA = Filas444.Filas LEFT OUTER JOIN Programa ON Mod444.Programa = Programa.PROGRAMA LEFT OUTER JOIN Municipios ON Mod444.MUNI = Municipios.MUNI LEFT OUTER JOIN Empresas ON Mod444.EMPRESA = Empresas.EMPRESA WHERE (dbo.Municipios.DMUNI = '$municipio') AND (dbo.Programa.DPROGRAMA = '$programa') ORDER BY Mod444.EMPRESA, Mod444.SECTOR, Mod444.PROGRAMA, Mod444.MUNI, Mod444.FILA");
$total = mssql_num_rows($result)."<br>";
echo "El número de registros es: ".$total;
if (mssql_num_rows($result)){
echo "Fecha Reporte :".date("m/d/y");
echo "<br>";
echo "<table> \n";
echo "<tr>
<th>Indicador</th>
<th>Plan del Mes</th>
<th>Real del Mes</th>
<th>Cumplimiento</th>
<th>Plan Acumulado</th>
<th>Real Acumulado</th>
<th>Porciento</th>
<th>Real Año Anterior</th>
<th>Plan Año Actual</th>
<th>Relación</th></tr>\n";
for ($i=$reg1; $i<min($reg1+$tampag, $total); $i++) {
mssql_data_seek($result, $i);
$row = mssql_fetch_array($result);
echo "<tr><td>".$row["Indicador"]."</td>".
"<td>".$row["PlanMes"]."</td>".
"<td>".$row["RealMes"]."</td>".
"<td>".$row["PORC"]."</td>".
"<td>".$row["PlanAcum"]."</td>".
"<td>".$row["RealAcum"].
"<td>".$row["PorcAc"]."</td>".
"<td>".$row["RealAA"]."</td>".
"<td>".$row["PlanAA"]."</td>".
"<td>".$row["REL"]."</td>".
"</td></tr> \n";
}
echo "</table> \n";
echo paginar($pag, $total, $tampag, "boletin444.php?pag=" . $enlace . "&municipio=" . $row['DMUNI'] . "&programa=" . $row['DPROGRAMA']);
}
else{
echo "¡ No se ha encontrado ningún registro !";}
echo "<div align='center'><a href ='formulario.htm'>Volver al Menu </a></div>";
mssql_close($conection) ;
?>
Cuando le doy al botón aceptar del mismo se muestran los registros que cumplen con ese criterio de 10 en 10 según el valor de la variable que define la cantidad de registros por página. Ahora bien cuando le doy a cualquiera de los otros enlaces (números de página) la consulta es como si se perdiera, no sale nada, me muestra el mensaje que dice que no se ha encontrado ningún registro, a pesar de poner el nombre de los parámetros, es decir el nombre del municipio y del programa seleccionado, pero al lado del programa seleccionado pone el no. de la página.
No sé a que se debe esto, si es una llamada incorrecta a la función, o estoy pasando el la variable de la página mal, en fin no sé.
Muchas Gracias.