Ir para conteúdo

POWERED BY:

Arquivado

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

Henrique Barcelos

Paginação com MySQL + Ajax

Recommended Posts

Bom galera...

 

Segue abaixo um script que faz paginação com PHP, MySQL e AJAX...

 

Coloquem em um arquivo separado pra ficar melhor organizado e deem um include na pagina onde se deseja a paginação...

 

PHP:

/**
  * Paginação PHP + MySQL + AJAX
  * Por: Henrique J. P. Barcelos ©
  * Data: 04/04/2009
  * 
  * variáveis que devem ser declaradas antes da inclusão dessa página:
  * 
  * $sql -> a instrução em MySQL, sem a query, só a instrução
  * $quantos -> a qtde de registros por pagina
  * 
  * opcional:
  * $query_string -> se ouverem dados sendo passados por GET, criem uma query string para continuar passando esses dados
  * ex.: $query_string = "?param1=x&param2=y;";
  * 
  * */		$num_por_pagina = isset($quantos) ? $quantos : 10;
		   
		   //antes de mais nada, façam a conexão com o banco, é claro
		   mysql_connect("localhost", "usuario", "senha");
		   mysql_select_db("banco de dados");
   
		   $pagina = $_GET["pagina"];
		   
		   if (!$pagina) {
			   $pagina = 1;
			}
			 
		   // definir o número do primeiro registro da página. 
		   $primeiro_registro = ($pagina-1)*($num_por_pagina);
   
		   // consulta apenas os registros da página em questão utilizando como auxílio a 
		   // definição LIMIT. Ordene os registros pela quantidade de pontos, 
		   // começando do maior para o menor DESC.
		   $sqlFinal = $sql." LIMIT ".$primeiro_registro.", ".$num_por_pagina."";
		   $resultado = execQuery($sqlFinal);
					   
   
		   $pesquisa_total = execQuery($sql);
		   $total_reg = mysql_num_rows($pesquisa_total);
		   
		   $total_paginas = ceil($total_reg/$num_por_pagina);
   
		   $prev = $pagina - 1;
		   $next = $pagina + 1;
		   // se página maior que 1 (um), então temos link para a página anterior
		   
		   $pg_atual = empty($query_string) ? $_SERVER['PHP_SELF']."?" : $_SERVER['PHP_SELF'].$query_string."&";
		   
		   if ($pagina > 1) {
			   $prev_link = "<a href=\"$pg_atual"."pagina=$prev\" onclick=\"return mudarPagina('$pg_atual"."pagina=".$prev."')\">«Anterior</a>";
		   }
		   // se número total de páginas for maior que a página corrente, 
		   // então temos link para a próxima página  
		   if ($total_paginas > $pagina) {
			   $next_link = "<a href=\"$pg_atual"."pagina=$next\" onclick=\"return mudarPagina('$pg_atual"."pagina=".$next."')\">Próxima»</a>";
		   }
   
		   $painel = null;
		   
		   for ($x=1; $x <= $total_paginas; $x++) {	
			   if ($x==$pagina) {
			   // se estivermos na página corrente, não exibir o link para visualização desta página 
				   $painel .= "<span class='selecionado'>$x</span>";
			   } else {
					 $painel .= "<a href=\"$pg_atual"."pagina=$x\" onclick=\"return mudarPagina('$pg_atual"."pagina=".$x."')\">$x</a>";
			   }
			 }
   /**
	* variáveis retornadas após essa paginação:
	* 
	*  $resultado -> resultado da Query
	*  $total_reg -> total de registros
	*  $total_pag -> total de páginas
	*  $next_link -> link pra próxima página
	*  $prev_link -> link pra página anterior
	*  $painel -> o número das páginas
	*  
	*  Na exibição da paginação, concatenem essas 3 ultimas variáveis...
	*  ex.: $paginacao = $prev_link.$painel.$next_link;
	*/

 

 

 

Javascript/AJAX:

 

