Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos Augusto Santos

erro com (mysql_num_rows($query) != 1)

Recommended Posts

Olá galera, estou com mais um problema.

 

Estou com uma página de login e formulário chama essa página(abaixo):

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){

$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);

if(empty($usuario))
{
echo '<script>alert("Preencha o campo usuario")</script>';
   echo '<script>history.back()</script>';
}
elseif(empty($senha)){
    echo '<script>alert("Preencha o campo Senha")</script>';
    echo '<script>history.back()</script>';
}

// Validação do usuário/senha digitados
$sql = "SELECT 'id', 'nivel' FROM 'fw_usuarios' WHERE ('usuario' = '". $usuario ."') AND (`senha` = '". sha1($senha) ."') AND ('ativo' = 1) LIMIT 1";
$query = mysql_query($sql);
if (mysql_num_rows($query) != 1) {
// Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
echo "Login inválido!"; exit;
} else {
// Salva os dados encontados na variável $resultado
$resultado = mysql_fetch_assoc($query);

// Se a sessão não existir, inicia uma
if (!isset($_SESSION)) session_start();

// Salva os dados encontrados na sessão
$_SESSION['UsuarioID'] = $resultado['id'];
$_SESSION['UsuarioNivel'] = $resultado['nivel'];

// Redireciona o visitante
header("Location: painel.php"); exit;
}
}
?>

 

Só por curiosidade o código da página do login é (abaixo):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php include '../conexao.php'; ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Administração do Site FW</title>
<link href="estilo.css" type="text/css" rel="stylesheet" />
</head>

<body>

<div id="login_admin">

   <img src="imagens/fw.png" alt="A Fábrica da Web" class="fw" />

   <form action="validacao.php" name="logar_form" method="post">

       <fieldset>

       	<legend>Sistema de gerenciamento de sites FW</legend>

           <img src="imagens/logotipo1.png" alt="Logo A Fábrica da Web" class="logo" />

           <label>
           	Login:<br  />
               <input type="text" name="usuario" />
           </label>

           <label>
           	Senha:<br  />
               <input type="password" name="senha" />
           </label>

           <input type="submit" name="logar" value="Logar" class="logar_btn"/>

       </fieldset>

   </form>

   <span><li>Caso esqueça a senha entre em contato com o administrator.</li></span>

</div>

</body>
</html>

 

 

O sistema funciona mas na hora de validar o código da o seguinte erro: Warning: mysql_num_rows () espera o parâmetro 1 ser recurso, booleano dado em C: \ wamp \ www \ Sites \ A_Fabrica_da_Web \ admin \ validacao.php na linha 20.

 

A linha do código com o erro é essa: (o primeiro código que postei)

if (mysql_num_rows($query) != 1) {

.

Se eu mudar para vazio ou == 1 o login funciona porém entra com qualquer login e senha. Procurei outros sistemas de login na internet e todos que testei me retorna esse erro. Agradeço se puderem me ajudar.

 

Abraço a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tentou rodar sua query no banco?

 

Olá Lucas, tentei mas dá o seguinte erro Warning: mysql_error() expects parameter 1 to be resource, string given in C:\wamp\www\Sites\A_Fabrica_da_Web\admin\validacao.php on line 18.

 

A linha que dá o erro é essa:

$sql =  mysql_query("SELECT 'id', 'nivel' FROM 'fw_usuarios' WHERE ('usuario' = '". $usuario ."') AND (`senha` = '". sha1($senha) ."') AND ('ativo' = 1) LIMIT 1") or die (mysql_error("Ërro ao selecionar a tabela"));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me equivoquei, testei com esses parenteses e havia dado erro.

 

Eu fiz hoje algo parecido, testa aí:

 

$result = mysql_query( $sql );
$rows = mysql_num_rows( $result );

if ( $rows == 1 )
{
   // Valid
}
else
{
   // Invalid
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me equivoquei, testei com esses parenteses e havia dado erro.

 

Eu fiz hoje algo parecido, testa aí:

 

$result = mysql_query( $sql );
$rows = mysql_num_rows( $result );

if ( $rows == 1 )
{
   // Valid
}
else
{
   // Invalid
}

 

Lucas agradeço pela a ajuda mas eu tentei com sua solução entrar entra mas entra com qualquer usuario e senha e até sem senha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você reparou que as minhas condições são o inverso das suas?

 

Se você apenas trocar a condição do seu, não vai funcionar mesmo. Você deve inverter as lógicas, autorizar o usuário caso a quantidade de linhas seja igual a 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você reparou que as minhas condições são o inverso das suas?

 

Se você apenas trocar a condição do seu, não vai funcionar mesmo. Você deve inverter as lógicas, autorizar o usuário caso a quantidade de linhas seja igual a 1.

 

Será que você poderia me dar um exemplo, sou leigo no php, sei muito pouco ainda. Agradeço se poder ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu código está assim:

 

$query = mysql_query($sql);
if (mysql_num_rows($query) != 1) {
   // Erro
} else {
   // Sucesso
}

Você não pode apenas mudar a condição

 

if (mysql_num_rows($query) != 1) {

 

E sim alterar a ordem, como no exemplo que dei:

 

$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
   // Sucesso
} else {
   // Erro
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu código está assim:

 

$query = mysql_query($sql);
if (mysql_num_rows($query) != 1) {
   // Erro
} else {
   // Sucesso
}

Você não pode apenas mudar a condição

 

if (mysql_num_rows($query) != 1) {

 

E sim alterar a ordem, como no exemplo que dei:

 

$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
   // Sucesso
} else {
   // Erro
}

 

Então Lucas eu mudei a ordem ficou assim

if (mysql_num_rows($query) == 1)

. Só que entra sem senha e com usuario e senha errado no login.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você mostrou só a condição. A ordem que eu quis dizer é o código que segue. Coloca como está seu arquivo PHP, como no primeiro post.

 

O código segue abaixo:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){

$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);

if(empty($usuario))
{
echo '<script>alert("Preencha o campo usuario")</script>';
   echo '<script>history.back()</script>';
}
elseif(empty($senha)){
    echo '<script>alert("Preencha o campo Senha")</script>';
    echo '<script>history.back()</script>';
}

// Validação do usuário/senha digitados
$sql = mysql_real_escape_string ("SELECT 'id', 'usuario', 'nivel' FROM 'fw_usuarios' WHERE ('usuario' = '". $usuario ."') AND ('senha` = '". sha1($senha) ."') AND ('ativo' = 1) LIMIT 1") or die (mysql_error("Erro ao selecionar a tabela"));
$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
// Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
echo "Login inválido!"; exit;
} else {
// Salva os dados encontados na variável $resultado
$resultado = mysql_fetch_assoc($query);

// Se a sessão não existir, inicia uma
if (!isset($_SESSION)) session_start();

// Salva os dados encontrados na sessão
$_SESSION['UsuarioID'] = $resultado['id'];
$_SESSION['UsuarioNivel'] = $resultado['nivel'];

// Redireciona o visitante
header("Location: painel.php"); exit;
}
}
?>

 

