AndreLC Posted March 21, 2012 at 01:08 PM Report #444883 Posted March 21, 2012 at 01:08 PM 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.";
pedrosorio Posted March 21, 2012 at 01:48 PM Report #444884 Posted March 21, 2012 at 01:48 PM 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.
AndreLC Posted March 21, 2012 at 02:17 PM Author Report #444887 Posted March 21, 2012 at 02:17 PM 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.";
HappyHippyHippo Posted March 21, 2012 at 02:27 PM Report #444891 Posted March 21, 2012 at 02:27 PM 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 Portugol Plus
AndreLC Posted March 21, 2012 at 02:43 PM Author Report #444896 Posted March 21, 2012 at 02:43 PM 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.";
HappyHippyHippo Posted March 21, 2012 at 03:48 PM Report #444915 Posted March 21, 2012 at 03:48 PM queres filtrar por mais opções ? - é só adicionar mais elementos ao array sorter queres listar somente 10 ? - adiciona " limit 10" ao SQL, mas lembra-te que deverás ter alguma maneira de apresentar os restantes ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AndreLC Posted March 21, 2012 at 04:08 PM Author Report #444927 Posted March 21, 2012 at 04:08 PM 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.";
HappyHippyHippo Posted March 21, 2012 at 04:29 PM Report #444933 Posted March 21, 2012 at 04:29 PM verificas que o existe o valor $_POST['distrito'] e que este é diferente de "selecione" ... if (!isset($_POST['destrito']) || $_POST['destrito'] == "Seleccione") // escolher o distrito } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AndreLC Posted March 21, 2012 at 05:02 PM Author Report #444940 Posted March 21, 2012 at 05:02 PM 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.";
HappyHippyHippo Posted March 21, 2012 at 05:33 PM Report #444950 Posted March 21, 2012 at 05:33 PM 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 Portugol Plus
AndreLC Posted March 21, 2012 at 05:50 PM Author Report #444952 Posted March 21, 2012 at 05:50 PM 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.";
HappyHippyHippo Posted March 21, 2012 at 07:11 PM Report #444971 Posted March 21, 2012 at 07:11 PM 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 Portugol Plus
AndreLC Posted March 21, 2012 at 11:44 PM Author Report #445046 Posted March 21, 2012 at 11:44 PM 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.";
pedrosorio Posted March 22, 2012 at 03:19 AM Report #445071 Posted March 22, 2012 at 03:19 AM 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.
AndreLC Posted March 22, 2012 at 10:02 AM Author Report #445083 Posted March 22, 2012 at 10:02 AM Se fizer exit() não aparece nada! Não estou a perceber e só me falta isto. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
pedrosorio Posted March 22, 2012 at 10:34 AM Report #445086 Posted March 22, 2012 at 10:34 AM 😉 <?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.
AndreLC Posted March 22, 2012 at 11:25 AM Author Report #445094 Posted March 22, 2012 at 11:25 AM 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.";
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