Jump to content

Ajuda na query de pesquisa por Distrito


AndreLC
 Share

Recommended Posts

Boa tarde a todos,

Implementei umas dropdowns dinâmicas com jQuery de distritos, concelhos e freguesias para pesquisar mediadores para saber quais em que actuam em determinadas zonas.

O que acontece é que está tudo a funcionar normalmente se pesquisar por distrito juntamente com o concelho ou distrito, concelho e freguesia. O problema está quando pesquisa só por distrito não dá, porque como a dropdown é dinâmica, automaticamente que coloco o distrito, o concelho já está preenchido com "Seleccione" e a query em vez de ficar só:

$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['categoria']."' ";

está como:

$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['categoria']."' and concelho="Seleccione" ";

Aqui vai a parte de código que tenho:

     <?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){


							//Distritos
							if (!empty($_POST['distrito'])) {
								$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito']."' ";

							}

							//Concelhos
							if (!empty($_POST['concelho'])) {
								$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito ']."' AND concelho = '".$_POST['concelho']."' ";
							}

							//Freguesia
							if (!empty($_POST['freguesia'])) {
								$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito ']."' AND concelho = '".$_POST['concelho ']. "' AND freguesia = '".$_POST['freguesia']."' ";
							}


							 echo $pesq;

							 //(...)

		 }

Já tentei colocar:

//Distritos
if (!empty($_POST['distrito ']) && $_POST['concelho'] == 'Seleccione') {
	$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito ']."' ";

}

... mas sem sucesso.

Segue as imagens para que se torne mais explícito:

http://img705.imageshack.us/img705/2076/73929143.jpg

- Para preencher um Concelho terá primeiro que se preencher um Distrito e o mesmo para seleccionar a freguesia terá que se seleccionar um Concelho, inicialmente.

http://img535.imageshack.us/img535/5987/11443641.jpg

- Quando preencho o Distrito, automaticamente são carregados os respectivos Concelhos desse Distrito (e é aqui que queria fazer com que desse para pesquisar somente Distritos)

http://img190.imageshack.us/img190/3558/11951901.jpg

- O resultado da query com o concelho = 'Seleccione' que queria retirar.

Sendo assim, o que posso fazer para que também possa pesquisar somente por distrito e para que tudo esteja a funcionar normalmente?

Obrigado pela ajuda.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Se a tua correcção foi substituir o primeiro if por:

        if (!empty($_POST['distrito ']) && $_POST['concelho'] == 'Seleccione') {
                $pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito ']."' ";
                                                                        
        }

isso não vai servir porque ele continua a entrar no segundo if a substituir o que está em $pesq. Tens que meter um else  a seguir ao primeiro if.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Já tinha tentado e não estava a dar, mesmo com if - else if - else, mas agora assim funciona:

	//Distritos
	if (!empty($_POST['distrito']) && $_POST['concelho'] == 'Seleccione') {
			$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito']."' ";
                }

	//Concelhos
	else if (!empty($_POST['concelho'])) {
			$pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito']."' AND concelho = '".$_POST['concelho ']."' ";
	}

	//Freguesia
	if (!empty($_POST['freguesia'])) {
	                 $pesq = "SELECT * FROM mediadores WHERE distrito = '".$_POST['distrito']."' AND concelho = '".$_POST['concelho']. "' AND freguesia = '".$_POST['freguesia']."' ";
	}

mas será a melhor maneira? Obrigado.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

mais facil de ler :

$pesq = "SELECT * FROM mediadores ";
$sorters = array();
if (!empty($_POST['destrito']) && $_POST['destrito'] != "Seleccione") $sorters[] = "destrito = '{$_POST['destrito']}'";
if (!empty($_POST['concelho']) && $_POST['concelho'] != "Seleccione") $sorters[] = "concelho = '{$_POST['concelho']}'";
if (!empty($_POST['freguesia']) && $_POST['freguesia'] != "Seleccione") $sorters[] = "freguesia = '{$_POST['freguesia']}'";
if (count($sorters) > 0)
    $pesq .= " WHERE ".implode(" and ", $sorters);
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Mais fácil de ler e redução de linhas de código!