//crio o objeto xmlHttpRequest
   
   var xmlHttp;
   
   function Cria_XmlHttpObject(){
   
	   var xmlHttp = null;
	   
	   //cria o objeto XMLHttpRequest pra firefox, mozila, opera, etc
	   try {
		   xmlHttp = new XMLHttpRequest();
	   } 
	   
	   //cria o objeto XMLHttpRequest pra internet explorer, 6,0 + e posteriormente para internet explorer
	   catch (e) {
		   try {
			   xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		   } 
		   
		   catch (e) {
			   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		   }
	   }
	   
	   return xmlHttp;
   }
   
   function carregaPagGet(pagina, id, carregar){
	   xmlHttp = Cria_XmlHttpObject();
	   
	   if (xmlHttp == null) {
		   alert('O seu Broswer não suporta AJAX!');
		   return;
	   }
	   
	   var objetoHTML = document.getElementById(id);
	   
	   if (carregar == true) {
		   objetoHTML.innerHTML = "<div id='carregando'>Carregando...</div>" + objetoHTML.innerHTML;
	   }
	   
	   xmlHttp.open("GET", pagina, true);
	   
	   
	   xmlHttp.onreadystatechange = function(){
		   if (xmlHttp.readyState == 4) {
			   if (xmlHttp.status == 200) {
				   objetoHTML.innerHTML = xmlHttp.responseText;
			   }
			   else 
				   if (xmlHttp.status == 404) {
					   objetoHTML.innerHTML = "<div>Página não encontrada.</div>";
				   }
		   }
	   }
	   
	   
	   xmlHttp.send(null);
   }
   
 //o parametro pagina vai ser recebido do PHP, vide a estrutura dos links da paginação
   function mudarPagina(pagina){
	   carregaPagGet(pagina, "AQUI VAI O ID DO ELEMENTO ONDE A PAGINA SERÁ CARREGADA", true);
	   return false;
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei aqui também a versão 1.0 desse script xD...

 

ela não usa ajax, é só a paginação normal, funciona do mesmo jeito, só não precisa das funções JS/AJAX...

 

<?php

		mysql_connect("server", "usuario", "senha");
				mysql_select_db("banco de dados");
		
				
		$num_por_pagina = isset($quantos) ? $quantos : 10;
		
		$pagina = $_GET["pagina"];
		
		$exp_reg = "/[1-9]/";
		if(isset($pagina) && preg_match($exp_reg, $pagina) != 1){
			$propria_pagina = $PHP_SELF."?";
			echo "
			<script type='text/javascript'>
				window.location.href = '$propria_pagina"."$query_string"."pagina=1';
			</script>
			";
			exit;
		}
		
		if (!$pagina) {
			$pagina = 1;
		 }
		  
		// definir o número do primeiro registro da página. 
		$primeiro_registro = ($pagina-1)*($num_por_pagina);

		// consulta apenas os registros da página em questão utilizando como auxílio a 
		// definição LIMIT. Ordene os registros pela quantidade de pontos, 
		// começando do maior para o menor DESC.
		$sqlFinal = $sql." LIMIT ".$primeiro_registro.", ".$num_por_pagina."";
		$resultado = execQuery($sqlFinal);
					

		$pesquisa_total = execQuery($sql);
		$total_reg = mysql_num_rows($pesquisa_total);
		
		$total_paginas = ceil($total_reg/$num_por_pagina);
		
		//impeço que seja carregada uma página inexistente
		if($pagina > $total_paginas){
			echo "
			<script type='text/javascript'>
				window.location.href = '$propria_pagina"."$query_string"."pagina=".$total_paginas."';
			</script>
			";
		}

		$prev = $pagina - 1;
		$next = $pagina + 1;
		// se página maior que 1 (um), então temos link para a página anterior
		
		$pg_atual = empty($query_string) ? $_SERVER['PHP_SELF']."?" : $_SERVER['PHP_SELF'].$query_string."&";
		
		if ($pagina > 1) {
			$prev_link = "<a href=\"$pg_atual"."pagina=$prev\">«Anterior</a>";
		}
		// se número total de páginas for maior que a página corrente, 
		// então temos link para a próxima página  
		if ($total_paginas > $pagina) {
			$next_link = "<a href=\"$pg_atual"."pagina=$next\">Próxima»</a>";
		}

		$painel = "";
		
		for ($x=1; $x <= $total_paginas; $x++) {	
			if ($x==$pagina) {
			// se estivermos na página corrente, não exibir o link para visualização desta página 
				$painel .= "<span class='selecionado'>$x</span>";
			} else {
				  $painel .= "<a href=\"$pg_atual"."pagina=$x\">$x</a>";
			}
		  }
		
		?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, esqueci uma coisa...

 

Tem uma função aí chamada execQuery que faz a consulta no banco...

 

Segue abaixo:

 

function conectar(){
	
	/*Local*/
	$servidor = "localhost";
	$usuario = "root";
	$senha = "";
	
	
	$banco = "BANCO DE DADOS";
	
	$conn = mysql_connect($servidor, $usuario, $senha) or die ("Erro na conexão com servidor");
	$db = mysql_select_db($banco, $conn) or die ("Erro na seleção do banco");
}

function desconectar(){
	mysql_close();
}

function execQuery($sql){
	conectar();
	if($resultado = mysql_query($sql)){
		desconectar();
		return $resultado;
	}else{
		echo "Erro MySQL: ".mysql_error();
		desconectar();
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Visitas: 257...

Comentários: 0...

 

Valeu aí a todos... (y)

ahhh cara ñ esquenta com isso, se você estiver esperando q alguém apareça e agradeça pelo script, vou ser o 1°, apesar d ainda ñ ter usado ele, pelo q me parece ser útil, quem sabe coloco nos meus projetos, aproveita e da uma olhada neste script q disponibilizei aqui, http://forum.imasters.com.br/index.php?showtopic=343172, se você quiser alterar ele fique a vontade. Repare q ñ coloquei os créditos pq quem usar vai tirar d qualquer jeito mesmo ;(, mais oq conta é poder ajudar. vlw kra

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, esperava no mínimo um "obrigado" de quem fosse usar, msm que excluissem os créditos...

 

Eu tinha visto o seu tópico antes...

 

Vai me ser util na parte do redimensionamento de imagens, pq o código que eu tenho aki dá muuuuuuitas voltas pra redimensionar e nunca tenho tempo de modificar =/...

 

Teh +...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou lhe dar um OBRIGADOO. apesar de ainda não ter usado até mesmo porque não entendo muito de paginação, vou tentar alterar algumas coisas para ele se adequar ao meu ayout. (mais seus créditos continuarão) ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Penso que deveria colocar um exemplo de como usar, pois eu coloquei o script em js num ficheiro e o php noutro, dps inclui o js no php e tipo não funciona, a paginação funciona, mas sem o ajax....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, esperava no mínimo um "obrigado" de quem fosse usar, msm que excluissem os créditos...

 

Eu tinha visto o seu tópico antes...

 

Vai me ser util na parte do redimensionamento de imagens, pq o código que eu tenho aki dá muuuuuuitas voltas pra redimensionar e nunca tenho tempo de modificar =/...

 

Teh +...

 

Cara.. se for pra copiar o codigo de outro forum e colocar aqui ... eu nao sei se voce merece um obrigado... pelo menos otimize o codigo... crie uma funcao.. .organize melhor isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite pessoal!!

to precisando de uma ajuda com paginacao!!!

 

Seguinte, tenho um site e nele tenho um link de noticias onde todas as noticias sao listadas, aqui a paginacao funciona blzinha!!

 

mas o meu "problema" é o seguinte.. na pagina inicial do site serao listadas as 3 noticias mais recentes, ai o q acontece pra exibir o conteudo completo da noticia eu passo o codigo para q seja realizado o select na pagina de exibicao da noticia, ateh aqui tbm tudo bem,

soh q como existe mais de uma noticia eu quero criar uma paginacao pra isso, tipo exibi a noticia q o usuario clicou e embaixo um anterior| proximo pro usuario navegar e nao ter q voltar na pagina onde sao listadas as noticias, tentei fazer, soh q no link anterior e proximo exibe o mesmo codigo da noticia, por exemplo: se estou na noticia 15 a minha noticia anterior seria a 18 e a proxima seria a 12 vamos supor, soh q isso nao acontece, no caso o link anterior e proximo ficam com o codigo 18.

 

e soh tah faltando resolver isso pra eu entregar este site...

 

Alguem se habilita??

 

O codigo de paginacao q estou usando eh o mesmo deste post, soh q sem ajax, por enquanto!!

 

vlw pessoal!!

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.