Ok, enquanto aguardamos a versão II, segue um breve tutorial de um "
+" que eu fiz para este sistema, dando a possibilidade do usuário mudar a sua senha!
Esta função funciona da seguinte forma: usuário digita a senha antiga (pra ter uma segurança de que não é qualquer pessoa tentando trocar a senha) [1] e 2x a senha nova para não ter erro de digitação [2].
1) guardei em uma sessão (
verifica_usuario.php) a senha criptografada do usuário, para fazer a verificação [1]
arquivo comentado:
<?php
session_start(); // Inicia a session
include "config.php";
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
if((!$usuario) || (!$senha)){
echo "Por favor, todos campos devem ser preenchidos! <br /><br />";
include "formulario_login.html";
}
else{
$senha = md5($senha);
$sql = mysql_query("SELECT * FROM usuarios WHERE usuario='{$usuario}' AND senha='{$senha}' AND ativado='1'");
$login_check = mysql_num_rows($sql);
if($login_check > 0){
while($row = mysql_fetch_array($sql)){
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}
$_SESSION['usuario_id'] = $usuario_id;
$_SESSION['nome'] = $nome;
$_SESSION['sobrenome'] = $sobrenome;
$_SESSION['email'] = $email;
$_SESSION['nivel_usuario'] = $nivel_usuario;
$_SESSION['senhapramudanca'] = $senha; // aqui ele guarda a senha (criptografada) numa sessão para ser recuperada depois mais facilmente
mysql_query("UPDATE usuarios SET data_ultimo_login = now() WHERE usuario_id ='{$usuario_id}'");
header("Location: area_restrita.php");
}
}
else{
echo "Você não pode logar-se! Este usuário e/ou senha não são válidos!<br />
Por favor tente novamente!<br />";
include "formulario_login.html";
}
}
?>
*obs: guardar esta informação em uma session não é a forma mais segura de fazer isto, porém para um sistema bem simples que é o que queremos, é a forma mais fácil e "rápida" que eu achei pois não precisaremos abrir o BD mais de 1x ao fazer a mudança.
2) página de formulário das senhas.
formulario_trocasenha.html<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Troca de senha</title>
</head>
<body>
<form action="trocasenha.php" method="post">
Senha antiga<br />
<input name="senhavelha" type="password" id="usuario" /><br />
Senha nova<br />
<input name="senhanova1" type="password" id="senha" /><br />
Repetir senha nova<br />
<input name="senhanova2" type="password" id="senha" /><br /><br />
<input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
3) e agora o mais importante, fazer as verificações de se a senha que o usuário deu como antiga é a correta [1] e se as duas novas senhas coincidem [2], caso positivo, alteração no bd.
trocasenha.php comentado:
<?php
session_start(); // Inicia a session
include "config.php"; // inclui no code o arquivo que vai te conectar ao bd
$senhavelha = md5($_POST['senhavelha']); // grava na variavel senhavelha o que o user digitou no campo senhavelha
$senhanova1 = $_POST['senhanova1']; // grava na variavel senhanova1 o que o user digitou no campo senhanova1
$senhanova2 = $_POST['senhanova2']; // grava na variavel senhanova2 o que o user digitou no campo senhanova2
if((!$senhavelha) || (!$senhanova1) || (!$senhanova2)){ // verifica se o usuário digitou todos os 3 campos necessários, caso contrário dá a mensagem de erro e inclui o formulário novamente para ele redigitar
echo "Por favor, todos campos devem ser preenchidos! <br /><br />";
include "formulario_trocasenha.html";
}
else{
$senhaantiga = $_SESSION['senhapramudanca']; // recupera a sessao salva no arquivo verifica_usuario.php salvando-a em uma variavel
$novasenha = md5($senhanova1); // criptografa a nova senha desejada
$usuario_id = $_SESSION['usuario_id']; // recupera da sessão o id do usuário cadastrado no BD
if($senhavelha==$senhaantiga){ // verifica se a senha antiga é a mesma da digitada como sendo
if ($senhanova1==$senhanova2) { // verifica se as 2 novas senhas digitadas estão iguais
mysql_query("UPDATE usuarios SET senha='$novasenha' WHERE usuario_id='$usuario_id'"); // atualiza a senha no bd
echo "Senha alterada com sucesso! Clique <a href=area_restrita.php>aqui</a> para voltar.";
$_SESSION['senhapramudanca'] = $novasenha; // redefine o conteudo da sessao para a senha nova, para o caso do usuario querer mudar novamente
} else { echo "As duas novas senhas não coincidem!"; } // erro caso não coincidam
} else { echo "Senha antiga incorreta!"; } // erro caso o usuário tenha digitado a senha antiga incorreta
}
?>
acho que é isso
o code foi feito por mim e testado, qualquer problema favor avisar!
Crab, parabéns pelo code inicial!
Edição feita por: knoxville, 30/12/2008, 08:51.