Obrigado HappyHippyHippo, interessante o uso de arrays para completar a query, estamos sempre a aprender  😁

Só uma pequena coisa agora, é que como a variável pesq está a seleccionar todos os mediadores se carregarmos no botão de pesquisa vai retornar todos os mediadores e eu não queria essa situação.

O que posso fazer para contornar este mesmo aspecto?

Obrigado.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Não. O que quero é ao carregar no botão de pesquisa visualizar-se a mensagem a dizer que deverá de seleccionar primeiro um distrito em vez de aparecerem todos os mediadores. Não é um 'não foram encontrados registos', porque isso já tenho:

$iqrPesquisa = mysql_query($pesq);
if(mysql_num_rows($iqrPesquisa) == 0){
                                    
       echo "<p>".'Não foram encontrados registos!'."</p>";
}

Aqui vai ver o número de resultados que a query retorna. Enquanto que ali a variável $pesq está inicializada com o "SELECT * FROM mediadores". Como procedo? Obrigado.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

O diferente antes do isset não estava a aparecer nada. Tirei o diferente, mas secalhar está mal.

Neste momento, o que está a acontecer é que aparece a mensagem e à mesma todos os mediadores. Tenho:

<?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){

$pesq = "SELECT * FROM mediadores ";
$sorters = array();
if (!empty($_POST['distrito']) && $_POST['distrito'] != "Seleccione o Distrito") $sorters[] = "distrito = '{$_POST['distrito']}'";
if (!empty($_POST['concelho']) && $_POST['concelho'] != "Seleccione") $sorters[] = "concelho = '{$_POST['concelho']}'";
if (!empty($_POST['freguesia']) && $_POST['freguesia'] != "Seleccione") $sorters[] = "freguesia = '{$_POST['freguesia']}'";
if (count($sorters) > 0)
	$pesq .= " WHERE ".implode(" AND ", $sorters);

if (isset($_POST['distrito']) || $_POST['distrito'] == "Seleccione o Distrito"){
            echo "<p>".'Por favor, seleccione um Distrito!'."</p>";
        }

 //echo $pesq;
 //(...)
}

Que estou a fazer mal? Obrigado.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Que estou a fazer mal? Obrigado.

acho que sim :

