Ir para conteúdo
Fórum Script Brasil
  • 0

[Resolvido] Erro no login


Marco Polo Viana

Pergunta

O login não está funcionando.

1 - No index.php temos o envio para o login:

<form method="post" action="valida_login.php">
        <p> 
          <label>Login&nbsp;(E-mail)</label>
          <input name="email_usr" id="email_usr" type="text" size="19" />
          <label>Senha</label>
          <input name="senha_usr" id="senha_usr"  type="password" size="19" />
          <br /><br>
          <input type="submit" class="button" value="Entrar" />
2 - No arquivo valida_login.php a verificação:
<?php 
require_once('cnx_dao.php');

$email_usr = $_POST["email_usr"];
$senha_usr = md5($_POST["senha_usr"]);

if(empty($email_login) || empty($senha_login))
{
header("Location: index.php");
} else {
$sql_login  = mysql_query("SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email_usr' AND C_USUARI_S_SENHA='$senha_usr'");
$rows_login = mysql_num_rows($sql_login);

if($rows_login!=0)
{
$mostra_usuario = mysql_fetch_array($sql_login);

session_start();

$_SESSION["id_usuario"]         = $mostra_usuario["C_USUARI_I_USUARIO"]; 
$_SESSION["nome_usuario"]    = $mostra_usuario["C_USUARI_S_NOME"];
$_SESSION["email_usuario"]    = $mostra_usuario["C_USUARI_S_EMAIL"];

header("Location: index2.php");

}else{  
echo "&lt;script>alert('Usuário ou Senha não reconhecidos.'); history.back() </script>";
}
}
@mysql_close();
?>
3 - O arquivo index2.php contém o seguinte:
<?php 
session_start();
require_once('cnx_dao.php');
require_once('valida_sessao.php');
?>
4 - O arquivo valida_sessao.php incluso e,m todas as páginas contém o seguinte:
<?php
session_start();
require_once('cnx_dao.php');

if(IsSet($_SESSION["id_usuario"]))
    $id_usuario = $_SESSION["id_usuario"];
if(IsSet($_SESSION["nome_usuario"]))
    $nome_usuario = $_SESSION["nome_usuario"];
if(IsSet($_SESSION["email_usuario"]))
    $email_usuario = $_SESSION["email_usuario"];

if(!(empty($id_usuario) || empty($nome_usuario) || empty($email_usuario)))
{  
    $resultado = mysql_query("SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_I_USUARIO='$id_usuario'");
    if(mysql_num_rows($resultado)==1)
    {
        if($email_usuario != mysql_result($resultado,0,"C_USUARI_S_EMAIL"))
        {
            unset ($_SESSION["id_usuario"]);
            unset ($_SESSION["nome_usuario"]);
            unset ($_SESSION["email_usuario"]);
            echo "&lt;script>alert('Usuário ou Senha não reconhecidos.'); </script>";
            header("Location: index.php");
            exit;
        }
    }
    else
    {    
            unset ($_SESSION["id_usuario"]);
            unset ($_SESSION["nome_usuario"]);
            unset ($_SESSION["email_usuario"]);
            echo "&lt;script>alert('Usuário ou Senha não reconhecidos.'); </script>";
            header("Location: index.php");
        exit;
    }
}
else
{
            unset ($_SESSION["id_usuario"]);
            unset ($_SESSION["nome_usuario"]);
            unset ($_SESSION["email_usuario"]);
            echo "&lt;script>alert('Usuário ou Senha não reconhecidos.'); </script>";
            header("Location: index.php");
        exit;
}

mysql_close($conn);
?>

Mas o sistema não deixa efetuar login. O script de login está correto no ban co e os valores das variáveis $_SESSION também pois já testei a exibição delas.

O que pode estar errado?

Editado por Marco Polo Viana
Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0

Opa, tudo bom?

