Ir para conteúdo
Fórum Script Brasil
  • 0

Exibir produtos da Categoria com paginação


Clayton

Pergunta

Boa tarde, eu tenho esses 2 códigos , o primeiro é do menu categorias, o segundo é a paginação,não estou conseguindo paginar os produtos da categoria:

quando clico na categoria exibe assim no browser:

http://127.0.0.1:8888/loja/index.php?idCat=3

quando clico no botao da paginaçao:

http://127.0.0.1:8888/loja/index.php?pg=2 ou seja não avanca os produtos da categoria, peço ajuda para resolver este problema.aqui os códigos:

Menu das categorias

<?php
require_once ('./funcao/conecta.php');
$conn = conecta();
$sql = $conn->prepare("SELECT * FROM `loja`.`categorias` ORDER BY `nome_categoria` ASC");
$sql->execute(array());
$sql->setFetchMode(PDO::FETCH_ASSOC);
$sql->execute();
while($linha = $sql->fetch()) {
$categoriaid = $linha['id_categoria'];
$nomecategoria = $linha['nome_categoria'];
echo'<li>';
echo'<a href = "index.php?idCat=' . $categoriaid . '">'.$nomecategoria.'</a>'; //aqui quero linkar os produtos.
echo'</li>';
}
echo'</div>';
echo '</div id="link"><div>';
echo'</div>';
?>

código da paginação:

<?php
@$idCat = $_GET['idCat']; // Estou pegando o ID da categoria. (que esta na URL e foi passada no link da página anterior)
require_once ('./funcao/conecta.php');
$conn = conecta();
echo'<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
echo'<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />';
echo'<table width="100%" height="0" cellspacing="60" cellpadding="60">';
$i=1;
$limite = 10;
$pg = (isset($_GET['pg'])) ? (int)$_GET['pg'] : 1 ;
$inicio = ($pg * $limite) - $limite;
$busca = $conn->prepare("SELECT * FROM `produtos` WHERE `id_categoria` = " . $idCat . " ORDER BY `id` LIMIT $inicio,$limite"); //Aqui eu filtro os produtos de determinada categoria
$busca->execute(array());
$busca->setFetchMode(PDO::FETCH_ASSOC);
$busca->execute();
echo '<div id="Box">';
while($linha = $busca->fetch(PDO::FETCH_ASSOC)){
echo '<td align = "center"><h2>'.$linha['nome'].'</h2></br>';
echo '<div align="loja"><img src='.$linha['foto'].'></a><a base64_encode href="./shop.php?acao=add&id='.$linha['id'].'"></br></br>';
echo '<p align = "center"><button type="button" name="" value="" class="quero">Eu Quero!</button></p>';

if( $i%5 == 0 ) {
echo "</tr><tr>";
}
$i++;
}
echo'<div class="clear"> </div>';
echo "</tr></table>";
//seleciona o total de registros
$sql_Total = 'SELECT * FROM `produtos` ';
try{
$query_Total = $conn->prepare($sql_Total);
$query_Total->execute();
$query_result = $query_Total->fetchAll(PDO::FETCH_ASSOC);
//conta quantos registros tem no banco de dados
$query_count = $query_Total->rowCount(PDO::FETCH_ASSOC);
//calcula o total de paginas a serem exibidas
$qtdPag = ceil($query_count/$limite);
}catch(PDOexception $error_Total){
echo 'Erro ao retornar os Dados. '.$error_Total->getMessage();
}
//Cria os links para navega&#65533;&#65533;o das paginas

echo ' <div class = "paginacao"><div align = "center" ><a href="?pg=1">Primeira Página</a>  ';
if($qtdPag > 1 && $pg<= $qtdPag){
for($i=1; $i <= $qtdPag; $i++){

if($i == $pg){

echo $i;

}else{
echo "<a href='index.php?pg=$i'>".$i."</a>";
}

}

}

echo "   <a href=\"?pg=$qtdPag\">Última Página</a> ";

?>

 

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
12 minutos atrás, lowys disse:

Olá!

Não existe </br>, Existe apenas <br>, veja em: http://www.w3schools.com/tags/tag_br.asp

É inadequado usar <tr></tr> fora de <table></table>, e dentro de <tr></tr> deve haver pelo menos uma <td></td>, veja em: http://www.w3schools.com/html/html_tables.asp

