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

Por que não apaga?


Edilson Santiago

Pergunta

Amigos, estou criando um sistema de login, e nele tenho uma página "esqueci a senha". Tudo funciona, exceto uma coisa. Quando o usuário altera a senha, eu preciso que os dados do link único que foram gerados pelo php e armazenados no banco de dados sejam apagados tabela "recuperação". E o meu comando "delete" não funciona. A linha não apaga. E não consigo entender o porque. 

O comando que uso para deletar é:

if($statement->execute()){
        
        $query_apaga = "DELETE * FROM recuperacao WHERE email_usu = '$user'"; 
            $result_apaga = $conn->prepare($query_apaga);
            $result_apaga->execute();    
        echo "<p style='color: green;'>Senha alterada com sucesso!</p>";
        echo "<p style='color: green;'><a href='login.php'><font size='2'>Voltar ao Login</font></a></center></p>";
        
        } else {
        echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>";    
        }

Meu código completo:

<?php
include_once 'connect.php';
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content-"width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Recuperação de Senha</title>
    <style>
        body{font-family: Arial, Helvetica, sans-serif}
        .content{display:flex;justify-content: center}
        .contato{width:100%; max-width: 500px;}
        .form{display: flex; flex-direction: column}
        .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px}
        .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px}
        .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA;  border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;}
    </style>
<script>
 function confereSenha(){
     const senha = document.querySelector('input[name=senha]');
     const confirma_senha = document.querySelector('input[name=confirma_senha');
     
     if (confirma_senha.value === senha.value) {
         confirma_senha.setCustomValidity('');
     } else {
         confirma_senha.setCustomValidity('As senhas digitadas não conferem! Elas precisam ser iguais.');
     }
     
 }
</script>

</head>
<body>
    
<section class="content">
<div class="contato">
        <center><h2>Recuperação de Senha</h2></center>
        <br><br>

<?php

$user = $_GET['utilizador'];
$hash = $_GET['confirmacao'];
$modified = date('Y-m-d H:i:s');

$query_recupera = "SELECT * FROM recuperacao";  
$result_recupera = $conn->prepare($query_recupera);
$result_recupera->execute();
$row_recupera = $result_recupera->fetch(PDO::FETCH_ASSOC);
$user_cadastrado = $row_recupera['email_usu'];
$hash_cadastrado = $row_recupera['confirmacao'];

$query_usuario = "SELECT * FROM usuario WHERE email = '$user'";
$result_usuario = $conn->prepare($query_usuario);
$result_usuario->execute();
$row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC);
$id_user = $row_usuario['id'];

if(!empty($_POST)){

    if($user == $user_cadastrado && $hash == $hash_cadastrado) {
    $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT);    
    $sql = "UPDATE usuario SET senha =:senha, modified =:modified WHERE id =:id";
    $statement = $conn->prepare($sql);
    $statement->bindParam(':senha', password_hash($dados['senha'], PASSWORD_DEFAULT));
    $statement->bindParam(':modified', $modified);
    $statement->bindParam(':id', $id_user);
        
        if($statement->execute()){
        
        $query_apaga = "DELETE * FROM recuperacao WHERE email_usu = '$user'"; 
            $result_apaga = $conn->prepare($query_apaga);
            $result_apaga->execute();    
        echo "<p style='color: green;'>Senha alterada com sucesso!</p>";
        echo "<p style='color: green;'><a href='login.php'><font size='2'>Voltar ao Login</font></a></center></p>";
        
        } else {
        echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>";    
        }
        
        
    } else {
    echo "<p style='color: red;'>Erro! Os dados fornecidos não conferem. Tente novamente ou entre em contato com o administrador do sistema.</p>";    
    }
    

 
} else {
    echo "";
}

?>
        
        
        
        <form name="cad_usu" class="form" method="POST" action="">
            <input class="field" type="password" name="senha" placeholder="Senha" required onchange='confereSenha();'>
            <input class="field" type="password" name="confirma_senha" placeholder="Confirmar Senha" required onchange='confereSenha();'>
            <input class="field2" type="submit" name="AlteraSenha" value="Alterar Senha">
            <input class="field2" type="reset" value="Limpar Formulário">
            
        </form>
        </div>
        
 
    </section>
     </div>  
   
</body>
</html>

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Eu gostei do código do Edilson, ele ensina a personalizar as mensagens que aparecem junto ao <input>, quando o usuário não segue a regra pelo JavaScript. Fiz um código resumido para apreciar melhor o código:

<!DOCTYPE html><html lang=pt-br><head><meta charset=UTF-8>
<meta name=viewport content=width:device-width, initial-scale=1.0>
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Recuperação de Senha</title>
<style>
body{font-family:Arial,Helvetica,sans-serif;font-size:16px}
.content{display:flex;justify-content: center}
.contato{width:100%; max-width: 500px;}
.espaco{height:10%}
.field{padding:10px; margin-bottom:15px; border:1px solid #DDD; 
    border-radius: 5px}
.field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; 
    background-color:#ADD8E6; border-radius: 5px}
.field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; 
    background-color:#87CEFA;  border-radius: 5px;font-weight:bold;}
.form{display: flex; flex-direction: column}
</style>
<script>
function confereSenha(){
if (confirma.value == senha.value){confirma.setCustomValidity('');} else {
    confirma.setCustomValidity('As senhas digitadas não conferem! Elas precisam ser iguais.');}}
</script>
<body>
<section class=content>
<div class="contato">
<h2 class=content>Alteração de Senha</h2>
<div class=espaco></div>      
<form class=form method=post>
    <input class=field type=password id=senha name=senha placeholder="Nova Senha" 
        required onchange=confereSenha() autofocus>
    <input class=field type=password id=confirma 
        placeholder="Confirmar Nova Senha" required onchange=confereSenha()>
    <input class=field2 type=submit value="Alterar Senha">
    <input class=field2 type=reset value="Limpar Formulário">
</form>
<?php
if(!isset($_POST['senha'])){exit;}
$user = "usuario";
$novasenha = $_POST['senha'];
$modified = date('Y-m-d H:i:s');
$pdo=new PDO("mysql:host=localhost;dbname=astudy","root","");
$stm = $pdo->prepare("update users set senha=:senha where user=:user");
$senhanova=password_hash($novasenha,PASSWORD_DEFAULT);
$stm->bindParam(':senha',$senhanova);
$stm->bindParam(':user',$user);
try {$stm->execute();echo "Deu tudo certo!";}
catch (PDOException $e){echo $e->getMessage();}
?>
</div></section>
</body>
</html>

 

Screenshot_1.png

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...