Seguinte, eu estou sem interpretador aqui :( mas eu estava vendo o código agora e notei que você chamou a função isset() como IsSet()... Eu não me recordo bem mas php não é case sensitive?

Seu php.ini está com o nível de erro para mostrar todos os erros?

Abraços!

Tudo de bom!

Link para o comentário
Compartilhar em outros sites

  • 0

Na verdade o teu script em um lógica meio errada:

1 - Você envia os dados

2 - Você confere os dados e guarda nas sessões

3 - Você resgata os dados das sessões e confere de novo <- ???

O que todo sistema de login faz é:

1 - Você envia os dados

2 - Você confere os dados e guarda nas sessões

3 - Verifica se as sessões existem, se existirem está logado.

http://www.linhadecodigo.com.br/Artigo.aspx?id=258

---

E como eu disse acima, só debugando, como você tem tudo rodando ai é muito mais simples pra você achar o erro do que pra mim ficar lendo e "adivinhando" o comportamento esperado do script...

Link para o comentário
Compartilhar em outros sites

  • 0

Alterei os scripts e fiz da seguinte forma:

1 - index.php:

<form method="post" action="valida_login2.php">
        <p> 
          <label>Login&nbsp;(E-mail)</label>
          <input name="email_usr" id="email_usr" type="text" size="19" />
          <label>Senha</label>
          <input name="senha_usr" id="senha_usr"  type="password" size="19" />
          <br /><br>
          <input type="submit" class="button" value="Entrar" />
          <br />
          <br />
          <a href="lembrete.php">Esqueci minha senha</a></p>            
</form>
2 - verifica_login.php:
<?php
session_start();
require_once('cnx_dao.php');

$email_usr = $_POST["email_usr"];
$senha_usr = md5($_POST["senha_usr"]);

$selec = "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email_usr' AND C_USUARI_S_SENHA='$senha_usr'";
$exec = mysql_query($selec, $conn) or die(mysql_error());
$total = mysql_num_rows($exec);

if($total=="1") {
$_SESSION["email_usr"] = $email_usr;
$_SESSION["senha_usr"] = $senha_usr;

header("Location: index2.php");
} else {
echo "<script>alert('Usuário ou senha não reconhecidos.'); history.back() </script>";
}
?>
3 - index2.php:
<?php 
session_start();

require_once('cnx_dao.php');
require_once('valida_sessao2.php');

$email = $_SESSION["email_usr"];
$senha = $_SESSION["senha_usr"];

$dados_res = mysql_query($conn, "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email' AND C_USUARI_S_SENHA='$senha'");
$dados = mysql_fetch_array($dados_res);
$nome_usr = $dados["C_USUARI_S_NOME"];
?>
4 - valida_sessao.php:
<?php
session_start();

if(($_SESSION["email_usr"]=="") OR ($_SESSION["senha_usr"]=="")) {
echo "<script>alert('Usuário não autenticado.'); history.back()</script>";

}
?>

E não loga, ele entra na validação da sessão e retorna ao login. Tem solução um simles login com validação de sessão em páginas restritas?

Editado por Marco Polo Viana
Link para o comentário
Compartilhar em outros sites

  • 0

Bom... Lá vamos nós...

Trabalho com $_SESSION é muito simples. Já tentaste no Tio Google?

http://www.google.com.br/search?hl=pt-BR&a...oogle&meta=

Link para o comentário
Compartilhar em outros sites

  • 0

Voltei!

Como diria o esquartejador: vamos por partes! Lendo teu post, por que o form envia para o valida_login2.php e você não postou ele aqui? Segundo, tua SQL, está sendo "montada" corretamente? Se ela possuir erros ou não retornar nenhuma linha, teu código vai voltar mesmo. Terceiro, falta o valida_sessao2.php... cnx_dao.php...

Tudo pode estar errado!

Usa isso (nem estou acreditando que fiz ¬¬

index.php

<form method="post" action="login.php">

Usuário<br/>

<input type="text" name="usuario" value=""/><br/>

Senha<br/>

<input type="password" name="senha" value=""/><br/>

<input type="submit" value="Login!"/>

</form>

login.php

<?php

$usuario = $_POST['usuario'];

$senha = $_POST['senha'];

// $table = Uma select do banco, que retorne $table['usuario'] e $table['senha']

// Aqui eu forcei olha só:

$table = array();

$table['usuario'] = "admin";

$table['senha'] = "12345";

// Fim da forçada

if($usuario == $table['usuario'] && $senha == $table['senha']) {

session_start();

$_SESSION['usuario'] = $usuario;

$_SESSION['senha'] = $senha;

header("Location: principal.php");

}

else

header("Location: index.php");

?>

principal.php

<?php

session_start();

if(!isset($_SESSION['usuario']))

header("Location: logout.php");

?>

Olá <?=$_SESSION['usuario']?>! <a href="logout.php"/>Logout!</a>

logout.php

<?php

session_start();

$_SESSION = array();

unset($_SESSION);

session_destroy();

header("Location: index.php");

?>

:ninja:

Link para o comentário
Compartilhar em outros sites

  • 0

Opa!

Eu vou te pedir, debugue seu código. Eu não sei o que está acontecendo. Dicas pára debugar:

Utilize a função print_r($_SESSION) para visualizar o conteúdo da array $_SESSION;

Utilize a função var_dump($obj) para verificar as variáveis e objetos afins; ou

Utiliza o login que eu fiz pra ti =)

Calro, ele tem muitos erros pois fiz na correria...

Abraços!

:mellow:

Link para o comentário
Compartilhar em outros sites

  • 0

Acho q consegui algo para ajudarem:

Fiz o código abaixo:

~
<?php
session_start();
require_once('cnx_dao.php');

$email_usr = $_POST["email_usr"];
$senha_usr = md5($_POST["senha_usr"]);

$selec = "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email_usr' AND C_USUARI_S_SENHA='$senha_usr'";
$exec = mysql_query($selec, $conn) or die(mysql_error());
$total = mysql_num_rows($exec);

if($total=="1") {
$_SESSION["email_usr"] = $email_usr;
$_SESSION["senha_usr"] = $senha_usr;

header("Location: debuga.php");

} else {
echo "<script>alert('Usuário ou senha não reconhecidos.'); history.back() </script>";
}
?>
e no debuga.php o seguinte:
<?php 
session_start();
echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];
?>
E traz branco. Para saber se os dados em $_SESSION estão sendo gerados, coloquei no if :
echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];