<?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){
if (!!isset($_POST['distrito']) || $_POST['distrito'] == "Seleccione o Distrito"){
$pesq = "SELECT * FROM mediadores ";
            echo "<p>".'Por favor, seleccione um Distrito!'."</p>";
        } else {
            $sorters = array();
    if (!empty($_POST['distrito']) && $_POST['distrito'] != "Seleccione o Distrito") $sorters[] = "distrito = '{$_POST['distrito']}'";
    if (!empty($_POST['concelho']) && $_POST['concelho'] != "Seleccione") $sorters[] = "concelho = '{$_POST['concelho']}'";
    if (!empty($_POST['freguesia']) && $_POST['freguesia'] != "Seleccione") $sorters[] = "freguesia = '{$_POST['freguesia']}'";
    if (count($sorters) > 0)
	$pesq .= " WHERE ".implode(" AND ", $sorters);

     echo $pesq;
        }
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Está ali um diferente a mais não está?

Mesmo assim não está a dar. Está à mesma a aparecer ambas as coisas o que é esquisito.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

desculpa ... mau copy-paste

<?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){
$pesq = "SELECT * FROM mediadores ";
if (!isset($_POST['distrito']) || $_POST['distrito'] == "Seleccione"){
            echo "<p>".'Por favor, seleccione um Distrito!'."</p>";
        } else {
            $sorters = array();
    if (!empty($_POST['distrito']) && $_POST['distrito'] != "Seleccione") $sorters[] = "distrito = '{$_POST['distrito']}'";
    if (!empty($_POST['concelho']) && $_POST['concelho'] != "Seleccione") $sorters[] = "concelho = '{$_POST['concelho']}'";
    if (!empty($_POST['freguesia']) && $_POST['freguesia'] != "Seleccione") $sorters[] = "freguesia = '{$_POST['freguesia']}'";
    if (count($sorters) > 0)
	$pesq .= " WHERE ".implode(" AND ", $sorters);

     echo $pesq;
        }
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Está na mesma, deve estar a escapar algo. O código que tenho:

<?php

if (isset($_POST['accao']) && $_POST['accao'] == 'pesquisar') {
    $pesq = "SELECT * FROM mediadores ";
    if (!isset($_POST['distrito']) || $_POST['distrito'] == "Seleccione o Distrito") {
        echo "<p>" . 'Por favor, seleccione um Distrito!' . "</p>";
    } else {
        $sorters = array();
        if (!empty($_POST['distrito']) && $_POST['distrito'] != "Seleccione")
            $sorters[] = "distrito = '{$_POST['distrito']}'";
        if (!empty($_POST['concelho']) && $_POST['concelho'] != "Seleccione")
            $sorters[] = "concelho = '{$_POST['concelho']}'";
        if (!empty($_POST['freguesia']) && $_POST['freguesia'] != "Seleccione")
            $sorters[] = "freguesia = '{$_POST['freguesia']}'";
        if (count($sorters) > 0)
            $pesq .= " WHERE " . implode(" AND ", $sorters);
        
        echo $pesq;
    }
    
    
    $_SESSION['pesq'] = $pesq;
    //echo "pesq: " .$pesq;
    $iqrPesquisa      = mysql_query($pesq);
    $registos_count   = mysql_num_rows($iqrPesquisa);
    $_SESSION['nreg'] = $registos_count;
    
    if (mysql_num_rows($iqrPesquisa) == 0) {
        echo "<br><br>";
        echo "<p id='pa1' align='center'>" . 'Não foram encontrados registos!' . "</p>";
        echo "<br><br>";
        echo "<br><br>";
    } else {
        $contador = 0;
        while ($linhaPesquisa = mysql_fetch_assoc($iqrPesquisa)) {
            $id        = $linhaPesquisa['id'];
            $nome      = $linhaPesquisa['nome'];
            $distrito  = $linhaPesquisa['distrito'];
            $concelho  = $linhaPesquisa['concelho'];
            $freguesia = $linhaPesquisa['freguesia'];
            $email     = $linhaPesquisa['email'];
            $telemovel = $linhaPesquisa['telemovel'];
            $texto     = $linhaPesquisa['texto'];
            $obras     = $linhaPesquisa['obras'];
            $foto      = $linhaPesquisa['foto'];
            $m         = $linhaPesquisa['m'];
            $contador++;
            if ($contador > $per_page)
                break;
            
            ?>
                
            <?php

            echo "<td width='150' height='160' align='right'><img src='images/mediadores/" . $linhaPesquisa['foto'] . "' alt='' width='130' height='160' /></td>";

            echo "<td width='203'>
                  <span class='link_pesquisa'>$nome</span><br><br>";

            echo "<a href=\"javascript:void(0)\" onclick=\"PopupCenter('mediador/$m', 'myPop1',400,470);\" target='_self'>
                            <span class='style2'>+ Ver Mais</span> 
                  </a>";

            echo "</td>";

        }
    }
}
?> 

O que está a faltar ou errado? Obrigado.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Todo o código que faz a query e processa o seu resultado e mostra no ecrã é executado sempre. Esse código tem que estar dentro do teu primeiro else. Em alternativa, dentro do primeiro if podes fazer exit() para terminar a execução do script, e deixar que o resto do código construa e processe a query.

Parece-me que precisas de mais alguma experiência a olhar para o código e a seguir a sua execução para perceber o que está mal. Neste caso salta logo à vista que se o distrito não tiver sido seleccionado, o código vai executar a query "SELECT * FROM mediadores " e mostrar o resultado na página.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

😉

<?php

if (isset($_POST['accao']) && $_POST['accao'] == 'pesquisar') {
    //$pesq = "SELECT * FROM mediadores ";  --> Isto não estava aqui a fazer nada
    if (!isset($_POST['distrito']) || $_POST['distrito'] == "Seleccione o Distrito") {
        echo "<p>" . 'Por favor, seleccione um Distrito!' . "</p>"; //Já fizemos tudo o que tínhamos a fazer, não vamos fazer query nenhuma
    } else {
        $pesq = "SELECT * FROM mediadores "; //Aqui sim é que precisamos de definir uma query
        $sorters = array();
        if (!empty($_POST['distrito']) && $_POST['distrito'] != "Seleccione")
            $sorters[] = "distrito = '{$_POST['distrito']}'";
        if (!empty($_POST['concelho']) && $_POST['concelho'] != "Seleccione")
            $sorters[] = "concelho = '{$_POST['concelho']}'";
        if (!empty($_POST['freguesia']) && $_POST['freguesia'] != "Seleccione")
            $sorters[] = "freguesia = '{$_POST['freguesia']}'";
        if (count($sorters) > 0)
            $pesq .= " WHERE " . implode(" AND ", $sorters);
        
        echo $pesq;
    //} Como só vamos fazer a query e processar os resultados neste caso, o else não pára aqui, continua até ao fim do código
    
    
    $_SESSION['pesq'] = $pesq;
    //echo "pesq: " .$pesq;
    $iqrPesquisa      = mysql_query($pesq);
    $registos_count   = mysql_num_rows($iqrPesquisa);
    $_SESSION['nreg'] = $registos_count;
    
    if (mysql_num_rows($iqrPesquisa) == 0) {
        echo "<br><br>";
        echo "<p id='pa1' align='center'>" . 'Não foram encontrados registos!' . "</p>";
        echo "<br><br>";
        echo "<br><br>";
    } else {
        $contador = 0;
        while ($linhaPesquisa = mysql_fetch_assoc($iqrPesquisa)) {
            $id        = $linhaPesquisa['id'];
            $nome      = $linhaPesquisa['nome'];
            $distrito  = $linhaPesquisa['distrito'];
            $concelho  = $linhaPesquisa['concelho'];
            $freguesia = $linhaPesquisa['freguesia'];
            $email     = $linhaPesquisa['email'];
            $telemovel = $linhaPesquisa['telemovel'];
            $texto     = $linhaPesquisa['texto'];
            $obras     = $linhaPesquisa['obras'];
            $foto      = $linhaPesquisa['foto'];
            $m         = $linhaPesquisa['m'];
            $contador++;
            if ($contador > $per_page)
                break;
            
            ?>
                
            <?php

            echo "<td width='150' height='160' align='right'><img src='images/mediadores/" . $linhaPesquisa['foto'] . "' alt='' width='130' height='160' /></td>";

            echo "<td width='203'>
                  <span class='link_pesquisa'>$nome</span><br><br>";

            echo "<a href=\"javascript:void(0)\" onclick=\"PopupCenter('mediador/$m', 'myPop1',400,470);\" target='_self'>
                            <span class='style2'>+ Ver Mais</span> 
                  </a>";

            echo "</td>";

        }
    }
} // O primeiro else fecha aqui
?>

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Já percebi aquilo que estavas a dizer. E eu sabia que era simples, mas tanta vez que se olha e mexe e volta-se a mexer que já  estava bloqueado. No entanto, também tinha tentado colocar no else, onde faz todo o sentido (como referiste), mas estava a fazer uma pequena confusão ali com a parte das variáveis que coloco em sessão.

Já está a funcionar, resolvido!

Obrigado pela ajuda pedrosorio e HappyHippyHippo  😉

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

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
 Share

×
×
  • 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.