Ir para conteúdo

Arquivado

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

Fabyo

Sistema de Login

Recommended Posts

E tem como eu colocar um link de logoff após a pessoa entrar no sistema?

O script para fazer logout eh simples. Vou posta-lo abaixo.

Vou postar um sistema que eu desenvolvi. Esta funcionando perfeito. Um pouco diferente do sistema do Fabyo, mas com a mesma finalidade.

 

conection.php (dados para conectar ao banco de dados)

----------------

<?php

 

$host = "localhost"; // IP do banco de dados

$usr = "root"; // Login do bd

$pwd = ""; // Senha do bd

$db = "accounts"; // Nome da base de dados

 

?>

conecta.php (funcoes de conexao com banco de dados)

--------------

<?php

include("conection.php");

 

$conexao = mysql_connect("$host","$usr","$pwd");

$selectdb = mysql_select_db("$db",$conexao);

 

function conectabd()

{

global $conexao, $selectdb;

if(!$conexao)

{

die('O sistema está com problemas. Tente mais tarde. ' . mysql_error());

return false;

}

else

{

if(!$selectdb)

{

die('Ocorreu um erro com o banco de dados. Por favor informe ao administrador. ' . mysql_error());

return false;

}

else

{

return true;

}

}

}

 

function fecha_conexaobd()

{

global $conexao;

mysql_close($conexao);

}

 

function checa_senha($nome,$pass)

{

global $conexao;

if (conectabd())

{

$resultado = mysql_query("SELECT login, senha FROM contas WHERE login = '$nome'", $conexao);

 

if (!$resultado)

{

die('Erro no banco de dados. Reporte ao administrador. ' . mysql_error());

}

else

{

$linha = mysql_fetch_array($resultado);

if (($linha['login'] == $nome) && ($linha['senha'] == $pass))

{

return true;

}

else

{

return false;

}

}

fecha_conexao_bd();

}

else

{

return false;

}

}

 

?>

verifica.php (garante que o usuario esta logado. Toda pagina q incluir o verifica.php sera restrita a usuarios logados no sistema)

-------------

<?php

// Inicia sessoes

session_start();

// verifica se existe sessao.

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

{

// redireciona para pag. de login

header("Location: login.php");

exit; //garante q nao sera executado nenhum codigo dessa pagina apos o login.

}

 

?>

index.php (pagina principal)

-----------

<?php

session_start();

include("verifica.php"); //verifica se esta logado ou nao. caso nao esteja vai pra pag. de login.

?>

<html><head>

<title> Sistema de Login </title></head><body>

<div align="left"><center>

Bem Vindo <b>

<?php echo "<font color=green>".$_SESSION['usuario']."</font>"; ?></b>

<a href="sair.php">(Sair)</a></center>

</body></html>

login.php (pagina de login)

----------

<?php

 

if ($submit)

{

if ($_POST['user'] && $_POST['senha'])

{

session_start(); //carrega sessoes e destroi

session_destroy(); // para garantir que nao fique resto de outras sessoes.

session_start(); //carrega sessoes limpas.

 

include('conecta.php');

 

$login = $_POST['user'];

$senha = $_POST['senha'];

 

if (checa_senha($login,$senha))

{

$_SESSION['usuario'] = $login;

header("Location: index.php");

}

else

{

$saida = "<tr><td><div align=center><font color=red>

Senha ou Login inválidos!

</font></div></td></tr>

";

}

}

else

{

$saida = "<tr><td><div align=center><font color=red>

Preencha todos os dados.

</font></div></td></tr>

";

}

}

?>

<html><head> <title> Sistema de Login </title></head><body>

<div align="left">

<form method="post" action="<?php echo $PHP_SELF ?>">

<table width="220"><tr><td>

<div align="center">

<font color="#000000">

<p align=left>Login:

<input name="user" value="<?php echo $_POST['user'];?>" type="text" size="10"><br>

Senha:

<input name="senha" type="password" size="10">

<input type="submit" name="submit" value="Enviar"></p>

</div></form></font></td></tr>

<?php echo $saida; ?>

</body></html>

sair.php (script para deslogar)

---------

<?php

 

// Inicia sessões, para assim poder destruí-las

 

session_start();

 

session_destroy();

 

header("Location: login.php");

 

?>

Ja no sistema do Fabyo, eh simples resolver esses erros.

O erro de nao passar para a "pagina2.php":

//verifico se existe a sessao e ja pego os dados que nela contem

if(isset($_SESSION["dados"]))

{

$dados = unserialize($_SESSION["dados"]);

$nome = $dados["nome"];

$senha = $dados["senha"];

verifica_usuario($nome, $senha); // basta retirar essa linha para funcionar. Se ja existe sessao, o usuario ja esta logado, nao precisa verificar de novo.

}

Ja o problema de nao logar mais de uma vez, basta usar o script de logout que postei ai em cima. Ele nao loga mais de uma vez pq ja tem uma sessao q nao foi destruida.

 

Ai galera, espero ter ajudado.

Ate +!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como faria para acrescentar um popup dizendo que o login esta errado?

Se você quer somente avisar que o login esta errado em um pop-up, eh simples.

você tem q usar javascript, pois o php nao faz isso.

 

você pode tentar assim (vou usar o sistema que postei como exemplo):

 

if (checa_senha($login,$senha))

{

$_SESSION['usuario'] = $login;

header("Location: index.php");

}

else

{

echo "<script language=javascript>

window.open('login_error.html','login_error','resizable=0,width=300,height=300,left = 362,top = 234');

</script>";

}

login_error.html

-------------------

<html><body><font color=red size=+3> LOGIN ERRADO </font></body></html>

Espero ter ajudado.

Ate+!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou conseguindo acesso com qqer user e ou senha digitados.

A consistência não está sendo realizada.

Alguém testou usar uma senha errada pra ver no que dá?

Simples resolucao:

 

no arquivo protecao.php

----------------------------

function verifica_usuario($nome, $senha)

{

//conecto ao servidor de banco de dados passo o nome do servidor usuario e senha

mysql_connect("localhost", "root", "");

// seleciono o banco de dados

mysql_select_db("login");

 

$re = mysql_query("select count(*) as total from usuarios where nome = '$nome' and senha = '".md5($senha)."'");

 

$total = mysql_res

A linha

 

$re = mysql_query("select count(*) as total from usuarios where nome = '$nome' and senha = '".md5($senha)."'");

 

antes era

 

$re = mysql_query("select count(*) as total from usuarios where nome = '$nome' and senha =md5('$senha')");

 

A funcao md5 eh do PHP e nao do MySQL, portanto, tem q fechar as aspas duplas (que vem logo antes do select), concatenar o resultado da funcao md5() do PHP e abrir as aspas duplas novamente para finalizar a query.

 

Espero ter ajudado.

Ate+.

Compartilhar este post


Link para o post
Compartilhar em outros sites

MorFer voce esta enganado o mysql tbm tem a função md5e ta certo sim daquele jeito

Bom, comigo nao funcionou daquele jeito, entao optei por deixar o md5 pro php. Ai passou a funcionar. ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque no meu aki, e deu o seguinte erro:Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\pos\protecao.php on line 29Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\pos\indexadm.php:6) in c:\apache\htdocs\pos\protecao.php on line 36Agradeço pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Fabyo.esse sistema tah dando muita zebra .. se puder dar um jeito aew pra galera.. ficaremos grato...Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ygornet o sistema ta bom, é o pessoal que nao sabe implementar, pois precisa saber um pouco de php, nao é só copiar e colar.

 

mas em todo caso eu fiz outro sistema de login, com session, tableless, javascript nao obstrusivo com mensagens amigaveis em css no lugar de alert()

 

to anexando o sistema junto com o banco.sql de exemplo

 

e nele tem nivel de acesso, por exemplo se o usuario tem nivel = 0 nao pode logar, se tem 1 é um usuario comun e 2 admin

 

e criei uma chave para ajudar na segurança, quando voce cadastrar um usuario novo na chave voce faz assim:

 

$chave = md5( md5(strtolower(trim($nome))) . md5(strtolower(trim($senha))) );

 

e salve no banco de dados:

 

INSERT INTO usuarios ( id_usuario , nome , senha , email , nivel_acesso , chave ) 
VALUES (
NULL , '$nome', '$senha', '$email', '$nivel', '$chave' );

 

qualquer outra duvida só perguntar

 

login.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

MUITO OBRIGADO primeiramento ao Fábyo.Gostei muito deste sistema que você postou por último, deixei ele de acordo com minha necessidade e ele já está rodando OK. No estando tenho uma dúvida em como "administrar" as página de acordo com "nivel_acesso", por exemplo deixar um página restrita ao nivel_acesso 2 (admin).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ygornet o sistema ta bom, é o pessoal que nao sabe implementar, pois precisa saber um pouco de php, nao é só copiar e colar.

 

mas em todo caso eu fiz outro sistema de login, com session, tableless, javascript nao obstrusivo com mensagens amigaveis em css no lugar de alert()

 

to anexando o sistema junto com o banco.sql de exemplo

 

e nele tem nivel de acesso, por exemplo se o usuario tem nivel = 0 nao pode logar, se tem 1 é um usuario comun e 2 admin

 

e criei uma chave para ajudar na segurança, quando voce cadastrar um usuario novo na chave voce faz assim:

 

$chave = md5( md5(strtolower(trim($nome))) . md5(strtolower(trim($senha))) );

 

