• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ivovicente

Pesquisa Multipla

5 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, isso é relativamente fácil de se fazer. Mostra o código que tens.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora