PUBLICIDADE

Autor

everton3x

Everton da Rosa

membro deste janeiro de 2007

Compartilhe e guarde

  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!

PUBLICIDADE

Enquete

Que área irá se desenvolver mais na web nos próximos anos?

Paginação com uma única consulta ao banco de dados


Este script utiliza CSS e JavaScript para paginar resultados de uma consulta a banco de dados (no caso, MySQL) de forma que seja preciso carregar uma única vez a página e não uma vez a cada página de resultados.

Basicamente o script funciona assim:
- É executada a consulta ao banco de dados;
- É montado um DIV para cada página de resultado, sendo que o primeiro permanece visível e os demais, ocultos;
- Ao clicar no número de página, o DIV visível atualmente é ocultado e o correspondente a página desejada é exibido.

Adicionalmente coloquei um formulário para que seja pesquisada uma string MySQL diretamente.
Este exemplo utiliza o banco information_schema do phpMyAdmin (a título de exemplo). Código totalmente comentado.

Você precisa informar a string de pesquisa (pode configurar uma padrão) e o número de linhas por página (opcional, pois o padrão é 25).
<?
if(!$_POST[sql]){$sql="select * from collations";}else{$sql=$_POST[sql];}//se não tiver recebido uma sql por formulário, usa a sql padrão

function pag($sql,$np='25'){
	mysql_connect('localhost','root',''); mysql_select_db('information_schema'); //executa a conexão e seleção de banco de dados
	$q=mysql_query($sql);//executa a consulta
	$nc=mysql_num_fields($q);//número de campos afetados pelo resultado
	$nr=mysql_num_rows($q);//número de linhas do resultado
	$div='<script language="JavaScript">
		function ir(p){
			var np=parseInt(document.np.np.value);
			var obj;
			for(var i=1;i<np;i++){
				objv=document.getElementById(i).style.visibility="hidden";
				objd=document.getElementById(i).style.display="none";
			}
			document.getElementById(p).style.visibility="visible";
			document.getElementById(p).style.display="inline";
		}
		</script>'; //monta o javascript que irá exibir/ocultar a paginação
	for($i=0;$i<$nc;$i++){ //monta um array com os campos da consulta
		$campos[$i]=mysql_field_name($q,$i);
	}
	$p=1;//seta a primeira página
	$l=1;//seta a primeira linha
	$rows=1;//seta o contador geral de linhas
	while($r=mysql_fetch_array($q)){ //pega cada linha do resultado da consulta
		if($p==1){$visibility="visible";$display="inline";}else{$visibility="hidden";$display="none";}; //se é a primeira página, exibe o div, senão oculta o div
		if($l==1){//se é a primeira linha da página, coloca o título primeiro
			$div.='<div id="'.$p.'" style="position: relative;left: 0px;top: 0px; visibility: '.$visibility.'; display: '.$display.';"><table border="0" align="center" width="100%"><tr>';
			while(list($k,$c)=each($campos)){//monta cada coluna do título
				$div.='<td>'.$c.'</td>';
			}// fim while do título
			reset($campos);//resseta os campos
			$div.='</tr>';//fecha a linha do título
		}//fim do if da primeira linha (título)
		$div.='<tr>';//abre a linha de dados
		while(list($k,$c)=each($campos)){//monta as colunas de resultado
			$v=$r[$c];
			$div.='<td>'.$v.'</td>';
		}//fecha while que monta os dados
		reset($campos);//resseta os campos
		$div.='</tr>';//fecha linha do resultado
		if($l==$np || $rows==$nr){//se a linha é igual ao máximo de linhas por página ou se chegou à última linha do resultado
			$div.='</table></div>';//fecha a tabela
			$links.='[<a href="#" onClick="ir(\''.$p.'\')">'.$p.'</a>]';//monta o link para as páginas
			$p++;//próxima página
			$l=1;//reinicia a contagem de linha
		}else{//senão é o máximo de linhas da página
			$l++;//aumenta a linha
		}//fecha if do número de linhas
		$rows++;//aumenta o contador geral de linhas
	}//fim while que pega cada linha do resultado
	$div.='<form name="np"><input name="np" value="'.$p.'" type="hidden"></form><div align="center">'.$links.'</div>';
	echo $div;//escreve as páginas
}

?>
<html>
<head>
<title>Paginação com troca rápida</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<fieldset><legend>Pesquisar</legend>
<form method="post">
SQL: <input type="text" name="sql" width="100" value="select * from collations"><input type="submit" value="Consultar">
</form>
</fieldset>
<fieldset><legend>SQL pesquisada:</legend><? echo $sql; ?></fieldset>
<? pag($sql);//coloque a string de consulta sql (obrigatório) e o número de páginas (opcional)?>
</body>
</html>

Sim   Não   Este código foi útil para você?
NotaComentário
Ainda não foi enviado nenhum comentário.
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • A pontuação de comentários de conteúdo do próprio membro não serão computados.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 5 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.
  • Há um limite de 10 comentários por dia para cada membro.
  • Qualquer comentário após ter sido publicado poderá ser retirado através da opção ( denunciar)

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres
 

R&W Consulting - Soluções Web Hospedagem UOL HOST PagSeguro - solução para pagamentos online
© 2006-2009 R&W Informática Ltda. - Todos os direitos reservados.