A linha é essa:

if (mysql_num_rows($query) != 1) {

 

Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quis dizer o código depois de suas alterações.

 

Abaixo está o código Lucas:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){

$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);

if(empty($usuario))
{
echo '<script>alert("Preencha o campo usuario")</script>';
   echo '<script>history.back()</script>';
}
elseif(empty($senha)){
    echo '<script>alert("Preencha o campo Senha")</script>';
    echo '<script>history.back()</script>';
}

// Validação do usuário/senha digitados
$sql = mysql_real_escape_string ("SELECT 'id', 'usuario', 'nivel' FROM 'fw_usuarios' WHERE ('usuario' = '". $usuario ."') AND ('senha` = '". sha1($senha) ."') AND ('ativo' = 1) LIMIT 1") or die (mysql_error("Erro ao selecionar a tabela"));
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
if ($rows == 1) {
// Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
echo "Login inválido!"; exit;
} else {
// Salva os dados encontados na variável $resultado
$resultado = mysql_fetch_assoc($query);

// Se a sessão não existir, inicia uma
if (!isset($_SESSION)) session_start();

// Salva os dados encontrados na sessão
$_SESSION['UsuarioID'] = $resultado['id'];
$_SESSION['UsuarioNivel'] = $resultado['nivel'];

// Redireciona o visitante
header("Location: painel.php"); exit;
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está incorreto.

 

Leia meu post novamente, veja que não mudei apenas a condição.

 

Olá Lucas, mudei a posição e inverteu o erro, com ==1 não entra e dá o mesmo erro e com !=1 entra sem senha e com senha e usuario errado. Abaixo está o código:

if($_SERVER['REQUEST_METHOD'] == 'POST'){

$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);

if(empty($usuario))
{
echo '<script>alert("Preencha o campo usuario")</script>';
   echo '<script>history.back()</script>';
}
elseif(empty($senha)){
    echo '<script>alert("Preencha o campo Senha")</script>';
    echo '<script>history.back()</script>';
}

// Validação do usuário/senha digitados
$sql = mysql_real_escape_string("SELECT 'id', 'usuario', 'nivel' FROM 'fw_usuarios' WHERE ('usuario' = '". $usuario ."') AND ('senha` = '". sha1($senha) ."') AND ('ativo' = 1) LIMIT 1") or die (mysql_error("Erro ao selecionar a tabela"));
$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
// Salva os dados encontados na variável $resultado
$resultado = mysql_fetch_assoc($query);

// Se a sessão não existir, inicia uma
if (!isset($_SESSION)) session_start();

// Salva os dados encontrados na sessão
$_SESSION['UsuarioID'] = $resultado['id'];
$_SESSION['UsuarioNivel'] = $resultado['nivel'];

// Redireciona o visitante
header("Location: painel.php"); exit;
} else {
// Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
echo "Login inválido!"; exit;
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
if ($rows == 1) {
       // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
       echo "Login inválido!";
exit;

} else {
       // Salva os dados encontados na variável $resultado
       $resultado = mysql_fetch_assoc($query);

       // Se a sessão não existir, inicia uma
       if (!isset($_SESSION)) session_start();

       // Salva os dados encontrados na sessão
       $_SESSION['UsuarioID'] = $resultado['id'];
       $_SESSION['UsuarioNivel'] = $resultado['nivel'];

       // Redireciona o visitante
       header("Location: painel.php"); exit;
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

if ($rows == 1) {
       // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
       echo "Login inválido!";
exit;

} else {
       // Salva os dados encontados na variável $resultado
       $resultado = mysql_fetch_assoc($query);

       // Se a sessão não existir, inicia uma
       if (!isset($_SESSION)) session_start();

       // Salva os dados encontrados na sessão
       $_SESSION['UsuarioID'] = $resultado['id'];
       $_SESSION['UsuarioNivel'] = $resultado['nivel'];

       // Redireciona o visitante
       header("Location: painel.php"); exit;
}
}

 

Olá Rafael, já tentei esse meio mas entra para a página de administração sem senha ou até mesmo com a senha e usuario errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.