View Full Version : BREAK num IF...


CMPT
04-02-2008, 15:23
oi ppl!!!

Estou a desenvolver um website em php para um cliente meu, e no meio de uma validação de inicio de sessão, deparo-me com uma situação caricata, a necessidade de usar um BREAK num IF para que a coisa funcione como eu quero.
Fui a php.net pesquisar sobre BREAK e o que la apareceu: break cancela a execução do comando for, foreach, while, do-while ou switch atual.".

Por exemplo:

/////////supomos que o formulario foi iniciado $userlogin////////
///////// a variavel $username está vazia ////////////////

if(isset($userlogin))
{
if(empty($username))
{
header("Location: falhalogin.php?razao=vazio");
}

//////////query a base de dados MySQL//////////
////////// resultado da query ////////////

if($resultusername != 1)
{
header("Location: falhalogin.php?razao=utilizador_nao_existe");
}
}
O resultado disto será um redireccionamento para falhalogin.php?razao=utilizador_nao_existe!!
Não esta incorrecto, mas se a variavel $username esta vazia, era suposto redireccionar para falhalogin.php?razao=vazio na primeira condição "EMPTY"?

Mas caso um BREAK seja utilizado na primeira condição "EMPTY":

/////////supomos que o formulario foi iniciado $userlogin////////
///////// a variavel $username está vazia ////////////////

if(isset($userlogin))
{
if(empty($username))
{
header("Location: falhalogin.php?razao=vazio");
break;
}

//////////query a base de dados MySQL//////////
////////// resultado da query ////////////

if($resultusername != 1)
{
header("Location: falhalogin.php?razao=utilizador_nao_existe");
}
}
Já funciona correctamente... a variavel $username está vazia, e quando isso se verifica com a função EMPTY redirecciona correctamente para falhalogin.php?razao=vazio.

Gostaria que comentassem sobre este assunto, e se a estrutura que uso nesse exemplo está incorrecta o não é segura, que me digam uma solução mais viável.

ABRAÇO!!!;)

zoidberg
04-02-2008, 15:34
coloca um else antes do 2º if, ou então ele vai fazer as duas condições visto que ao estar vazio também é diferente de 1.

if(isset($userlogin))
{
if(empty($username))
{
header("Location: falhalogin.php?razao=vazio");
}
else
//////////query a base de dados MySQL//////////
////////// resultado da query ////////////

if($resultusername != 1)
{
header("Location: falhalogin.php?razao=utilizador_nao_existe");
}
}

CMPT
04-02-2008, 15:48
Não funciona...

Esperimenta tirar os comentarios e meter qualquer especie de codigo so para simular a query à DB tipo: "$aaa = 1;"

DanielGomes
04-02-2008, 16:06
A seguir a um redireccionamento usando header() deves colocar sempre exit; para impedir a execução do restante código.

anjo2
04-02-2008, 16:12
porque não utilizas um elseif no segundo? Pelo que percebi, se for a primeira, já não vai à segunda, sendo assim o elseif funciona.

CMPT
04-02-2008, 16:15
Era mesmo de uma resposta dessas que queria ter ;);)
muito util mesmo, fico muito grato :)

vai dar um jeitao essa função

OBRIGADA PESSOAL :)

porque não utilizas um elseif no segundo? Pelo que percebi, se for a primeira, já não vai à segunda, sendo assim o elseif funciona.

Porque a seguir á primeira condiçao é feita uma query e a segunda condição vai ser influenciada pelo resultado dessa mesma query ;)

Slash
04-02-2008, 20:11
a seguir a um header("Location: ....") não faz qualquer sentido ter código que possa ser executado, um break poderá causar problemas com o código que vem a seguir, pelo que nesses casos costumo usar um exit; logo a seguir ao header, garantindo aí que termina a execução desse bocado de código..

É apenas uma sugestão

Nuno

K0mA
04-02-2008, 21:22
Dizem que não faz sentido usar um break dentro de um IF (http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_23012876.html)

break ends execution of the current for, foreach, while, do-while or switch structure.
fonte: http://pt2.php.net/break (http://pt2.php.net/break)