View Full Version : Erro em PHP


ninita
11-02-2008, 19:25
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\tratalogi n.php on line 19
-->Warning: Cannot modify header information - headers already sent by (output started at C:\Programas\xampp\htdocs\Disprova\login\tratalogi n.php:19) in C:\Programas\xampp\htdocs\Disprova\login\tratalogi n.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

Kayvlim
12-02-2008, 01:46
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\tratalogi n.php on line 19
-->Warning: Cannot modify header information - headers already sent by (output started at C:\Programas\xampp\htdocs\Disprova\login\tratalogi n.php:19) in C:\Programas\xampp\htdocs\Disprova\login\tratalogi n.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
Envolve o código com a tag e 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 ;)

DanielGomes
12-02-2008, 09:26
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:


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

ninita
12-02-2008, 15:38
Já consegui resolver o problema.
Obrigado a todos na mesma.