Ir para o conteúdo
joaogomes

A mensagem de erro que mostra é a errada para a situação

Mensagens Recomendadas

joaogomes    1
joaogomes

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


Link para a mensagem
Partilhar noutros sites
brunoais    69
brunoais

1º Falha de segurança enorme. Usas os dados diretamente do utilizador. Perigo enorme de SQL injection.

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

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!!!!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
joaogomes    1
joaogomes

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


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

$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 ...

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade