ivovicente Posted November 20, 2007 at 11:37 AM Report Share #148847 Posted November 20, 2007 at 11:37 AM Olá pessoal da programação. Uma duvida para quem esta a começar nestes miandros. Usando o PHP sei fazer pesquisas, e aquele sistema de pesquisas multiplas. Agora o Problema é quando o resultado da pesquisa é superior por exemplo a 10, eu faço o código para fazer mais paginas de resultados e até aqui eu sei fazer isto tudo, falha-me quando eu clico para saltar para outra página o código para o MySQL não passa. Alguem tem alguma solução para fazer isto?? Agradeço a vossa colaboração Link to comment Share on other sites More sharing options...
skin Posted November 20, 2007 at 02:37 PM Report Share #148876 Posted November 20, 2007 at 02:37 PM Hmm, isso é relativamente fácil de se fazer. Mostra o código que tens. Our lives begin to end the day we become silent about things that matter - Martin Luther King Link to comment Share on other sites More sharing options...
softklin Posted November 20, 2007 at 09:10 PM Report Share #148997 Posted November 20, 2007 at 09:10 PM Tens que definir offsets para as páginas. Mais uma vez, tenho aqui um pequeno código que te pode ajudar 🙂 <?php //com offsets... $pagina = mysql_real_escape_string($_GET['pag']); //a pagina corrente, 1, 2, 3, etc $nreg = 60; //numero de registos por pagina $poffset = $nreg*$pagina; //nº registos por pagina x nº da pag = indica o começo da lista $lista = mysql_query("select * from users where nivel not in('1') limit $poffset, $nreg",$lig); $bg_color=0; while($l=mysql_fetch_assoc($lista)){ //BLA BLA BLA CONTEUDOS } //páginas if($pagina>=1) echo "<a href=\"?pag=".($pagina-1)."\">Página anterior</a>"; //if proximo offset retorna nada... //ou seja, se o proximo offset for vazio, nao há página a seguir... $proxoff = mysql_query("select * from users where nivel not in('1') limit ".($poffset+$nreg).", $nreg",$lig); if(mysql_num_rows($proxoff)>0) echo " <a href=\"?pag=".($pagina+1)."\">Página seguinte</a>"; ?> Mas olha que este não testei, nunca houve necessidade... se nao estiver correcto, a solução sera algo desse genero. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
ivovicente Posted January 2, 2008 at 08:09 PM Author Report Share #157486 Posted January 2, 2008 at 08:09 PM Viva Desde já peço desculpa pela demora a responder, mas só agora é que me vou mandar a sério ao projecto. O código parece-me bem e de facto funciona para o seguinte e o anterior numa pesquisa simples, mas o meu problema é o seguinte, tenho um formulário com vários selects, e sobre esses selects faz uma linha especifica em SQL, mas ao fazer o Seguinte essa linha especifica perde-se. Já tenho a página feita, deixo a seguir o codigo mais importante com comentários: # ESTE É O CODIGO DO FILTRO <form name="frm_filtro" action="ws_gerir_main.php?load=listarveiculos&filtro=ok" method="post"> <img src="imagens/filtro.gif" width="20" height="18" border="0" align="absmiddle" /> Filtrar Informação: <select name="opEstado" class="forms_text" style="width:150px"> <option value="0" selected="selected">- Estado -</option> <? $sql = mysql_query("SELECT * FROM tbl_estado ORDER BY desc_ ASC") or die ($err_query); while ($linha = mysql_fetch_array($sql)) { ($linha['id'] == $_POST['opEstado'])? print('<option value="'.$linha['id'].'" selected="selected">'.$linha['desc_'].'</option>'): print('<option value="'.$linha['id'].'">'.$linha['desc_'].'</option>'); } mysql_free_result($sql); ?> </select> <select name="opMarca" class="forms_text" onchange="F_showlist(this)" style="width:150px"> <option value="0" selected="selected">- Marca -</option> <? $sql = mysql_query("SELECT * FROM tbl_marca ORDER BY desc_ ASC") or die ($err_query); while ($linha = mysql_fetch_array($sql)) { ($linha['id'] == $_POST['opMarca'])? print('<option value="'.$linha['id'].'" selected="selected">'.$linha['desc_'].'</option>'): print('<option value="'.$linha['id'].'">'.$linha['desc_'].'</option>'); } mysql_free_result($sql); ?> </select> <select name="opModelo" class="forms_text" style="width:150px"> <option value="0" selected="selected">- Modelos -</option> <? $sql = mysql_query("SELECT * FROM tbl_modelo ORDER BY desc_ ASC") or die ($err_query); while ($linha = mysql_fetch_array($sql)) { ($linha['id'] == $_POST['opModelo'])? print('<option value="'.$linha['id'].'" marca="'.$linha['id_marca'].'" style="display:list-item" selected="selected">'.$linha['desc_'].'</option>'): print('<option value="'.$linha['id'].'" marca="'.$linha['id_marca'].'" style="display:none">'.$linha['desc_'].'</option>'); } mysql_free_result($sql); ?> </select> <span class="texto_topicos"> <select name="opCategoria" class="forms_text" style="width:150px"> <option value="0" selected="selected">- Categoria -</option> <? $sql = mysql_query("SELECT * FROM tbl_categoria ORDER BY desc_ ASC") or die ($err_query); while ($linha = mysql_fetch_array($sql)) { ($linha['id'] == $_POST['opCategoria'])? print('<option value="'.$linha['id'].'" selected="selected">'.$linha['desc_'].'</option>'): print('<option value="'.$linha['id'].'">'.$linha['desc_'].'</option>'); } mysql_free_result($sql); ?> </select> </span> <span class="aviso"> <input name="Submit" type="submit" class="forms_btns" value="Filtrar »" onclick="_validarVeiculo()" /> </span> <hr noshade="noshade" color="#666666" size="1" /> </form> # AQUI ESTOU A VALIDAR SE VOU MOSTRAR OS ULTIMOS OU POR FILTRO if ($_GET["filtro"] != "ok") { # Carrega os Ultimos 8 Veiculos Inseridos echo "Lista dos últimos 8 veiculos adicionados"; $sql = mysql_query("SELECT * FROM tbl_veiculo ORDER BY id DESC LIMIT 0,8") or die ($err_query); } else { # SQL com Filtro $vpage = mysql_real_escape_string($_GET['pag']); (!isset($vpage)) ? ($vpage = 1) : ($vpage = $_GET['pag']); $maxPag = 10; # Numero de Resultados por Página $inicioPag = ($vpage * $maxPag); # Conta para iniciar a lista $auxSQL = array(); # Array para guardar o codigo complementar da pesquisa # Cada Linha seguinte gera codigo SQL para a pesquisa if ($_POST['opEstado'] > 0) { $auxSQL[] = "id_estado=".$_POST['opEstado'].""; } if ($_POST['opMarca'] > 0) { $auxSQL[] = "id_marca=".$_POST['opMarca'].""; } if ($_POST['opModelo'] > 0) { $auxSQL[] = "id_modelo=".$_POST['opModelo'].""; } if ($_POST['opCategoria'] > 0) { $auxSQL[] = "id_categoria=".$_POST['opCategoria'].""; } if (count($auxSQL) != 0) { if (count($auxSQL)) { $SQLAddCode .= ' WHERE '. join(' AND ', $auxSQL); } $SQLAddCode .= " LIMIT $inicioPag, $maxPag"; # Executa o Filtro $sql = mysql_query("SELECT * FROM tbl_veiculo".$SQLAddCode) or die ($err_query); $totalResultados = mysql_num_rows($sql); if ($totalResultados != 0) { ($totalResultados > 1) ? print("<span class=\"cor_sim\">Listagem utilizando filtros - Foram encontrados ( ".$totalResultados." ) resultados</span>") : print("<span class=\"cor_sim\">Listagem utilizando filtros - Foi encontrado ( 1 ) resultado</span>") ; } else echo "<span class=\"cor_nao\">Não foram encontrados resultados para a pesquisa</span>"; } else echo "<span class=\"cor_nao\">Atenção: São necessários argumentos para efectuar o FILTRO</span>"; } ?> Eu pensei que podia deixar as pessoas a indicar quantos resultados queriam ver, mas eu pretendia desenvolver isto para empresas com uma grande quantidade de dados, e por isso queria meter a possibilidade de ter mais páginas disponiveis com o filtro activo. Alguem tem ideias de como posso fazer isso?? Um Abraço Link to comment Share on other sites More sharing options...
Guest id194 Posted January 3, 2008 at 03:24 AM Report Share #157560 Posted January 3, 2008 at 03:24 AM Há uns tempos disponibilizei aqui um simples snippet de código sobre paginação. Não envolve SQL, mas o principio é o mesmo, tens um inicio e um fim (ou offset). E é basicamente isso que tens de fazer, quando o utilizador escolhe a página seguinte, o novo inicio será o fim do anterior e o novo fim será o fim do anterior mais o número de resultados que queres apresentar por página. Vê o exemplo de paginação que criei que é bem simples de entender e está comentado. Entende-o porque o principio é o mesmo e é praticamente isso que tu queres fazer (se eu percebi bem a tua dúvida). Exemplo de paginação: http://www.portugal-a-programar.pt/index.php?showtopic=3599 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