Como entrou no if e exibiu os dados da sessão o SQL tá certinho, mas não sei porque não leva os dados para frente em debuga.php. Acho q ajudei a me ajudarem.

Editado por Marco Polo Viana
Link para o comentário
Compartilhar em outros sites

  • 0

Ajuda para debugar:

<? error_reporting(E_ALL); ?>

Isso aumenta o teu nível de erro; ou seja, aparece até erros de não inicialização de arrays.

http://br2.php.net/manual/pt_BR/function.error-reporting.php

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, está caindo no if e mostrando sessão vazia conforme teste abaixo.

Valida sessão:

<?php 
session_start();
if( !isset($_SESSION["email_usr"]) && !isset($_SESSION["senha_usr"]) ) {
echo "Sessão vazia";
} else {
echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];
}

?>
Sendo que na página de login a sessão existe e é mostrada:
<?php
session_start();
require_once('cnx_dao.php');

$email_usr = $_POST["email_usr"];
$senha_usr = md5($_POST["senha_usr"]);

$selec = "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email_usr' AND C_USUARI_S_SENHA='$senha_usr'";
$exec = mysql_query($selec, $conn) or die(mysql_error());
$total = mysql_num_rows($exec);

if($total=="1") {
$_SESSION["email_usr"] = $email_usr;
$_SESSION["senha_usr"] = $senha_usr;

echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];

} else {
echo "Usuário ou senha não reconhecido.";
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal,

Bastei parar o IIS e instalar o APACHE que a sessão passou a andar entre as páginas. Não sei porque o IIS estava zerando o conteúdo das sessões ou onde configura isso no IIS. Mas como com o apache resolveu, vamos em frente... inclusive com o apache deu problemas de case sensitive entre as tabelas no ysql e campos , sendo que não alterei o collation.

Abs a todos e obrigado pela força.

Link para o comentário
Compartilhar em outros sites

  • 0

IIS, por que será que deu erro? =P :rolleyes:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...