joaogomes 0 Denunciar mensagem Publicado 30 de Dezembro de 2011 Bom dia. Tenho o seguinte código em PHP: <form class="pesquisa-form" method="post" action="votos.php" > Número da freguesia: <input type=text name="NFreg"> <input type="submit" name="PFreg" value="Pesquisar" /> </form> <?php $ligacao = mysql_connect("localhost", "root", "") or die ("problemas na ligação ao MySQL"); mysql_select_db("eleicao",$ligacao); $sql = mysql_query("select numero, nome, num_votantes from freguesia where numero = ".$_POST["NFreg"]); if ($sql) { while ($registo = mysql_fetch_array($sql)) { echo "<div class='legenda'>"; echo "<label>Número da freguesia:</label> ".$registo["numero"]." <br />"; echo "<label>Nome da freguesia:</label> ".$registo["nome"]." <br />"; echo "<label>Número de votantes:</label> ".$registo["num_votantes"]." votantes <br />"; echo "</div>"; } } elseif (!$sql) { echo "<br/>"; echo "Esse número de freguesia é inexistente!"; echo "<br/>"; } else { echo "<br/>"; echo "Tem de escrever o número da freguesia!"; echo "<br/>"; } ?> O problema é que quando não introduzo nenhum dado para pesquisar, não me aparece a mensagem "Tem de escrever o número da freguesia!" mas antes "Esse número de freguesia é inexistente!". E quando introduzo um dado para pesquisar que não está na base de dados não aparece nenhuma mensagem. Podem ajudar, por favor? Obrigado. -- (brunoais): Titulo alterado Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
brunoais 67 Denunciar mensagem Publicado 30 de Dezembro de 2011 1º Falha de segurança enorme. Usas os dados diretamente do utilizador. Perigo enorme de SQL injection. 2º Se $sql == TRUE ele mostra os vários dados (corretamente) ou 0 dados (se não existirem dados na tabela) . Se $sql == FALSE existe um erro de sintaxe na query sql <=> o utilizador não inseriu dados. Se $sql != TRUE && $sql != FALSE (nunca acontece) ele mostra a mensagem de erro de dados não inseridos. Vê se consegues perceber como corrigir. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
pmg 96 Denunciar mensagem Publicado 30 de Dezembro de 2011 Bom dia. Tenho o seguinte código em PHP: if ($sql) { } elseif (!$sql) { } else { } O valor de $sql ou é verdade ou não é. Não há outro else. O que tu queres é a) verificar se o $_POST['NFreg'] vem preenchido pelo utilizador executar o sql e verificar se houve erros c) se nao houve erros, usa o mysql_num_rows() para saber se ha resultados ou nao d) consoante o numero de resultados: ou os apresentas com o loop while ou apresentas a mensagem de "Freguesia nao encontrada" Atencao as injeccoes de SQL!!!!! What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
joaogomes 0 Denunciar mensagem Publicado 30 de Dezembro de 2011 Obrigado. Já consegui resolver. <form class="pesquisa-form" method="post" action="votos.php" > Número da freguesia: <input type="text" name="NFreg"> <input type="submit" name="PFreg" value="Pesquisar" /> </form> <?php $ligacao = mysql_connect("localhost", "root", "") or die ("problemas na ligação ao MySQL"); mysql_select_db("eleicao",$ligacao); $sql = mysql_query("select numero, nome, num_votantes from freguesia where numero = ".$_POST["NFreg"]); if ($_POST['NFreg'] == "" or !is_numeric($_POST['NFreg'])) { echo "<br />"; echo "Tem de escrever o número da freguesia para poder pesquisar!"; echo "<br />"; } elseif (mysql_num_rows($sql) == 0 ) { echo "<br />"; echo "Esse número de freguesia é inexistente!"; echo "<br />"; } else { while ($registo = mysql_fetch_array($sql)) { echo "<div class='legenda'>"; echo "<label>Número da freguesia:</label> ".$registo["numero"]." <br />"; echo "<label>Nome da freguesia:</label> ".$registo["nome"]." <br />"; echo "<label>Número de votantes:</label> ".$registo["num_votantes"]." votantes <br />"; echo "</div>"; } } ?> Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
pmg 96 Denunciar mensagem Publicado 30 de Dezembro de 2011 $sql = mysql_query("select numero, nome, num_votantes from freguesia where numero = ".$_POST["NFreg"]); if ($_POST['NFreg'] == "" or !is_numeric($_POST['NFreg'])) Era melhor trocar a ordem destas duas instrucoes Da maneira que tens, vais executar o sql qualquer que seja o input (incluindo injeccoes de SQL). Obviamente que tens que reestruturar o resto dos ifs ... What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites