rogarfil 2 Denunciar post Postado Janeiro 1, 2016 Prezados Colegas, Feliz 2016! Paz, Amor, Realizações... Trata-se do seguinte, tenho uma página search.php onde realizo uma busca por seleção (Cargo, Escolaridade, Sexo, Cidade, Idade Mínima e Idade Máxima), estes valores já estão cadastrado no BD Mysql. Quando realizo esta busca, com todas as opções que desejo e da maneira como desejo, tudo ocorre perfeitamente como programado, obtenho os resultados esperados. Mostrando inclusive a quantidade de páginas correspondentes a busca feita. Na minha primeira query (echo $sql;) o resultado vem assim, pelas opções escolhidas (estou optando por tudo para melhor visualizarem): SELECT * FROM tab_candidato WHERE `cargo_pretendido` = 'Analista e Desenvolvedor de Sistemas' AND `nivel` = 'Ensino Superior' AND `sexo` = 'Masculino' AND `cidade` = 'Palmas' AND `idade` >= '25' AND `idade` <= '55' ORDER BY nome ASC LIMIT 0,10 Na minha segunda query (echo $strCount;) o resultado vem assim: SELECT * FROM tab_candidato WHERE `cargo_pretendido` = 'Analista e Desenvolvedor de Sistemas' AND `nivel` = 'Ensino Superior' AND `sexo` = 'Masculino' AND `cidade` = 'Palmas' AND `idade` >= '25' AND `idade` <= '55' ORDER BY nome ASC O total contado está correto (echo $total;) e mostra, o valor: 19 -> total de páginas 3. O problema é quando dou o clique para as próximas páginas, elas me retornam vazia, ou seja, debugando posso perceber que a <div> correspondente não recebe os valores. <?php ini_set('display_errors', true); error_reporting(E_ALL); include 'conexao.php'; ?> <!-- GERAL --> <div class="pg_candidatos"> <!-- FILTRO DE BUSCA --> <fieldset> <legend>Selecione as Opções da Pesquisa</legend> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <ul> <!-- CARGO --> <li> <select name="comboCargo"> <option value="0" selected="selected">Cargo</option> <?php $qrCargo = mysqli_query($dados, "SELECT DISTINCT cargo_pretendido FROM tab_candidato ORDER BY cargo_pretendido ASC") or die(mysqli_error()); while ($linhaCargo = mysqli_fetch_array($qrCargo)) { ?> <option value="<?php echo $linhaCargo['cargo_pretendido']; ?>"> <?php echo $linhaCargo['cargo_pretendido']; ?> </option> <?php } ?> </select> </li> <!-- ESCOLARIDADE --> <li> <select name="comboNivel"> <option value="0" selected="selected">Escolaridade</option> <?php $qrNivel = mysqli_query($dados, "SELECT DISTINCT nivel FROM tab_candidato ORDER BY nivel ASC") or die(mysqli_error()); while ($linhaNivel = mysqli_fetch_array($qrNivel)) { ?> <option value="<?php echo $linhaNivel['nivel']; ?>"> <?php echo $linhaNivel['nivel']; ?> </option> <?php } ?> </select> </li> <!-- SEXO --> <li> <select name="comboSexo"> <option value="0" selected="selected">Sexo</option> <?php $qrSexo = mysqli_query($dados, "SELECT DISTINCT sexo FROM tab_candidato ORDER BY sexo ASC") or die(mysqli_error()); while ($linhaSexo = mysqli_fetch_array($qrSexo)) { ?> <option value="<?php echo $linhaSexo['sexo']; ?>"> <?php echo $linhaSexo['sexo']; ?> </option> <?php } ?> </select> </li> <!-- CIDADE --> <li> <select name="comboCidade"> <option value="0" selected="selected">Cidade</option> <?php $qrCidade = mysqli_query($dados, "SELECT DISTINCT cidade FROM tab_candidato ORDER BY cidade ASC") or die(mysqli_error()); while ($linhaCidade = mysqli_fetch_array($qrCidade)) { ?> <option value="<?php echo $linhaCidade['cidade']; ?>"> <?php echo $linhaCidade['cidade']; ?> </option> <?php } ?> </select> </li> <!-- IDADE MÍNIMA --> <li> <select name="comboIdadeMin"> <option value="0" selected="selected">Idade Mínima</option> <?php $qrIdadeMin = mysqli_query($dados, "SELECT DISTINCT idade FROM tab_candidato ORDER BY idade ASC") or die(mysqli_error()); while ($linhaIdadeMin = mysqli_fetch_array($qrIdadeMin)) { ?> <option value="<?php echo $linhaIdadeMin['idade']; ?>"> <?php echo $linhaIdadeMin['idade']; ?> </option> <?php } ?> </select> </li> <!-- IDADE MÁXIMA --> <li> <select name="comboIdadeMax"> <option value="0" selected="selected">Idade Máxima</option> <?php $qrIdadeMax = mysqli_query($dados, "SELECT DISTINCT idade FROM tab_candidato ORDER BY idade ASC") or die(mysqli_error()); while ($linhaIdadeMax = mysqli_fetch_array($qrIdadeMax)) { ?> <option value="<?php echo $linhaIdadeMax['idade']; ?>"> <?php echo $linhaIdadeMax['idade']; ?> </option> <?php } ?> </select> </li> <div class="limpar"></div> </ul> <div class="limpar"></div> <div class="bt_pesquisar"><input type="submit" value="Buscar" /></div> <div class="limpar"></div> </form> </fieldset> <!-- /FILTRO DE BUSCA --> <!-- RETORNO DA BUSCA --> <fieldset> <legend>Resultado da Pesquisa</legend> <?php $maximo = 10; $pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1; $inicio = ($maximo * $pagina) - $maximo; if ($_SERVER['REQUEST_METHOD'] == "POST") { $where = array(); $cargo = $_REQUEST['comboCargo']; $nivel = $_REQUEST['comboNivel']; $sexo = $_REQUEST['comboSexo']; $cidade = $_REQUEST['comboCidade']; $idademin = $_REQUEST['comboIdadeMin']; $idademax = $_REQUEST['comboIdadeMax']; if ( $cargo ) { $where[] = " `cargo_pretendido` = '{$cargo}' "; } if ( $nivel ) { $where[] = " `nivel` = '{$nivel}' "; } if ( $sexo ) { $where[] = " `sexo` = '{$sexo}' "; } if ( $cidade ) { $where[] = " `cidade` = '{$cidade}' "; } if ( $idademin ) { $where[] = " `idade` >= '{$idademin}' "; } if ( $idademax ) { $where[] = " `idade` <= '{$idademax}' "; } $sql = "SELECT * FROM tab_candidato"; if( sizeof( $where ) ) $sql .= ' WHERE '.implode( ' AND ', $where ).' ORDER BY nome ASC LIMIT '.$inicio.','.$maximo; echo $sql; echo '<br />'; $query = mysqli_query($dados, $sql) or die( mysqli_error() ); $contar = mysqli_num_rows($query); if ($contar == 0) { echo "<p>Não foram encontrados registros!</p>"; } else { while ($rs = mysqli_fetch_array($query)) { ?> <div class="bx_resultado"> <div class="campo_result1"><?php echo $rs['nome']; ?></div> <div class="campo_result2"><?php echo $rs['email']; ?></div> <div class="campo_result3"><?php echo $rs['celular']; ?></div> <div class="campo_result4"><a href="visualizar.php?id=<?php echo $rs['id']; ?>"><img title="Clique visualizar" alt="Clique visualizar" src="images/ico_pesq.png"></a></div> <div class="limpar"></div> </div> <div class="limpar"></div> <?php }//while }//else $strCount = "SELECT * FROM tab_candidato"; if( sizeof( $where ) ) $strCount .= ' WHERE '.implode( ' AND ', $where ).' ORDER BY nome ASC'; echo $strCount; echo '<br />'; $qrCount = mysqli_query($dados, $strCount) or die( mysqli_error() ); $total = mysqli_num_rows($qrCount); echo $total; echo '<br />'; $pgs = ceil($total / $maximo); $menos = $pagina - 1; $mais = $pagina + 1; if ($pgs > 1){ echo "<br />"; // Mostragem de pagina if ($menos > 0) { echo "<a href=".$_SERVER['PHP_SELF']."?pagina=$menos>Anterior</a> "; } // Listando as paginas for ($i = 1; $i <= $pgs; $i++) { if ($i != $pagina) { echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".$i.">$i</a> | "; } else { echo " <strong>".$i."</strong> | "; } } if ($mais <= $pgs) { echo "<a href=".$_SERVER['PHP_SELF']."?pagina=$mais>Próxima</a> "; } } }//if ?> </fieldset> <!-- /RETORNO DA BUSCA --> </div> <!-- /GERAL --> Já tentei várias formas de paginação e não obtive nenhuma solução. E não consigo deparar com o que estou errando. A tabela é única com todos os campos que preciso. Agradeço desde já a atenção dispensada, Rogarfil Compartilhar este post Link para o post Compartilhar em outros sites
Paulo de Tarso F. M. 24 Denunciar post Postado Janeiro 3, 2016 Aqui: ORDER BY nome ASC LIMIT 0,10 No lugar desse zero você precisa informar qual é o número inicial... Desse jeito você está sempre pegando os 10 primeiros registros, teria que ser algo mais ou menos assim: $pagina = 1; // Página padrão: primeira página $inicio = 0; // Início do LIMIT da consulta $qde_registros = 20; // Registros por página // Página if(!empty($_GET['pagina'])) { $pagina = $_GET['pagina']; if(is_numeric($pagina)) { $inicio = ($pagina - 1) * $qde_registros; } } $sql = " SELECT * FROM tab_candidato WHERE `cargo_pretendido` = 'Analista e Desenvolvedor de Sistemas' AND `nivel` = 'Ensino Superior' AND `sexo` = 'Masculino' AND `cidade` = 'Palmas' AND `idade` >= '25' AND `idade` <= '55' ORDER BY nome ASC LIMIT ".$inicio.", ".$qde_registros; [continua...] Entendeu a ideia? Outra coisa, não sei se essa forma de identificar quantos registros existem na tabela com as condições informadas é a melhor forma de se fazer, eu inclusive recentemente estava pesquisando sobre como fazer isso e basicamente existem duas formas, uma é fazendo um SELECT COUNT(*) ou é utilizando o SQL_CALC_FOUND_ROWS. Mas o intuito não é falar sobre isso aqui, mas já que toquei no assunto, seguem alguns links para você dar uma olhada: http://www.marcosborges.com/blog/2010/08/13/select-sql_calc_found_rows-no-mysql/ http://stackoverflow.com/questions/186588/which-is-fastest-select-sql-calc-found-rows-from-table-or-select-count https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/ A discussão vai longe, tem gente que fala que é melhor, tem gente que não... Compartilhar este post Link para o post Compartilhar em outros sites
rogarfil 2 Denunciar post Postado Janeiro 3, 2016 Prezado Paulo de Tarso F. M., Infelizmente segui a suas orientações e meus resultados continuam o mesmo, ou seja, realiza a busca por filtro perfeitamente e me apresenta os resultados desejados, mostrando até mesmo a quantidade de páginas pela filtragem. Acontece que minha consulta na query é por array e é este array que não passa para a página seguinte, os dados não chegam na segunda página. Abraços, Rogarfil Compartilhar este post Link para o post Compartilhar em outros sites
emerson.barreiro 0 Denunciar post Postado Junho 19, 2016 boa tarde rogarfil ! eu sou novo no forum, vi tua duvida e eu estou tendo o mesmo problema, gostaria de saber se tiveste alguma solucao. Compartilhar este post Link para o post Compartilhar em outros sites
emerson.barreiro 0 Denunciar post Postado Junho 19, 2016 <?php $maximo = 3; $pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1; $inicio = ($maximo * $pagina) - $maximo; if( $_SERVER['REQUEST_METHOD']=='POST' ) { $where = Array(); $n_processo = $_REQUEST['n_processo']; $relator = $_REQUEST['relator']; $especie = htmlentities($_REQUEST['especie'],ENT_QUOTES); $seccao = htmlentities($_REQUEST['seccao'],ENT_QUOTES); $data_inicio = $_REQUEST['data_inicio']; $data_fim = $_REQUEST['data_fim']; if( $n_processo ) { $where[] = " `processo` = '{$n_processo}'"; } if( $relator ) { $where[] = " `relator` = '{$relator}'"; } if( $especie ) { $where[] = "`especie` = '{$especie}'"; } if( $seccao ) { $where[] = " `seccao` = '{$seccao}'"; } if ( $data_inicio ) { $where[] = " `data`>= '{$data_inicio}' "; } if ( $data_fim ) { $where[] = " `data` <= '{$data_fim}' "; } $sql = "SELECT * FROM jurisprudencia"; if( sizeof( $where ) ) $sql .= ' WHERE '.implode( ' AND ',$where ).'LIMIT '.$inicio.','.$maximo; $query = mysql_query($sql) or die( mysql_error() ); $contar = mysql_num_rows($query); if ($contar == 0) { echo "<h2>Não foram Encontrados Registros!</h2>"; }else { if ($contar == 1) { echo "<h2>1 Registro Encontrado</h2>"; } if ($contar > 1) { echo "<h2>$contar Registros Encontrados</h2>"; } ?> <table class="data"> <tr class="data"> <th class="data" width="85" align="center"><label>Processo</label></th> <th class="data" width="130" align="center"><label>Relator</label></th> <th class="data" width="100" align="center"><label>Espécie</label></th> <th class="data" width="80" align="center"><label>Secção</label></th> <th class="data" width="80" align="center"><label>Data de Entrada</label></th> </tr> <?php while ($rs = mysql_fetch_array($query)) { extract($rs); ?> <tr class="data"> <td align="center" class="data"> <a href="arquivos/jurisprudencia/<?php echo $rs['acordao'] ?>"><?php echo $rs['processo']; ?></a> </td> <td align="center" class="data"> <?php echo $rs['relator']; ?> </td> <td align="center" class="data"> <?php echo $rs['especie']; ?> </td> <td align="center" class="data"> <?php echo $rs['seccao']; ?> </td> <td align="center" class="data"> <?php echo $rs['data']; ?> </td> </tr> <?php }} $strCount = "SELECT * FROM jurisprudencia"; if( sizeof( $where ) ) $strCount .= ' WHERE '.implode( ' AND ', $where ); $qrCount = mysql_query($strCount) or die( mysql_error() ); $total = mysql_num_rows($qrCount); $pgs = ceil($total / $maximo); $menos = $pagina - 1; $mais = $pagina + 1; // Mostragem de pagina if ($menos > 0) { echo "<a href=".$_SERVER['PHP_SELF']."?pagina=$menos>Anterior</a> "; } // Listando as paginas for ($i = 1; $i <= $pgs; $i++) { if ($i != $pagina) { echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".$i.">$i</a> | "; } else { echo " <strong>".$i."</strong> | "; } } if ($mais <= $pgs) { echo "<a href=".$_SERVER['PHP_SELF']."?pagina=$mais>Próxima</a> "; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites