Error in PHP Paging

Asked

Viewed 183 times

0

Guys, I’m having a little problem paging a system I’m developing. When I search the resulting in the database, the link to pass to the next page, either link or stay hidden. I found that the problem is on this line: $quant_pg = ceil ($sql / $limite) -1;

someone can help me solve the problem, I’ve broken my head that only here!

Here is the code of which visualizes the result of the Database:

<body>
<center><h2> Lojas Cadastradas </h2></center>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="table">
    <tr class="linha">
        <td class="linha" width="20%" align="center"><b>Codigo da Loja</b></td>
        <td class="linha" align="center"><b>Nome da Loja</b></td>
    </tr>
<?php
require 'processos/config.php';
require 'processos/connection.php';
require 'processos/database.php';


    $limite = 5; // Quantos registros por página vai ser mostrado
    if( isset( $_GET['pagina'] ) && (int)$_GET['pagina'] >= 0) {
    $pagina = (int)$_GET['pagina'];
    }
    else {
          $pagina = 0;
    }

    $offset = $limite * $pagina;

  //LÊ DADOS DO BANCO
    $lojas = DBRead ("lojas", "ORDER BY cod_loja ASC LIMIT $limite OFFSET $offset", "id_lojas, cod_loja, nome_loja");

  foreach ($lojas as $lj) {

        ?>
    <tr onmouseover="ChangeColor(this, true);" onmouseout="ChangeColor(this, false);" onclick="DoNav('altera_loja.php?id=<?php echo $lj['id_lojas'];?>');">
        <td class="linha" align="center" valign="middle"><?php echo $lj['cod_loja'];?></td>
        <td class="linha espaco" valign="middle"><?php echo $lj['nome_loja']; ?></td>
    </tr>
<?php
    }
?>
</table>
<?php
  require "paginacao.php";
?>
</body>

below follows the pagination code;

<?php
$sql = DBRead ("lojas");

$quant_pg = ceil ($sql / $limite) -1;
$quant_pg ++;

var_dump($sql);
//echo "$sql";


// Verifica se esta na primeira página, se nao estiver ele libera o link para anterior
if ( @$_GET['pg'] > 0) {
echo "<a href=".$_SERVER['PHP_SELF']."?pg=".(@$_GET['pg']-1)." class=pg ><b>&laquo; Anterior</b></a>";
} else {
echo "<font color=#CCCCCC>&laquo; anterior </font>";
}

// Faz aparecer os numeros das página entre o ANTERIOR e PROXIMO

for($i_pg=1; $i_pg<$quant_pg;$i_pg++) {
// Verifica se a página que o navegante esta e retira o link do número para identificar visualmente

if (@$_GET['pg'] == ($i_pg-1)) {
echo "&nbsp;<span class=pgoff>[$i_pg]</span>&nbsp;";
} else {
$i_pg2 = $i_pg-1;
echo "&nbsp;<a href=".$_SERVER['PHP_SELF']."?pg=$i_pg2 class=pg><b>$i_pg</b></a>&nbsp;";
}
}

// Verifica se esta na ultima página, se nao estiver ele libera o link para próxima
if ((@$_GET['pg']+2) < $quant_pg) {
echo "<a href=".$_SERVER['PHP_SELF']."?pg=".(@$_GET['pg']+1)." class=pg ><b>próximo &raquo;</b></a>";
} else {
echo " <font color=#CCCCCC> -- próximo &raquo;</font>";
}
?> 

2 answers

0

$sql = DBRead ("lojas"); $quant_pg = ceil ($sql / $limite) -1;

Dbread seems to return a resultset into the $sql variable, but you are using it in your code as if it were the number of lines. Is that all right?

Echo both $sql and $limit to see what values are coming.

0

This is one way to make it work:

class Paginacao
{

    private $limit=3;
    private $proxima='<b>Pr&oacute;xima &raquo;</b>';
    private $anterior='<b>&laquo; Anterior</b>';
    private $pagina="";
    private $getPage="";
    private $idPagination = "";
    private $numeroPaginasIntermediarias = 4;

    public function __construct($getPage = 'index.php?page=', $id = 'paginacao')
    {
        $this->getPage = $getPage;
        $this->idPagination = $id;      
    }

    public function setTotalperPage($total)
    {
        $this->limit = $total;
    }   

    public function getInitial($pagina,$max)
    {

        $this->limit =$max;

        if ($pagina == "") {  
           $pagina = 1;  
        } 
        $inicio = $pagina - 1;
        $inicio = $this->limit * $inicio;
        return $inicio;
    }

    public function pagination($total = null, $pagina = null) {
        $max = $this->limit;
        $tags = ''; 
        if ($max!=0) {
            $tags .= "<div align=\"center\" id=\"".$this->idPagination."\">";
            // Calculando pagina anterior
               $menos = $pagina - 1;
            // Calculando pagina posterior
               $mais = $pagina + 1;

            // 
            $pgs = (int) ceil($total / $max);

            if ($pgs > 1 ) {
                if ($menos >0) { 
                  $tags.= "<a href=\"{$this->getPage}{$menos}\" class=\"navegacao\">".$this->anterior."</a> "; 
                }

                if (($pagina - $this->numeroPaginasIntermediarias) < 1 ) {
                  $anterior = 1;
                } else { 
                  $anterior = $pagina-$this->numeroPaginasIntermediarias;
                }

                if (($pagina + $this->numeroPaginasIntermediarias) > $pgs ) {
                    $posterior = $pgs;
                } else {
                    $posterior = $pagina + $this->numeroPaginasIntermediarias;
                }

                for ($i = $anterior; $i <= $posterior; $i++) {
                    if ($i != $pagina) {
                       $tags.= " <a href=\"{$this->getPage}{$i}\" class=\"pg\"><b>$i</b></a>";
                    } else {
                      $tags.= " <span class=\"pgoff\">$i</span>";
                    }
                }

                if ($mais <= $pgs) { 
                    $tags.= " <a href=\"{$this->getPage}{$mais}\" class=\"pg\">".$this->proxima."</a>";
                }
            }
                $tags.= "</div>";
                return $tags;
        }

    }

}


$paginacao = new Paginacao($_SERVER['PHP_SELF'] . '?pg=', 'minha_paginacao');

$max = 20;  
$inicio = $paginacao->getInitial(1, $max);

$SQL = DBRead("lojas");
// aqui você traz o total usando seus métodos
$total_registros = $this->query("SELECT COUNT(*) FROM lojas");
// e use seus método de query passando "offset" e "limite por pagina"
$collection = $this->db->query($SQL." LIMIT $inicio, $max");     

foreach ($collection as $data) {
    echo $data['campo1'].'<br>';
}
echo $paginacao->pagination($total_registros, $inicio);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.