1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

BREAK num IF...

Discussão em 'Web Development' iniciada por CMPT, 4 de Fevereiro de 2008. (Respostas: 7; Visualizações: 1035)

  1. CMPT

    CMPT Power Member

    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:
    PHP:
    /////////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":
    PHP:
    /////////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!!!;)
     
  2. zoidberg

    zoidberg Folding Member

    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.

    Código:
    [COLOR=#000000][COLOR=#007700]if(isset([/COLOR][COLOR=#0000bb]$userlogin[/COLOR][COLOR=#007700]))
    {
      if(empty([/COLOR][COLOR=#0000bb]$username[/COLOR][COLOR=#007700]))
      {
        [/COLOR][COLOR=#0000bb]header[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"Location: falhalogin.php?razao=vazio"[/COLOR][COLOR=#007700]);
      }
      else  
      [/COLOR][COLOR=#ff8000]//////////query a base de dados MySQL//////////
      //////////    resultado da query   ////////////
         
      [/COLOR][COLOR=#007700]if([/COLOR][COLOR=#0000bb]$resultusername [/COLOR][COLOR=#007700]!= [/COLOR][COLOR=#0000bb]1[/COLOR][COLOR=#007700])
      {
        [/COLOR][COLOR=#0000bb]header[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"Location: falhalogin.php?razao=utilizador_nao_existe"[/COLOR][COLOR=#007700]);
      }
    } [/COLOR][/COLOR]
    
     
  3. CMPT

    CMPT Power Member

    Não funciona...

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

    DanielGomes Power Member

    A seguir a um redireccionamento usando header() deves colocar sempre exit; para impedir a execução do restante código.
     
  5. anjo2

    anjo2 Power Member

    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.
     
  6. CMPT

    CMPT Power Member

    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 a seguir á primeira condiçao é feita uma query e a segunda condição vai ser influenciada pelo resultado dessa mesma query ;)
     
    Última edição pelo moderador: 5 de Fevereiro de 2008
  7. Slash

    Slash Power Member

    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
     
  8. K0mA

    K0mA Power Member

    Última edição: 4 de Fevereiro de 2008

Partilhar esta Página