e salve no banco de dados:

 

INSERT INTO usuarios ( id_usuario , nome , senha , email , nivel_acesso , chave ) VALUES (NULL , '$nome', '$senha', '$email', '$nivel', '$chave' );
qualquer outra duvida só perguntar

 

login.zip

Muito bom, porém não estou conseguindo criar um usuário e senha...tipo...criar eu até crio (não sei se corretamente) porém sempre dá como senha ou usuário invalido.

O que poderia ser?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geison GM voce esta salvando a senha junto com a chave no padrao que eu mostrei acima?

 

$chave = md5( md5(strtolower(trim($nome))) . md5(strtolower(trim($senha))) );

 

se nao salvar com a chave corretamente o login nunca ira funcionar mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geison GM voce esta salvando a senha junto com a chave no padrao que eu mostrei acima?$chave = md5( md5(strtolower(trim($nome))) . md5(strtolower(trim($senha))) ); se nao salvar com a chave corretamente o login nunca ira funcionar mesmo

Desculpa minha ignorancia Fabyo, mas como faz isso que você disse de salvar a senha junto com a chave????Por exemplo, faço um sistema de cadastro de usuarios, mas como fazer isso de salvar senha e chave? Como funciona essa chave???Obs.: deu para notar que não sei mto de php num eh mesmo?! mas só agora me deparei com a necessidade de criar login e senha, ainda mais só agora reconheci a necessidade de tomar cuidado com a segurança do mesmo.Obs 2.: Otimos tutoriais o seu!Espero ajuda véio.Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Everton o modo de gravar o usuario corretamente eu postei no topico acimahttp://forum.imasters.com.br/index.php?s=&...st&p=677152

Não deu tempo hehehe, você postou antes.Eu sai do trampo ontem e depois q esfriei a cabeça vi a besteira q eu disse no post, eu nem precisava t perguntar tal coisa http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Pensando um pouco mais eu vi a lógica do md5 e como implementar.Mesmo assim obrigado por reforçar oq você disse no post.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fabyo!!!

 

Bom cara, não tem jeito, tentei de tdo e não está dando certo.

Crie um form para criar mais usuários, até ai tdo bem, o problema é que nao está logando, ou seja, digito o login e a senha e volta novamente para a página do login.

 

Já alterei o php.ini, colocando o path mas nda, sempre a mesma coisa. Não aparece mensagem de erro nenhum tbm.

 

Oque pode estar acontecendo cara?????

Preciso de um help!!!!!!!

Pior que enquanto eu não conseguir não vou sucegar. Gostei desse sistema e não vou desistir dele rsss

 

Abraço cara e espero ajuda!

 

...............................................Edit

Achei melhor colocar os codigos q estou usando para incluir usuarios:

 

cad_login2.php:

<form id="formulario" name="formulario" action="inclui_usuario.php" method="post" >			<table width="228" border="0" align="center">			  <tr>				<td width="68">Nome</td>				<td width="244"><input type="text" id="nome" name="nome" /></td>			  </tr>			  <tr>				<td>Senha</td>				<td><input type="password" id="senha" name="senha" /></td>			  </tr>			  <tr>				<td>E mail </td>				<td><input type="text" id="email" name="email" /></td>			  </tr>			  <tr>				<td>Nivel</td>				<td><input type="text" id="nivel" name="nivel" /></td>			  </tr>			  <tr>				<td colspan="2"><div align="center">				  <input name="submit" type="submit" value="Cadastrar" />				</div></td>			  </tr>			</table></form></body></html>
inclui_usuario.php:

<body><p align="center">  <?	mysql_connect("localhost", "root", "");	mysql_select_db("carrinho");		$nome  = mysql_escape_string($nome);	$senha = mysql_escape_string($senha);			$chave = md5( md5(strtolower(trim($nome))) . md5(strtolower(trim($senha))) );		$senha = md5($senha);$sql = "INSERT INTO usuarios ( id_usuario , nome , senha , email , nivel_acesso , chave ) VALUES ( NULL , '$nome', '$senha', '$email', '$nivel', '$chave' )";//echo $sql;//$rs = mysqlexecuta($sql);$re = mysql_query(sprintf($sql));?></p><div align="center">Cadastro efetuado com sucesso!!! </div><p align="center"></p><meta HTTP-EQUIV="REFRESH" CONTENT="3; URL=cad_login2.php"></body></html>
Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Fabyoserá que você pode explicar essa parte do script

if ( get_magic_quotes_gpc() ) {		$nome  = stripslashes($_POST["Nome"]);		$senha = stripslashes($_POST["Senha"]);	}	$nome  = mysql_escape_string($nome);	$senha = mysql_escape_string($senha);

por quê usar stripslashes sendo antes não foi usado nenhuma função como de escape. Agradeço desde já.

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.