Ir para conteúdo

POWERED BY:

Arquivado

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

TiagoMaker

[Resolvido] Ordenar itens e paginação

Recommended Posts

Dae galera! Estou desenvolvendo um sistema básico de controle de estoque para aprender alguns mecanismos do PHP e MYSQL.

Minha primeira dúvida é a seguinte: Tenho uma página "produtos_con.php" onde eu recebo todos os produtos cadastrado com código, nome e preço. Gostaria de saber como limitar a exibição para 15 itens onde possa avançar ou voltar a página.

A segunda dúvida é: Eu recebo os dados dos produtos por ordem alfabética, mas gostaria de poder clicando no titulo código ou no título preço, mudar a ordem da exibição para a escolhida clicando 1 vez em ordem crescente e se clicar de novo no mesmo título muda para ordem decrescente.

 

Será que é possível fazer tudo isso na mesma página, ou tenho que criar páginas separadas para cada operação?

 

Aqui está o código da página:

 

<?php
	require_once("admin/restringir.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>PRÓ ESTOQUE</title>
    <link rel="stylesheet" type="text/css" href="includes/estilo.css" />
    <script>function cor_tabela(id){
  var cor1="#F2F2F2";
  var cor2="#E0E0E0";
  var x=document.getElementById(id).getElementsByTagName('tr');
  for(i=0;i<x.length;i++)
  x[i].style.backgroundColor=(i%2==0)?cor1:cor2;
}
</script> 
</head>
<body>
<div id="corpo" align="center">
<?php
     include "includes/topo.php";
     include "includes/menu.php";
?><BR>
<table width="700" border="1" cellpadding="0" cellspacing="0" align="center">
<tr>
  <td align="right">
BUSCAR PRODUTO: 
</td>
  <td align="left"><form id="form1" name="form1" method="post" action="exibir_busca.php">
  <label> 
  <input type="text" name="campo_busca" id="campo_busca" />
  </label>
  <label>
  <input type="submit" name="button" id="button" value="Efetuar Busca" />
  </label>
  </form></td>
</tr>
</table>
<table width="700" border="1" cellpadding="0" cellspacing="0" align="center" style="margin-top:50px;">
<tr><td height="30" colspan="4" align="center" background="imagens/fundotitover.jpg" style="border-top: solid 1px #000; border-right: solid 1px #000; border-left: solid 1px #000;"><b>CONSULTA DE PRODUTOS<br /></b></td></tr>
<tr style="background-image:url(imagens/bgcampo.jpg); height:30px;">
	<td width="100" align="center" style="border-bottom: solid 1px #000000; border-left: solid 1px #000000;">CÓDIGO</td>
	<td width="450" align="center" style="border-bottom: solid 1px #000000;">NOME</td>
	<td width="150" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000;">PREÇO</td>
</tr>
</table>
<table width="700" id="tb1" cellpadding="0" cellspacing="0" align="center">
<?php

require_once("includes/conect_mysql.php");
conecta_BD();

	$sql = "SELECT id_produtos, nome_produtos, preco_produtos FROM produtos order by nome_produtos";
	$linha = query($sql);

	while ($dados = le_linha($linha))
	{
		echo '<tr>';
			echo '<td width="100" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000; border-left: solid 1px #000000;"><a href="produtos_cad.php?id='.$dados[id_produtos].'">'.$dados[id_produtos].'</a></td>';
			echo '<td width="450" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000;"><a href="produtos_cad.php?id='.$dados[id_produtos].'">'.$dados[nome_produtos].'</a></td>';
			echo '<td width="150" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000;">R$ <a href="produtos_cad.php?id='.$dados[id_produtos].'">'.number_format($dados[preco_produtos], 2, ',', '.').'</a></td>';
		echo '</tr>';
	}
?>
</table>
<script>
cor_tabela("tb1");
</script><BR>
</div>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use um ORDER BY nome_produtos ASC, ou algo do tipo para ordenar.

 

Entendo sua sugestão, porém, você não deve ter entendido minha dúvida. Eu recebo inicialmente em ordem alfabética, então o que eu queria fazer é quando você clicar no título da coluna CÓDIGO reordene os registros para ordem crescente dos CÓDIGOS, quando clicar no título da coluna PREÇOS, reordene os registro do menor para o maior preço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu faria uma função onde teria a SQL e receberia o campo que seria ordenado e ordem (ASC/DESC).

 

Quando clicar no título da coluna passase o parâmetro para a URL, se estiver usando jQuery fica mais fácil, talvez tenha plugins prontos para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu entendo que a lógica seja mais ou menos assim, porém, como sou iniciante não saberia como montar na página:

 

nestes titulos crio um link que vai pra mesma página so que com um parametro a mais: o ordem

 

tipo: produtos_con.php?ordem=preco

 

ou

 

produtos_con.php?ordem=descricao

 

e pra fazer desc eu checaria se o $_GET['ordem'] é igual ao da coluna (se $_GET['ordem] é igual a preco quando for fazer o de preco) se for eu colocaria outro parametro o desc

 

index.php?ordem=preco&desc=true

 

ai é aplicar na hora da consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a consulta acho que ficaria mais ou menos assim, mas ainda não consigo fazer funcionar

 

$sql = "SELECT `cod`, `descricao`, `preco` FROM `produtos` WHERE 1 ";
$sql .= (isset($_GET["ordem"]) ? "ORDER BY ".$_GET["ordem"]." " : "");
$sql .= ((isset($_GET["ordem"]) && isset($_GET["desc"])) ? "DESC" : "ASC");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um if antes disto. Se estiver setado a $_GET['ordem'], execute aquele código que você colocou. Se não estiver, execute este aqui.

 

$sql = "SELECT id_produtos, nome_produtos, preco_produtos FROM produtos order by nome_produtos";
        $linha = query($sql);

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa parte ta pronta! O problema é que a paginação não pega essa informação que foi mudada a ordem e continua exibindo por nome se eu troco a página!

 

Tentei dessa forma, mas não deu certo!

 

paginação.php

<style type="text/css"> 
<!-- 
.pgoff {font-family: Verdana, Arial, Helvetica; font-size: 16px; color: #FF0000; text-decoration: none} 
a.pg {font-family: Verdana, Arial, Helvetica; font-size: 16px; color: #003366; text-decoration: none} 
a:hover.pg {font-family: Verdana, Arial, Helvetica; font-size: 16px; color: #0066cc; text-decoration:underline} 
--> 
</style> 
<?php 

if (empty($_GET["ordem"]))
$ordem = "nome_produtos";
else
$ordem = $_GET["ordem"];

        $quant_pg = ceil($quantreg/$numreg); 
        $quant_pg++; 
         
        // Verifica se esta na primeira página, se nao estiver ele libera o link para anterior 
        if ( $pg > 0) {  
                echo "<a href=".$PHP_SELF."?pg=".($pg-1) ."class=pg><b>« anterior</b></a>"; 
        } else {  
                echo "<font color=#CCCCCC>« 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 ($pg == ($i_pg-1)) {  
                        echo " <span class=pgoff>[$i_pg]</span> "; 
                } else { 
                        $i_pg2 = $i_pg-1; 
                        echo " <a href=".$PHP_SELF."?ordem=".$_GET[ordem]."?pg=$i_pg2 class=pg><b>$i_pg</b></a> "; 
                } 
        } 
         
        // Verifica se esta na ultima página, se nao estiver ele libera o link para próxima 
        if (($pg+2) < $quant_pg) {  
                echo "<a href=".$PHP_SELF."?pg=".($pg+1)." class=pg><b>próximo »</b></a>"; 
        } else {  
                echo "<font color=#CCCCCC>próximo »</font>"; 
        } 
?>

produtos_con.php

<?php
	require_once("admin/restringir.php");
	
	//######### INICIO Paginação 
        $numreg = 15; // Quantos registros por página vai ser mostrado 
        if (!isset($pg)) { 
                $pg = 0; 
        } 
        $inicial = $pg * $numreg; 

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>PRÓ ESTOQUE</title>
    <link rel="stylesheet" type="text/css" href="includes/estilo.css" />
    <script>function cor_tabela(id){
  var cor1="#F2F2F2";
  var cor2="#E0E0E0";
  var x=document.getElementById(id).getElementsByTagName('tr');
  for(i=0;i<x.length;i++)
  x[i].style.backgroundColor=(i%2==0)?cor1:cor2;
}
</script> 
</head>
<body>
<div id="corpo" align="center">
<?php
     include "includes/topo.php";
     include "includes/menu.php";
?>
<table background="imagens/busca.png" width="700" height="50" border="1" cellpadding="0" cellspacing="0" align="center" style="margin-top:30px;">
<tr>
  <td align="right">
BUSCAR PRODUTO: 
</td>
  <td align="left"><form id="form1" name="form1" method="post" action="busca_produto.php">
  <label> 
  <input name="campo_busca" type="text" id="campo_busca" size="40" />
  </label>
  <label>
  <input id="bt" type="submit" name="button" value="Efetuar Busca" />
  </label>
  </form></td>
</tr>
</table>
<BR>
<table width="700" border="1" cellpadding="0" cellspacing="0" align="center">
<tr><td height="30" colspan="4" align="center" background="imagens/fundotitover.jpg" style="border-top: solid 1px #000; border-right: solid 1px #000; border-left: solid 1px #000;"><b>CONSULTA DE PRODUTOS<br /></b></td></tr>
<tr style="background-image:url(imagens/bgcampo.jpg); height:30px;">
	<td width="100" align="center" style="border-bottom: solid 1px #000000; border-left: solid 1px #000000;"><a href="?ordem=id_produtos">CÓDIGO</a></td>
	<td width="450" align="center" style="border-bottom: solid 1px #000000;"><a href="?ordem=nome_produtos">NOME</a></td>
	<td width="150" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000;"><a href="?ordem=preco_produtos">PREÇO</a></td>
</tr>
</table>
<table width="700" id="tb1" cellpadding="0" cellspacing="0" align="center">
<?php

require_once("includes/conect_mysql.php");
conecta_BD();

if (empty($_GET["ordem"]))
$ordem = "nome_produtos";
else
$ordem = $_GET["ordem"];

	$sql = "SELECT id_produtos, nome_produtos, preco_produtos FROM produtos ORDER BY $ordem LIMIT $inicial, $numreg";
	$linha = query($sql);

	$sql_conta = mysql_query("SELECT * FROM produtos");
	$quantreg = mysql_num_rows($sql_conta); 

	while ($dados = le_linha($linha))
	{
		echo '<tr>';
			echo '<td width="100" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000; border-left: solid 1px #000000;"><a href="produtos_cad.php?id='.$dados[id_produtos].'">'.$dados[id_produtos].'</a></td>';
			echo '<td width="450" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000;"><a href="produtos_cad.php?id='.$dados[id_produtos].'">'.$dados[nome_produtos].'</a></td>';
			echo '<td width="150" align="center" style="border-bottom: solid 1px #000000; border-right: solid 1px #000000;">R$ <a href="produtos_cad.php?id='.$dados[id_produtos].'">'.number_format($dados[preco_produtos], 2, ',', '.').'</a></td>';
		echo '</tr>';
	}
?>
</table>
<script>
cor_tabela("tb1");
</script><BR>
<?php include("paginacao.php"); ?>
<div style="margin-bottom:20px;"></div>
</div>
</body>
</html>

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.