Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá :D eu mais umaa vez --
Eu tou querendo fazer um script que faz Redefinição De Senha Por Link Temporário "Valido por 1 ou 2 horas".
FORMULARIO (1);
<form action="" method="POST" enctype="multipart/form-data" role="form">
<div class="form-group">
<input name="email" type="email" id='email' class="form-control" value="<?php echo $email; ?>" placeholder="E-Mail" required>
</div>
<label class="checkbox" for="checkbox1">
Lembrei? <a href="./sac/">Clique Aqui</a> <span class="pull-right">Ainda Não Tem Conta? <a href="./sac/registrar">Clique Aqui</a></span>
</label>
<hr>
<center>
<input type="submit" name="ok" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Recuperar" />
</center>
</form>
**CODIGO PHP FORM(1);**
<?php
//Colher E-Mail Do Form.
$email = $_POST['email'];
if($email <> ''){
//Conexão Com A DB
require 'config.php';
//
$sql = mysql_query("SELECT nome, email, senha FROM usuarios WHERE email='$email'") or die("Erro Ao Selecionar Os Dados.");
//
$pesquisar = mysql_num_rows($sql);
if($pesquisar <> 0){
//Resultado da pesquisar Na DB
$resultado = mysql_fetch_assoc($sql);
$nome = $resultado['nome'];
$email = $resultado['email'];
//Não Sei COmo faz & Pega O Link
//Destino onde o e-mail vai ser enviado
$destinatario = $email;
//Assunto Do Email.
$assunto = "Recuperação De Senha - SistemaLogin";
//Corpo DO E-Mail.
$corpo = "Olá, Aqui está O Link Para Redefinir Sua Senha \n..";
$corpo .= "Copie & Cole No Navegador Caso o Apertando Não Pega: ".$link." \n...";
$corpo .= "Não Responda Este E-Mail, O Mesmo È Automatico";
//Ativador HTML
$headers = "MIME-Version: 1.0\n" ;
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
//Endereço Do Rementente
$headers .= "From: SistemaLogin <no-reply@localhost>\n..";
//Prioridade Do E-Mail
$headers .= "X-Priority: 1 (Higuest)\n";
if(mail($destinatar,$assunto,$corpo,$headers)){
echo "E-Mail Enviado Com Sucesso!";
}else{
echo "E-Mail Invalido!";
}
}
}else{
echo 'Email Vazio!';
}
?>
**FORMULARIO (2);**
**Eu usei um de alterar a senha acho que server mais oque mais me preocupa e a parte do link e se o e-mail ai ta certo.... (e dps cuidarei da parte da alteração :D )**Eu Nem Fiz O Link '-' eu nao sei fazer o tal link porem nao quero por aquele que diz "meusite.xxx/redefinir?id=ady9ad9ya8d78ad8ad87adya7"
quero por um: meusite.xxx/redefinir/ady9ad9ya8d78ad8ad87adya7
Então comece pesquisando por URL amigável.
>
14 minutos atrás, ESerra disse:
Então comece pesquisando por URL amigável.
Ja tenho porem... o LINK temporario nao sei por onde começar :D
Quando houver a solicitação de redefinição, você gera um token e salva em um campo "validade" a data atual + duas horas, por exemplo:
$expira = date('Y-m-d H:i:s', strtotime("+2 hours"));
Aí você cria um arquivo que pegue o token na URL e pesquisa e compara se a data atual é maior que a data salva no banco, se for, quer dizer que expirou... bem simples.
A questão da URL, como o @ESerra disse, pesquise sobre URL's amigáveis>
5 minutos atrás, Mateus Silva disse:
Quando houver a solicitação de redefinição, você gera um token e salva em um campo "validade" a data atual + duas horas, por exemplo:
$expira = date('Y-m-d H:i:s', strtotime("+2 hours"));
Aí você cria um arquivo que pegue o token na URL e pesquisa e compara se a data atual é maior que a data salva no banco, se for, quer dizer que expirou... bem simples.
A questão da URL, como o @ESerra disse, pesquise sobre URL's amigáveis
pode me da uma explicação como seria o codigo da pagina onde vai ta ligado a tabela dos torken ?! :D
e quais tipo de campos usando na DB :D
**COMO SOU ESTUDANTE NESSA AREA AINDA NÃO SEI MUITA COISA E IA ME AJUDA MUITO!**
Ficarei grato :DNão precisa ser uma tabela de tokens, você simplesmente pode adicionar 2 campos à sua tabela de usuários: token(tipo varchar) e token_validade(tipo datetime), aí só dar update neles quando houver a requisição de troca de senha.
agora tem que implementa para gerar os mesmo quando essa função de email a qual ta postada a cima ne?
e nesse caso essa propria função faz update com o torken e validade do mesmo na tabela de usuario certo?
pode me ajuda com esse codigo e me ensina ou me da uma base para como ficara a validação do torken caso nao ouver a alteração da senha pelo torken...>
2 horas atrás, MenoR disse:
agora tem que implementa para gerar os mesmo quando essa função de email a qual ta postada a cima ne?
e nesse caso essa propria função faz update com o torken e validade do mesmo na tabela de usuario certo?
pode me ajuda com esse codigo e me ensina ou me da uma base para como ficara a validação do torken caso nao ouver a alteração da senha pelo torken...
Uma coisa que você ainda não entendeu, o objetivo do fórum não é te dar código algum, nós vamos apenas te mostrar o caminho, se você deseja ou não percorre-lo é com você.
Comece do básico:
CRUD PHP MySQL PDO
Isso vai te mostrar como manipular dados com o BD, sem isto você não vai conseguir sair do lugar.Como o Serra disse, novamente, se você não tiver a base da base, que é o CRUD, vai ficar dificil de te AJUDAR, não da pra criar o sistema pra você, você tem que criar e a gente tá aqui pra te auxiliar!
okay! ja estou fazendo o mesmo; qualquer duvida contino no TOPICO :D qualquer forma obrigado!
Boa! Pesquise bem, é a melhor forma e se aprender, e caso realmente não consiga solucionar, poste o código aqui que a gente te ajuda!
Eu consigo puxa o slug pelo link "localhost/redefinir/ZW1pY2ltZ55sdjE5QGdtY00sLmNvbE==
porem o form nao aparece e nem a mensagem caso o token esteja expirado.
<?php
include "../config.php";
if(isset($_GET['slug'])){
$slug = $_GET['slug'];
$email_codigo = base64_decode($slug);
$selecionar = mysql_query("SELECT * FROM `rtoken` WHERE slug = '$slug' AND data > NOW()");
if(mysql_num_rows($selecionar) >= 1){
if(isset($_POST['acao']) && $_POST['acao'] == 'mudar'){
$nova_senha = md5(md5($_POST['novasenha']));
$atualizar = mysql_query("UPDATE `usuarios` SET `senha` = '$nova_senha' WHERE `email` = '$email_codigo'");
if($atualizar){
$mudar = mysql_query("DELETE FROM `rtoken` WHERE slug = '$slug'");
echo 'A senha foi modificada com sucesso!';
}
}
?>
<form action="" method="post" enctype="multipart/form-data">
<div class="form-group">
<input name="novasenha" type="password" id='novasenha' class="form-control" value="" placeholder="Senha Nova" required>
</div>
<div class="form-group">
<input name="resenha" type="password" id='resenha' class="form-control" value="" placeholder="Confirma Senha Nova" required>
</div>
<hr>
<center>
<input type="hidden" name="acao" value="mudar" />
<input type="submit" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Refinir Senha" />
</center>
</form>
<?php
}else{
echo '<h1>Desculpe mais este link já expirou!</h1>';
}
}
?>Alguém me ajuda?
Se não está mostrando nada provavelmente exista algum erro que esteja resultando em uma tela em branco, ative a exibição de todos os erros:
https://forum.imasters.com.br/topic/542539-atenção-orientações-e-regras-do-fórum-de-php/
>
8 horas atrás, ESerra disse:
Se não está mostrando nada provavelmente exista algum erro que esteja resultando em uma tela em branco, ative a exibição de todos os erros:
https://forum.imasters.com.br/topic/542539-atenção-orientações-e-regras-do-fórum-de-php/
Ja Ativei, mais o mesmo nao relatar erro... :(
E-mail Ta sendo enviado & Criando O Token:
/applications/core/interface/imageproxy/imageproxy.php?img=http://image.prntscr.com/image/63591e7d300444d8ae90e59172b6e3d3.png&key=1e17c515ce68e24d0d98a74404016f994fad490e85627a9660b6192befb43f53" style="width:200px;height:auto;" />
/applications/core/interface/imageproxy/imageproxy.php?img=http://image.prntscr.com/image/c54754b4caff44a688c5e80aeadfdb43.png&key=e3e4f182de438f9f02e0c6902fb06adf8129091b967b8274536d7222b2dba85d" />
Porem nao encontro nenhum erro na pagina de redefinir e o mesmo nao mostra nem que o token foi expirado ou o formulário :/
Primeiro separe sua lógica de programação PHP do HTML, senão vira uma zona, a partir dai você estrutura os escopos "Blocos de IFs"
<?php
include "../config.php";
$erro = false;
$slug = isset($_GET['slug']) base64_decode($_GET['slug']) : false;
if ($slug !== false) {
$selecionar = mysql_query(
"SELECT * FROM `rtoken` WHERE slug = '$slug' AND data <= NOW()"
);
if(mysql_num_rows($selecionar) <= 0) {
$erro = true;
$mensagem = 'Desculpe mas este link já expirou!';
}
if(isset($_POST['acao']) && $_POST['acao'] == 'mudar'){
$nova_senha = md5(md5($_POST['novasenha']));
$atualizar = mysql_query("UPDATE `usuarios` SET `senha` = '$nova_senha' WHERE `email` = '$email_codigo'");
if($atualizar){
$mudar = mysql_query("DELETE FROM `rtoken` WHERE slug = '$slug'");
$mensagem = 'A senha foi modificada com sucesso!';
}
}
}
?>
form
<?php
if($erro === true) {
echo $mensagem;
}
?>
<form action="" method="post">
<div class="form-group">
<input name="novasenha" type="password" id='novasenha' class="form-control" value="" placeholder="Senha Nova" required>
</div>
<div class="form-group">
<input name="resenha" type="password" id='resenha' class="form-control" value="" placeholder="Confirma Senha Nova" required>
</div>
<hr>
<center>
<input type="hidden" name="acao" value="mudar" />
<input type="submit" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Refinir Senha" />
</center>
</form>>
35 minutos atrás, Williams Duarte disse:
Primeiro separe sua lógica de programação PHP do HTML, senão vira uma zona, a partir dai você estrutura os escopos "Blocos de IFs"
<?php
include "../config.php";
$erro = false;
$slug = isset($_GET['slug']) base64_decode($_GET['slug']) : false;
if ($slug !== false) {
$selecionar = mysql_query(
"SELECT * FROM `rtoken` WHERE slug = '$slug' AND data <= NOW()"
);
if(mysql_num_rows($selecionar) <= 0) {
$erro = true;
$mensagem = 'Desculpe mais este link já expirou!';
}
if(isset($_POST['acao']) && $_POST['acao'] == 'mudar'){
$nova_senha = md5(md5($_POST['novasenha']));
$atualizar = mysql_query("UPDATE `usuarios` SET `senha` = '$nova_senha' WHERE `email` = '$email_codigo'");
if($atualizar){
$mudar = mysql_query("DELETE FROM `rtoken` WHERE slug = '$slug'");
$mensagem = 'A senha foi modificada com sucesso!';
}
}
}
?>
form
<?php
if($erro === true) {
echo $mensagem;
}
?>
<form action="" method="post">
<div class="form-group">
<input name="novasenha" type="password" id='novasenha' class="form-control" value="" placeholder="Senha Nova" required>
</div>
<div class="form-group">
<input name="resenha" type="password" id='resenha' class="form-control" value="" placeholder="Confirma Senha Nova" required>
</div>
<hr>
<center>
<input type="hidden" name="acao" value="mudar" />
<input type="submit" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Refinir Senha" />
</center>
</form>
Parse error: syntax error, unexpected 'base64_decode' (T_STRING) in /www/pg/redefinir.php on line 155 Call Stack: 0.0001 243464 1. {main}() /www/index.php:0
linha: 155 -> $slug = isset($_GET['slug']) base64_decode($_GET['slug']) : false;
----------------------------
**mais um detalhe se eu por pra raiz: meusistema.xxx/redefinir.php?slug=TOKEN (funciona '-' )**
**Obs.: Da forma que citei que nao mostra o formulario ( [COMENTS](/topic/556153-sistema-de-login-como-fazer-redefini%C3%A7%C3%A3o-de-senha-por-link-tempor%C3%A1rio/?do=findComment&comment=2218799) )**Não precisa citar todo codigo que postei, se for citar alguma coisa, pega as partes mais relevantes
Corrigido, só te dei uma ideia de separar o html do PHP
$slug = isset($_GET['slug']) ? base64_decode($_GET['slug']) : false;
>
56 minutos atrás, MenoR disse:
mais um detalhe se eu por pra raiz: meusistema.xxx/redefinir.php?slug=TOKEN (funciona '-' )
Obs.: Da forma que citei que nao mostra o formulario ( COMENTS )
Neste caso pesquise por URL amigável, como já falaram
Segue http://blog.thiagobelem.net/aprendendo-urls-amigaveis
Boa sorte!
>
28 minutos atrás, Williams Duarte disse:
Neste caso pesquise por URL amigável, como já falaram
Segue http://blog.thiagobelem.net/aprendendo-urls-amigaveis
Boa sorte!
eu ja estou usando URL AMIGÁVEL, porem puxando pelo mesmo nao funciona mais pelo .php pega :/
De um explode da barra e pega o índice, senão estudar o que quer, fica difícil de você trabalhar com o que não conhece;
['url' => 'http://localhost/redefinir/ZW1pY2ltZ55sdjE5QGdtY00sLmNvbE==']
$url = explode('/', $_GET['url']);
$pasta = $url[0];
$token = $url[1];
Crie o link temporário com a data de expiração, verifique se já expirou no momento que a pessoa acessar, pronto.