diokhan Posted December 3, 2009 at 03:37 PM Report Share #298591 Posted December 3, 2009 at 03:37 PM boas, sei que há no fórum paginações em php e assim, mas eu preciso que seja em PDO, é similar ao SQL. eu tentei usar uma paginação normal mas dá-me erros em: $queryCount = 'SELECT count(*) FROM project'; $resultCount = mysql_query($queryCount); // linha 18 $fetch_row = mysql_fetch_row($resultCount); // linha 19 $numrows = $fetch_row[0]; e da sempre estes erros nessas linhas: Warning: mysql_query() [function.mysql-query]: Access denied for user 'SYSTEM'@'localhost' (using password: YES) in......\page.php on line 18 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in .....\page.php on line 18 Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in ......\page.php on line 19 se alguém souber uma solução ou mesmo um código de paginação em PDO eu agradecia 😉 ...Join the dark side...and get a free cookie... Link to comment Share on other sites More sharing options...
diokhan Posted December 3, 2009 at 04:17 PM Author Report Share #298599 Posted December 3, 2009 at 04:17 PM resolvido 🙂 quem quiser a soluçao digam que eu coloco aqui o codigo 😛 ...Join the dark side...and get a free cookie... Link to comment Share on other sites More sharing options...
scorch Posted December 3, 2009 at 08:10 PM Report Share #298628 Posted December 3, 2009 at 08:10 PM Coloca. É esse o espírito comunitário, deixar as questões resolvidas para quem procurar pela mesma dúvida encontra uma solução. 🙂 PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
diokhan Posted December 3, 2009 at 09:18 PM Author Report Share #298640 Posted December 3, 2009 at 09:18 PM eu amanha logo pela manha coloco aqui o codigo e explico como funciona..eu ajudo sempre que puder, no que eu souber eu ajudo..acho que dividir conhecimentos é sempre bom, porque tanto aprendemos algo novo como ajudamos alguem a aprender 🙂 ...Join the dark side...and get a free cookie... Link to comment Share on other sites More sharing options...
diokhan Posted December 4, 2009 at 09:11 AM Author Report Share #298668 Posted December 4, 2009 at 09:11 AM para fazer a paginaçao em pdo precisamos de criar um ficheiro a qual podemos chamar "page.php", o conteudo sera este: <?php error_reporting(E_ALL|E_STRICT); ini_set('display_errors', 1); defined('DSN') or define('DSN', 'mysql:host=localhost;dbname=dbname'); // trocar pelo nome da base de dados (*) defined('USUARIO') or define('USUARIO', 'username'); // trocar pelo user (*) defined('SENHA') or define('SENHA', 'password'); // trocar pela password (*) class Paginacao_PDO { public $paginador = 'pag'; private $solicitador; public $sql; public $limite = 5; // numero de registos que vao aparecer por pagina (*) public $quantidade = 10; // Construtor carrega a string usada para como paginador public function __construct() { $this->solicitador = $_REQUEST["{$this->paginador}"]; } // Conexao privada private function conexao() { $conexao = new Conexao(); $con = $conexao->conexao; return $con; } // Retorna o numero de resultados encontrados public function resultado() { $this->resultado = $this->conexao()->query(str_replace('*', 'COUNT(*)', $this->sql)); $this->numeroResultados = $this->resultado->fetchColumn(); return $this->numeroResultados; } public function paginasTotais() { $paginasTotais = ceil($this->resultado() / $this->limite); return $paginasTotais; } // Procura o numero da pagina Atual public function paginaAtual() { if (isset($this->solicitador) && is_numeric($this->solicitador)) { $this->paginaAtual = (int) $this->solicitador; } else { $this->paginaAtual = 1; } if ($this->paginaAtual > $this->paginasTotais()) { $this->paginaAtual = $this->paginasTotais(); } if ($this->paginaAtual < 1) { $this->paginaAtual = 1; } return $this->paginaAtual; } // Calcula o offset da consulta private function offset() { $offset = ($this->paginaAtual() - 1) * $this->limite; return $offset; } // Retorna o SQL para trabalhar posteriormente public function sql() { $sql = $this->sql . " LIMIT {$this->limite} OFFSET {$this->offset()} "; return $sql; } // Imprime a barra de navegaçao da paginaçao public function imprimeBarraNavegacao() { if($this->resultado() > 0) { echo '<div class="pagination" align=center>'; if ($this->paginaAtual() > 1) { echo " <a href='?" . $this->paginador . "=1" . $this->reconstruiQueryString($this->paginador) . "'>First</a> "; $anterior = $this->paginaAtual() - 1; echo " <a href='?" . $this->paginador . "=" . $anterior . $this->reconstruiQueryString($this->paginador) . "'>Previous</a> "; } for ($x = ($this->paginaAtual() - $this->quantidade); $x < (($this->paginaAtual() + $this->quantidade) + 1); $x++) { if (($x > 0) && ($x <= $this->paginasTotais())) { if ($x == $this->paginaAtual()) { echo " [<b>$x</b>] "; } else { echo " <a href='?" . $this->paginador . "=" . $x . $this->reconstruiQueryString($this->paginador) . "'>$x</a> "; } } } if ($this->paginaAtual() != $this->paginasTotais()) { $paginaProxima = $this->paginaAtual() + 1; echo " <a href='?" . $this->paginador . "=" . $paginaProxima . $this->reconstruiQueryString($this->paginador) . "'>Next</a> "; echo " <a href='?" . $this->paginador . "=" . $this->paginasTotais() . $this->reconstruiQueryString($this->paginador) . "'>Last</a> "; } echo '</div>'; } } // Monta os valores da Query String novamente public function reconstruiQueryString($valoresQueryString) { if (!empty($_SERVER['QUERY_STRING'])) { $partes = explode("&", $_SERVER['QUERY_STRING']); $novasPartes = array(); foreach ($partes as $val) { if (stristr($val, $valoresQueryString) == false) { array_push($novasPartes, $val); } } if (count($novasPartes) != 0) { $queryString = "&".implode("&", $novasPartes); } else { return false; } return $queryString; // nova string criada } else { return false; } } } // Voce pode criar outra forma de conexao se desejar class Conexao { private $_usuario; private $_senha; private $_dsn; public function __construct() { $this->defineUsuario(USUARIO); $this->defineSenha(SENHA); $this->defineDSN(DSN); $this->abreConexao(); } // Define o Usuario public function defineUsuario($usuario) { $this->_usuario = $usuario; } // Define a Senha public function defineSenha($senha) { $this->_senha = $senha; } // Define o DSN public function defineDSN($dns) { $this->_dsn = $dns; } // Abre a conexao sem retornar a mesma public function abreConexao() { $this->conexao = new PDO($this->_dsn, $this->_usuario, $this->_senha); $this->conexao->query("SET NAMES utf8"); } // Fecha a conexao public function fechaConexao() { $this->_conexao = null; } } ?> so os campos assinalados por (*) que sao precisos ser alterados neste ficheiro. depois nos ficheiros a qual queremos fazer a paginaçao colocamos estas linhas de codigo: <?php require_once ('../page.php'); ... echo'<table class="tabela">'; algum codigo para construir a tabela para mostrar dados, aqui fica a 1ª linha com os titulos $conexao = new Conexao(); $conexao = $conexao->conexao; $paginacao = new Paginacao_PDO(); $paginacao->sql = "SELECT * FROM project ORDER BY ID_PROJECT ASC"; // fazer a vossa query aqui $res = $conexao->query($paginacao->sql()); while($r = $res->fetch(PDO::FETCH_OBJ)) { echo '<tr> <td>'; print $r->campo1; // alterar os campos para os campos que quiserem da vossa tabela echo'</td> <td>'; print $r->campo2; // alterar os campos para os campos que quiserem da vossa tabela echo'</td>'; ... echo "</table>"; depois de fechada a tabela para inserir todos os resultados acrescentar esta linha: $paginacao->imprimeBarraNavegacao(); // atençao..esta linha fica fora do 'echo'!!!! espero poder ajuda..qualquer duvida é so dizer 👍 1 Report ...Join the dark side...and get a free cookie... Link to comment Share on other sites More sharing options...
julioaze Posted August 2, 2013 at 05:00 PM Report Share #520706 Posted August 2, 2013 at 05:00 PM (edited) Olá a todos! Sou do Brasil e novo neste fórum. Esta foi a única solução de paginação que funcionou para mim, porém em partes. Apesar do tópico ser antigo, gostaria de tirar uma dúvida. Quando abro a página que tem os dados a serem paginados, a seguinte mensagem é exibida: Notice: Undefined index: pag in ..\paginator.php on line 21 A url tem a seguinte aparência http://www.meusite.com/index.php?go=category&id=4 Entretanto, quando coloco o rato sobre os links da paginação, a url tem esta aparência: http://www.meusite.com/index.php?pag=1&go=category&id=4 quando deveria ser http://www.meusite.com/index.php?go=category&id=4&pag=1 O link de chamada para a página que contém os registros a serem paginados é semelhante a este: <a href="index.php?go=category&id=<?=$row['id_category']?>"> Alguém poderia me ajudar? Desde já muito agradecido! Edited August 2, 2013 at 08:02 PM by julioaze Link to comment Share on other sites More sharing options...
julioaze Posted August 6, 2013 at 01:40 PM Report Share #520965 Posted August 6, 2013 at 01:40 PM Ninguém? Link to comment Share on other sites More sharing options...
Rui Carlos Posted August 6, 2013 at 08:52 PM Report Share #521019 Posted August 6, 2013 at 08:52 PM Podes colocar aqui o código que estás a usar? Penso que o problema esteja no facto do URL não definir o parâmetro pag, pelo que deve ser suficiente colocar um if a definir um valor por omissão. Mas vendo é código é mais fácil de ajudar. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
nelsonr Posted August 6, 2013 at 08:56 PM Report Share #521022 Posted August 6, 2013 at 08:56 PM Entretanto, quando coloco o rato sobre os links da paginação, a url tem esta aparência: http://www.meusite.com/index.php?pag=1&go=category&id=4 quando deveria ser http://www.meusite.com/index.php?go=category&id=4&pag=1 Não me parece que a alteração da ordem dos parametros provoque algum problema Link to comment Share on other sites More sharing options...
julioaze Posted August 7, 2013 at 02:19 PM Report Share #521094 Posted August 7, 2013 at 02:19 PM Podes colocar aqui o código que estás a usar? Penso que o problema esteja no facto do URL não definir o parâmetro pag, pelo que deve ser suficiente colocar um if a definir um valor por omissão. Mas vendo é código é mais fácil de ajudar. Rui Carlos, o código da paginação é este mesmo acima e o código que chama a página dos produtos a serem paginados segue abaixo: <?php try{ $conn->beginTransaction(); //$query = "select c1.*, c2.id_category, c2.c_nome from tb_store c1 left join tb_category c2 on (c2.id_category=c1.id_category) group by c2.id_category"; $query = "SELECT * FROM tb_category where id_sub !=0 and c_tabela='tb_store'"; foreach ($conn->query($query) as $row){ ?> <li style="border-top:1px solid #ececec;"><a href="index.php?go=category&id=<?=$row['id_category']?>"><img src="thumb/thumb.php?file=../uploads/cat/<?=$row['c_imagem']?>&largura=213&altura=148" alt="img"><h5><?=$row['c_nome']?></h5></a></li><?php } $conn->commit(); }catch(PDOException $e){ echo $e->getMessage(); } ?> Quando abre a página dos produtos a serem paginados, os produtos são listados, mas aparece a seguinte mensagem Notice: Undefined index: pag in ..\paginator.php on line 21 Na página dos produtos aparece o link de paginação, mas se clicar nada acontece porque me parece que a ordem das variaveis está trocada, como postei acima. Segue o código da página de produtos <?php try { $id = $_GET['id']; $pag = 1; $conexao = new Conexao(); $conexao = $conexao->conexao; $paginacao = new Paginacao_PDO(); $paginacao->sql = "SELECT * FROM tb_store where id_category = ".$id." order by id_store desc"; $res = $conn->query($paginacao->sql()); $i=1; while($row = $res->fetch(PDO::FETCH_OBJ)) { $promocao = Valor($row->promo); $preco = Valor($row->preco); ?> <div class="row-fluid"> <div class="<?php echo ($i==1) ? "cart-products v2 first" : "cart-products v2";?>"> <div class="span3"> <figure class="product-container"> <img class="h-align" src="thumb/thumb.php?file=../uploads/store/<?=$row->imagem?>&medida=135" /> </figure> </div> <!--end span2--> <div class="span6"> <div class="product-desc-text"> <h4 class="product-description title v2"><?=$row->nome_produto?></h4> <div class="row-fluid"> <div class="span12"> <ul class="unstyled product-descriptions"> <li><?php echo limit($row->descricao, 175)?></li> </ul> </div><!-- end span12 --> </div> <!--end row-fluid--> </div> <!--end product-dex-text--> </div> <!--end span5--> <div class="span3"> <div class="product-total-container"> <h5 class="product-total text-center"><?php echo ($promocao > 0) ? $promocao : $preco; ?></h5> <a href="index.php?go=storedetail&id=<?php echo base64_encode($row->id_store)?>" class="btn-success btn-large">Ver</a> </div> <!--end product-total-container--> </div> <!--end span2--> </div> <!--end cart-products--> </div> <!--end row-fluid--> <?php $i++; } } catch(PDOException $e) { echo 'ERRO: ' . $e->getMessage(); } ?> E mais abaixo chamo o links de navegação <?php $paginacao->imprimeBarraNavegacao(); ?> Tudo funciona bem, a não ser os links de navegação. Se digito manualmente no navegador tudo funciona, o que me leva a crer que a ordem realmente está errada index.php?go=category&id=6&pag=2 // como deve ser index.php?pag=2&go=category&id=6 //como está nos links de navegação obrigado Link to comment Share on other sites More sharing options...
Rui Carlos Posted August 7, 2013 at 02:38 PM Report Share #521097 Posted August 7, 2013 at 02:38 PM Penso que o problema está aqui: public function __construct() { $this->solicitador = $_REQUEST["{$this->paginador}"]; } Originalmente estás a usar o link http://www.meusite.com/index.php?go=category&id=4, que não define nenhum valor para o parâmetro pag, ao qual tentas aceder no código que mostro em cima. Tens pelo menos duas hipóteses para resolver o problema: 1) Alterar o link inicial para http://www.meusite.com/index.php?go=category&id=4&pag=1 2) Alterar o código para definir um valor por omissão, o que devia ficar algo do género: public function __construct() { if(isset($_REQUEST[$this->paginador])) { $this->solicitador = $_REQUEST[$this->paginador]; } else { // se o parametro nao esta definido, atribui um valor por omissao $this->solicitador = 1; } } Tal como o nelsonr referiu, também me parece que a ordem dos parâmetros no URL é irrelevante. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
julioaze Posted August 9, 2013 at 01:45 PM Report Share #521350 Posted August 9, 2013 at 01:45 PM Obrigado pela resposta Rui Carlos, O problema do parâmetro era realmente porque estava vazio, mas a ordem dos parâmetros na URL ainda continua sendo um problema, pois ao aceder o link da paginação nada acontece. Já se eu coloco o link manualmente no navegador com o parâmetro 'pag' no final, tudo funciona bem. Link to comment Share on other sites More sharing options...
julioaze Posted August 9, 2013 at 02:25 PM Report Share #521358 Posted August 9, 2013 at 02:25 PM Fiz outro teste e descobri que a ordem realmente não importa. O que não funciona é o click nos links de paginação, já que inserindo o URL diretamente na barra de endereço do navegador, não importando a ordem, sempre funciona, mas no click do link não. Link to comment Share on other sites More sharing options...
julioaze Posted August 9, 2013 at 02:46 PM Report Share #521362 Posted August 9, 2013 at 02:46 PM Problema resolvido. Existia uma classe na div que recebe a paginação que impedia o click nos links. if($this->resultado() > 0) { echo '<div class="pagination" align=center>'; Esta classe estava em conflito com minha folha de estilos. Obrigado a todos pelas dicas! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now