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

Erro em PHP

Discussão em 'Web Development' iniciada por ninita, 11 de Fevereiro de 2008. (Respostas: 3; Visualizações: 750)

  1. ninita

    ninita Power Member

    Boas tardes

    Estou a fazer uma base de dados como experiência mas não consigo entrar através do login que criei para ter o acesso a determinada informação. Os warnings que me dão são os seguintes:
    --> Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programas\xampp\htdocs\Disprova\login\tratalogin.php on line 19
    -->Warning: Cannot modify header information - headers already sent by (output started at C:\Programas\xampp\htdocs\Disprova\login\tratalogin.php:19) in C:\Programas\xampp\htdocs\Disprova\login\tratalogin.php on line 37.

    Estou farte de andar às voltas mas não consigo saber de onde vem este erro. Utilizei o mesmo código num outro trabalho e funcionou, não sei porque é que neste não estou a conseguir. Podem me ajudar?
    Se calhar é melhor juntar o código aqui, vai ficar um pouco grande mas para perceber o erro se calhar torna-se necessário. Aqui vai:
    <?php session_start();
    include '../ligar_a_bd.php';
    //frases de encriptação
    $frase = "disprova";
    // Inicio da Validação
    // Verificação de inserção de username
    if (isset($_POST['username']))
    $username = $_POST['username'];
    // Verificação de inserção de password
    if (isset($_POST['password']))
    $pass = $_POST['password'];
    // Fim da validação
    $user_valido = "
    SELECT *
    FROM login
    WHERE log_user = '$username'
    AND log_pass = '".md5($pass.$frase)."'";
    $resultado = mysql_query($user_valido);
    $existe = mysql_fetch_array($resultado);
    // Verificação de existência
    if ($existe['log_nivel'] == '1' && $existe['log_activo'] == 'Sim')
    {
    header("location:../administrador/administrator.php");
    }

    elseif ($existe['log_nivel'] == '2' && $existe['log_activo'] == 'Sim')
    {
    $_SESSION['nome'] = $existe['log_nome'];
    header("location:../colaborador/colaboradores.php");
    }
    elseif ($existe['log_nivel'] == '3' && $existe['log_activo'] == 'Sim')
    {
    $_SESSION['nome'] = $existe['log_nome'];
    header("location:../quintas/quintas.php");
    }
    else
    header("location:../index.php");
    ?>
    Agradeço qualquer ajuda.
    Obrigado
     
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Envolve o código com a tag [php] e [/php] para tornar isso mas legível ;)

    Já confirmaste se está a haver alguma ligação à BD? Confirma se esse ligar_a_bd.php verifica a ligação. Isso parece-me que a ligação não está a ser estabelecida, e os erros vêm por arrasto.

    btw, esse código está passível da forma mais simples de SQL Injection. Vê isto: http://en.wikipedia.org/wiki/SQL_Injection. O ponto fraco é a entrada do username ;)
     
    Última edição: 12 de Fevereiro de 2008
  3. DanielGomes

    DanielGomes Power Member

    Esse erro está a acontecer porque a tua query à base de dados não está a retornar nada. Quando assim é, o mysql_fetch_array dá esse erro.

    O que tu tens sempre de fazer é verificar se a query retornou registos antes de o usar. Para isso usas, por exemplo:

    Código:
    if(mysql_num_rows($resultado)>0){
         $user=mysql_fetch_array($resultado);
         // resto do código
    }
    else
    {
       // se não existe
    }
    
     
  4. ninita

    ninita Power Member

    Já consegui resolver o problema.
    Obrigado a todos na mesma.
     

Partilhar esta Página