Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

R_MontSerrat

Consulta com paginação

Recommended Posts

Galera, tenho que fazer uma consulta ao banco de dados com paginação, e quero que quando o número de páginas passe de 10 apareça os [...], mas não estou conseguindo. Alguem pode me ajudar?

Abaixo está o código

 

 

<?php

$host = "localhost"; //end. do servidor

$usuario = "root"; //usuario do banco de dados

$senha = ""; //senha do banco de dados

$banco = "newsletter"; //nome do banco de dados

$conect = mysql_connect($host,$usuario,$senha);

mysql_select_db($banco);

 

 

// Incluindo a conexão com o banco

 

//######### INICIO Paginação

$numreg = 5; // Quantos registros por página vai ser mostrado

if (!isset($pg)) {

$pg = 0;

}

 

$inicial = @$_GET['pg'] * $numreg;

//######### FIM dados Paginação

 

// Faz o Select pegando o registro inicial até a quantidade de registros para página ordenado de acordo com a escolha do cliente, no caso por Id

$sql = mysql_query("select * from n_emails ORDER BY id ASC LIMIT $inicial, $numreg");

 

// Serve para contar quantos registros você tem na seua tabela para fazer a paginação

$sql_conta = mysql_query("SELECT * FROM n_emails");

 

$quantreg = mysql_num_rows($sql_conta); // Quantidade de registros pra paginação

 

$num = $inicial + 1;

while($lista2 = mysql_fetch_array($sql)){

$id = $lista2["id"];

$email = $lista2["email"];

$tel = $lista2["telefone"];

$nome = $lista2["nome"];// exibe os emails cadastrados no BD

 

print "

 

<table width=611 border=0 cellpadding=0 cellspacing=1>

<tr>

<td>$num </td>

<td>$nome</td>

<td>$email</td>

<td>$tel</td>

<td><a href=excluir.php?id=$id>remover</a></td>

</tr>

</table>

 

";

 

$num = $num + 1;

 

 

 

 

}

print"<br>";

 

 

$quant_pg = ceil($quantreg/$numreg);

$quant_pg++;

 

// Verifica se esta na primeira página, se não estiver ele libera o link para anterior

if ( @$_GET['pg'] > 0) {

echo "<a href=".$_SERVER['PHP_SELF']."?pg=".(@$_GET['pg']-1)." class=pg >< Anterior</a>";

} else {

echo "Anterior";

}

 

// 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 " [$i_pg] ";

} else {

$i_pg2 = $i_pg-1;

echo " <a href=".$_SERVER['PHP_SELF']."?pg=$i_pg2>$i_pg ";

}

}

 

// Verifica se esta na ultima página, se não estiver ele libera o link para próxima

if ((@$_GET['pg']+2) < $quant_pg) {

echo "<td><a href=".$_SERVER['PHP_SELF']."?pg=".(@$_GET['pg']+1)." class=pg >Proximo >";

} else {

echo "Proximo";

}

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse aqui vai para a ultima pagina ;

if($_GET['pagina'] > 10){

echo "<a href='".$_SERVER['PHP_SELF']."?pg=".$quant_pg."' class='pg'>...</a>";

} 

 

Esse so mostra ...

 