Dentro do while (... há uma abertura de  <td ...>, mas onde está a tag de fechamento? </td>

Tem um </a> depois de <img src="">, mas onde o <a> foi aberto?

Logo depois, abre um <a base64_encode...> onde ele é fechado?

Sugestão de solução para a paginação:

Para que a paginação continue com as mesma categoria, é só você adicionar a categoria nos links de paginação, veja:


<meta charset='utf-8'>
<?php

require_once ('./funcao/conecta.php');
$conn = conecta();
$sql = $conn->prepare("SELECT * FROM `loja`.`categorias` ORDER BY nome_categoria ASC");
$sql->execute();
$sql->setFetchMode(PDO::FETCH_ASSOC);
while ($linha = $sql->fetch()) {
    $categoriaid = $linha['id_categoria'];
    $nomecategoria = $linha['nome_categoria'];
    echo'<li>
    <a href = "index.php?idCat=' . $categoriaid . '">' . $nomecategoria . '</a>
    </li>';
}
echo '</div>
</div id="link"><div>
</div>';
?>
//
//  OUTRO ARQUIVO
//

<meta charset='utf-8'>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<table width="100%" height="0" cellspacing="60" cellpadding="60">

    <?php
    if (isset($_GET['idCat'])) {
        $idCat = $_GET['idCat'];
        require_once ('./funcao/conecta.php');
        $conn = conecta();
        $i = 1;
        $limite = 10;
        $pg = isset($_GET['pg']) ? (int) $_GET['pg'] : 1;
        $inicio = ($pg * $limite) - $limite;
        $busca = $conn->prepare("SELECT * FROM `produtos` WHERE `id_categoria` = " . $idCat . " ORDER BY `id` LIMIT $inicio,$limite"); //Aqui eu filtro os produtos de determinada categoria
        $busca->execute();
        echo '<div id="Box">';
        while ($linha = $busca->fetch(PDO::FETCH_ASSOC)) {
            echo '<td align = "center"><h2>' . $linha['nome'] . '</h2><br>';
            echo '<div align="loja"><img src="' . $linha['foto'] . '"></a><a base64_encode href="./shop.php?acao=add&id=' . $linha['id'] . '"><br><br>';
            echo '<p align = "center"><button type="button" name="" value="" class="quero">Eu Quero!</button></p>';

            if ($i % 5 == 0) {
                echo "</tr><tr>";
            }
            $i++;
        }
        echo'<div class="clear"> </div>';
        echo "</tr></table>";
//calcula o total de paginas a serem exibidas
        $query = $conn->prepare("SELECT * FROM produtos WHERE id_categoria = $idCat");
        $query->execute();
        $result = $query->fetchAll(PDO::FETCH_ASSOC);
        $total = count($result);
        $qtdPag = ceil($total / $limite);
//Cria os links para navegação das paginas
        $categoriaAtual = 'idCat=' . $idCat;
        echo ' <div class = "paginacao"><div align = "center" ><a href="?' . $categoriaAtual . '&pg=1">Primeira Página</a>  ';
        for ($i = 1; $i <= $qtdPag; $i++) {

            if ($i == $pg) {
                echo $i;
            } else {
                echo "<a href='index.php?$categoriaAtual&pg=$i'>" . $i . "</a>";
            }
        }

        echo "   <a href=\"?$categoriaAtual&pg=$qtdPag\">Última Página</a> ";
    }

 

 

Editado por lowys
Link para o comentário
Compartilhar em outros sites

  • 0

Olha fiz o que você falou , só que o problema é o seguinte , quando eu escolho uma categoria aparece no browser:

http://127.0.0.1:8888/loja/index.php?idCat=3  (seleciona os produtos da categoria 3 corretamente, agora se clico em algum outro botão da paginação acontece isso:

http://127.0.0.1:8888/loja/index.php?pg=2 (ou seja ele não avanca os proximos produtos da categoria , como eu faço para ele dar continuidade na paginaçao a exibicao dos produtos da categoria. eis aqui o bd:

CREATE DATABASE IF NOT EXISTS `loja`;
USE `loja`;

#
# Table structure for table 'categorias'
#

DROP TABLE IF EXISTS `categorias`;

CREATE TABLE `categorias` (
  `id` INTEGER NOT NULL AUTO_INCREMENT,
  `id_categoria` VARCHAR(255),
  `nome_categoria` VARCHAR(255),
  INDEX (`id_categoria`),
  PRIMARY KEY (`id`)
) ENGINE=myisam DEFAULT CHARSET=utf8;

SET autocommit=1;

#
# Dumping data for table 'categorias'
#

INSERT INTO `categorias` (`id`, `id_categoria`, `nome_categoria`) VALUES (1, '1', 'Masculino');
INSERT INTO `categorias` (`id`, `id_categoria`, `nome_categoria`) VALUES (2, '2', 'Feminino');
INSERT INTO `categorias` (`id`, `id_categoria`, `nome_categoria`) VALUES (3, '3', 'Acessorios');
INSERT INTO `categorias` (`id`, `id_categoria`, `nome_categoria`) VALUES (4, '4', 'Roupa_Intima');
INSERT INTO `categorias` (`id`, `id_categoria`, `nome_categoria`) VALUES (5, '5', 'Linha Saude');
INSERT INTO `categorias` (`id`, `id_categoria`, `nome_categoria`) VALUES (6, '6', 'Cosmeticos');
INSERT INTO `categorias` (`id`, `id_categoria`, `nome_categoria`) VALUES (7, '7', 'Linha Fitness');
# 7 records

#
# Table structure for table 'produtos'
#

DROP TABLE IF EXISTS `produtos`;

CREATE TABLE `produtos` (
  `id` INTEGER NOT NULL AUTO_INCREMENT,
  `id_categoria` VARCHAR(255),
  `foto` VARCHAR(255),
  `nome` VARCHAR(255),
  `descricao` LONGTEXT,
  `preço` VARCHAR(255),
  `tamanho` VARCHAR(255),
  `cor` VARCHAR(255),
  INDEX (`id_categoria`),
  PRIMARY KEY (`id`)
) ENGINE=myisam DEFAULT CHARSET=utf8;

SET autocommit=1;

#
# Dumping data for table 'produtos'
#

INSERT INTO `produtos` (`id`, `id_categoria`, `foto`, `nome`, `descricao`, `preço`, `tamanho`, `cor`) VALUES (1, '2', 'fotos/aconchego.png', 'ACONCHEGO', 'Material sintético de alta qualidade. Solado em Poliuretano de 3 cm. Tecnologia para quem quer pisar com maciez e conforto. Tiras em sintético com cetim.', 'R$ 182,00', '33 ao 40', 'Preto,Vermelho,Marrom');
INSERT INTO `produtos` (`id`, `id_categoria`, `foto`, `nome`, `descricao`, `preço`, `tamanho`, `cor`) VALUES (2, '2', 'fotos/adele.png', 'ADELE', 'Em material sintetico de alta qualidade e com detalhes trabalhados. Forro touch em Poliuretano. Fivelas douradas e palmilhas forradas.', 'R$ 233,00', '33 ao 39', 'Cor única');
INSERT INTO `produtos` (`id`, `id_categoria`, `foto`, `nome`, `descricao`, `preço`, `tamanho`, `cor`) VALUES (3, '2', 'fotos/afrika.png', 'AFRIKA', 'Com material sintetico estampado com o tema onça.Forro interno em touch,com espuma na parte traseira e palmilhas forradas.Solado em TR antiderrapante,confortavel e leve, com salto dourado de 2cm.', 'R$ 198,00', '33 ao 39', 'Cor única');

Será que o banco está modelado errado ?

eu só preciso que ele avance o resultado dos produtos corretamente!

Link para o comentário
Compartilhar em outros sites

  • 0

Olá! Creio que a sugestão anterior não foi devidamente observada.

Você vai precisar das duas variáveis na url.

Coloquei em negrito o que vai fazer você continuar na categoria atual. Observe com atenção:

//Cria os links para navegação das paginas
        $categoriaAtual = 'idCat=' . $idCat;
        echo ' <div class = "paginacao"><div align = "center" ><a href="?' . $categoriaAtual . '&pg=1">Primeira Página</a>  ';
        for ($i = 1; $i <= $qtdPag; $i++) {

            if ($i == $pg) {
                echo $i;
            } else {
                echo "<a href='index.php?$categoriaAtual&pg=$i'>" . $i . "</a>";
            }
        }

        echo "   <a href=\"?$categoriaAtual&pg=$qtdPag\">Última Página</a> ";
    }

// ======================================================================

Quanto ao database:

Porquê é que na tabela CATEGORIAS, existe a coluna id e id_categoria?

Se a coluna id_categoria aceita até 255 caracteres, porquê foi preenchida apenas com números?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...