Jump to content

Pesquisa Multipla


ivovicente

Recommended Posts

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

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

  • 1 month later...

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.