if($_GET['pagina'] > 10){

echo "...";

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas onde eu boto?

eu queria por exemplo, se tivessem 20 páginas, aparecesse até a 10 e do lado o [...] e quando fosse clicado as paginas mudariam da 11 até a 20.

Ou então quando a página 10 fosse selecionada o numero da página 1 sumiria e apareceria o da página 11 e assim por diante, como no google por exemplo...

Não estou conseguindo

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, esses dias também precisei de um sistema de paginação igual do Google, então criei esta classe e esta funcionando corretamente, verifica se lhe atende.

 


<?php

/**
* Paginação estilo Google 
* Classe responsável por retornar posições de paginação
* @author Wesley David Santos <wesleydavidsantos@gmail.com>
* @version 1.0
* 
* @example Como usar:
* 
* $paginator = new CreatePaginator(); // Instância a classe
* $paginator->setPageRange(10); // Define o número máximo de páginas que devem ser informadas
* $paginator->setLimitSearch(20); // Quantidade de resultados por página, usado para criar o número de páginas
* $paginator->setCountRow(100); // Quantidade de resultados encontrados na busca
* $pg = $paginator->getPages(); // Gera e retorna um array com os números das páginas.
* 
*/

class CreatePaginator{

   /**
     * Intervalo de páginas
     * @var    Integer
     * @access Private
     */
   private $_pageRange;

   /**
     * Guarda a página atual 
     * @var    Integer
     * @access Private  
     */
    private $_currentPage;

    /**
     * Armazena todas as páginas que serão apresentadas
     * @var    String
     * @access Private  
     */
    private $_pages;

    /**
     * Armazena a quantidade de itens retornados do banco de dados
     * @var    String
     * @access Private  
     */
    private $_countRow;     

    /**
     * Informa qual o limite de resultados por página, usado para dividir o resultado total gerando 
     * quantidade de páginas
     * @var    Integer
     * @access Private  
     */
    private $_limitSearch;


    /**
     * Inicializa variáveis ao instanciar classe
    */
    public function __construct(){

       /** 
        * Seta o valor da página corrente, o parametro usado na URL é 'p' 
       */
       $this->_currentPage = $this->getCurrentPage();

       /** 
        * O padrão de quantidade de páginas é 10 
       */ 
       $this->setPageRange( 10 ); 

    }

    /**
     * Seta a quantidade de links de paginação serão apresentados, se não for passado o padrão é 10
    */
    public function setPageRange( $param ){

       $this->_pageRange = is_numeric( $param ) ? $param : 10;

    }

    /**
     * Informa a quantidade de resultados encontrado no banco de dados
     * OBS.: A quantidade de resultados é dividida pela quantidade limite de resultados por página 
     * essa é informada na $this->_limitSearch
     * Quantidade de resultados por página
     * Exemplo: 100 resultados gerados, sendo 20 por página, 5 páginas criadas
    */
    public function setCountRow( $param ){

       $param = (integer) $param;

       if( $param > 0 ) $param = ceil( ($param / $this->_limitSearch) );

       $this->_countRow = $param;

    }

    /**
     * Seta a quantidade de resultados por página, usado para dividir o resultado total gerando 
     * quantidade de páginas
    */
    public function setLimitSearch( $param ){

       $this->_limitSearch = $param;

    }

    /**
     * Retorna o valor da página corrente
    */
    public function getCurrentPage(){

       /** Pega o valor da página atual **/
       return isset( $_GET['p'] ) && is_numeric( $_GET['p'] ) ? $_GET['p'] : 1;

    }

    /**
     * A páginação funciona no mesmo esquema da Google
     * É apresentado um limite de páginas ($this->_pageRange) e nesse limite existe sempre 4 
    */
    private function createPaginator(){

       /** Verifica se será atribuido um total de 10 posições na página corrente **/
       $pageFinal = ($this->_currentPage + 4) < 10 ? 10 : $this->_currentPage + 4;

       /** Se o valor $pageFinal for maior que $this->_countRow então $this->_countRow será definido como valor para $pageFinal **/
       if($pageFinal > $this->_countRow) $pageFinal = $this->_countRow;

       /** Determina qual será o valor para apresentar a páginação **/
       $pageStart = 1;
       if($this->_pageRange < $pageFinal) $pageStart = ($pageFinal - $this->_pageRange) + 1;

       /** Loop da $pageStart até o $pageFinal e armazena em um array o intervalo entre os dois **/            
       $page = array();
       for($i=$pageStart; $i <= $pageFinal; $i++) $page[] = $i;

       /** Retorna no formato de string os valores da páginação **/    
       $this->_pages = $page;

    }

    /**
     * Retorna os números das páginas a serem exibidas para paginação
     * @return Array
    */
    public function getPages(){

       $this->createPaginator();
       return $this->_pages;

    }     

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.