Jump to content
Fórum Script Brasil
  • 0

Exibir produtos da Categoria com paginação


Clayton
 Share

Question

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 to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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> ";
    }

 

 

Edited by lowys
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...