Recuperação de palavra passe em PHP

getrixone

Membro
Boas,
Estou a fazer um projeto em php onde dá para criar contas e fazer login e queria fazer a funcionalidade de recuperação de palavra passe.

Tenho o codigo do login assim:

PHP:
if (isset($_POST["login"])) {
        $email = $_POST["email_login"];
        $password = md5($_POST["pssw_login"]);
        $verificar=mysql_query("SELECT * FROM users WHERE email='$email' AND password='$password'");
        if (mysql_num_rows($verificar)<=0) {
            echo '<script type="text/javascript">swal({title: "Ups!",text: "E-mail ou palavra-passe errados",type: "error",confirmButtonText: "Ok" });</script>';
        }else{
            $query=mysql_fetch_assoc($verificar);
            $uid= $query["id"];
            setcookie("info1",$uid,time() + (10 * 365 * 24 * 60 * 60));
            setcookie("info2",$password,time() + (10 * 365 * 24 * 60 * 60));
            header("Location: index.php");
        }
    }

Codigo da recuperação da palavra passe:
PHP:
if (isset($_POST["recup"])) {
        $email = $_POST["recupemail"];
       
        $verificar=mysql_query("SELECT * FROM users WHERE email='$email'");
        if (mysql_num_rows($verificar)<=0) {
            echo '<script type="text/javascript">swal({title: "Recuperar Palavra Passe",text: "Este email ainda não está registado.",type: "warning",confirmButtonText: "Ok" });</script>';
        }else{
            $codigorecup = rand(1000, 9999);
        $insert = "UPDATE users SET codigorecup= '$codigorecup' WHERE email='$email'";
mysql_query ($insert) or die ("Impossivel enviar email!");
$to      = $email;
                    $subject = 'MeetMe';
                    $message = 'Olá, o teu código é '.$codigorecup;
                    $headers = 'From: [email protected]' . "\r\n" .
                       'Reply-To: [email protected]' . "\r\n" .
                       'X-Mailer: PHP/' . phpversion();

                    mail($to, $subject, $message, $headers);
                    echo '<script type="text/javascript">swal({title: "Um codigo de confirmação foi enviado para o seu email.",text: "Irá ser redirecionado dentro de 5 segundos...",type: "success",confirmButtonText: "Obrigado" });</script>';
                    header("refresh:5;url=recuperar.php");
               
                   
               
           

        }
    }

Agora esta é a pagina para onde foi redirecionado e onde terá que inserir o codigo que recebeu no email:


PHP:
<?php

    include("db.php");
    if (isset($_POST["login"])) {
        header("Location: login.php");
    }
       


    if (isset($_POST["registar"])) {
        header("Location: login.php");
    }

if (isset($_POST["help"])) {


echo '<script type="text/javascript">swal({title: "Recuperar Palavra Passe",text: "Insira o email com o qual efetuou o registo.",type: "warning",confirmButtonText: "Ok" });</script>';
}   




if (isset($_POST["recup"])) {
        $email = $_POST["recupemail"];
        $codigorecup= $_POST["codigorecup"];
        $verificar=mysql_query("SELECT * FROM users WHERE email='$email'");
                $verificar1=mysql_query("SELECT * FROM users WHERE codigorecup='$codigorecup'");
        if (mysql_num_rows($verifica)>0) and (mysql_num_rows($verifica1)>0) {
            echo '<script type="text/javascript">swal({title: "Recuperar Palavra Passe",text: " Codigo Correto.",type: "erro",confirmButtonText: "Ok" });</script>';
header("refresh:5;url=novapassword.php");// aqui ia ser redirecionado para uma pagina onde ia inserir a nova palavra passe...
        }else{
           
                    echo '<script type="text/javascript">swal({title: "Codigo Errado.",text: "Ir&aacute ser redirecionado dentro de 5 segundos...",type: "success",confirmButtonText: "Obrigado" });</script>';
                    header("refresh:5;url=recuperar.php");
               
                   
               
           

        }
    }
   





?>
<!DOCTYPE html>
<html>
<head>


    <style type="text/css">
        body{
            text-align: center;
           
        }
        .topbar{
            display: block;
            top: 0;
            left: 0;
            width: 100%;
            height: 70px;
            background-color: #005B9A;
            text-align: center;
            color: #FFF;
        }
        .topbar h2{
            float: left;
            margin-top: 20px;
            margin-left: 20px;
            cursor: default;
        }
        .topbar button{
            margin-top: 0px;
            display: inline-block;
            float: right;
            height: 70px;
            cursor: pointer;
            width: 110px;
            border: none;
            background: transparent;
            font-weight: lighter;
            color: #FFF;
            font-size: 12pt;
        }
        .topbar button:hover{
            background-color: #74C2E1;
            color: #005B9A;
        }
        .topbar button:active{
            border-radius: 100%;
        }
        img#logo{
            width: 125px;
            margin-top: 2vh;
}
                img#help{
            width: 50px;
            margin-top: 5vh;
        }
        h1#logo{
            color: #005B9A;
            margin-top: 10px;
        }
        h3#logo{
            display: block;
            margin: auto;
            color: #0191C8;
            margin-top: 20px;
            width: 300px;
        }
        input[type="email"], input[type="password"], input[type="text"]{
            padding-left: 10px;
            border-radius: 2px;
            background-color: #E9E9E9;
            height: 28px;
            max-width: 298px;
            width: 85%;
            border: 1px solid #E9E9E9;
            margin-top: 60px;
        }
        input[type="email"]:focus, input[type="password"]:focus, input[type="text"]:focus{
            background-color: transparent;
            height: 28px;
            width: 298px;
            border: 1px solid #005B9A;
            color: #333;
        }
        input[type="submit"]{
            background-color: transparent;
            border-radius: 2px;
            border: 1px solid #005B9A;
            padding: 10px 11px 10px 11px;
            color: #005B9A;
            cursor: pointer;
            margin-top: 20px;
        }
        input[type="submit"]:hover{
            background-color: #005B9A;
            color: #FFF;
        }
                   
        form{
            width: 40vw;
            height: 40vh;
            position: fixed;
            top: 0;
            left: 0;
            margin-top: 40vh;
            margin-left: 30vw;
            background-color: #F9F9F9;
            box-shadow: 0 0 3px #666;
            border-radius: 3px;
           
        }
                  .imagemclick
{
    cursor: pointer;
}

               


        #registar{
            height: 60vh;
            margin-top: 20vh;
        }
        #login h2, #registar h2{
            color: #005B9A;
            padding-top: 5vh;
        }
                 div#nada{
            width: 100%;
            height: 100vh;
            position: fixed;
            top: 0;
            left: 0;
            background-color: #005B9A;
            opacity: 0.6;
            display: none;
        }
       
        .topbar input[type="submit"]{
            background-color: transparent;
            border-radius: 2px;
            border: 1px solid #005B9A;
            padding: 10px 11px 10px 11px;
            color: #005B9A;
            cursor: pointer;
            margin-top: 20px;
    </style>
</head>
<body>

    <div class="topbar">
        <h2>MeetMe</h2>
       
             
    </div>
    <img id="logo" src="img/logo.png"><br />
    <h1 id="logo">MeetMe</h1><br />
   
<div class="nada">
<form  method="POST">

        <input type="text" placeholder="Insira o codigo de confirmacao" name="codigorecup"><br />
       
        <input type="submit" value="Redefinir palavra passe" name="recup"><br />
                <input type="submit" value="Nao recebeu o codigo?" name="help"><br />



    </form>


</div>






   
   
</body>
</html>


O erro que me dá é:

syntax error, unexpected 'and' (T_LOGICAL_AND) in


como posso verificar que o codigo que a pessoa inseriu corresponde ao mesmo email que inseriu na outra pagina??
 
Uma possível solução: Geras um código. Introduzes esse código na db no user que fez o pedido. Envias um email com um link que tem o email do user + código. Nesse link tens uma função que verifica os dados e apresenta (ou não) um formulário para o user definir uma nova password.
Mais simples: Pedir para o user introduzir o email + código no form de recuperar password.
Podes usar uma combinação dos 2 em que envias o link (e nesse caso, tu tratas de tudo e apresentas o form para definir nova password ou um erro) e também o código para verificação manual (form onde é pedido email + código, depois é processado no mesmo "link" q falei acima, e o resto igual)

Outras coisas:
- deves deixar de usar sintax do genero "mysql" (ex: mysql_fetch_assoc) que já se deixou de usar há algum tempo (até já foi removida na versão mais recente do php). Como alternativa tens mysqli ou pdo.
- usar md5 para passwords não é recomendável. como alternativa tens a funcao password_hash() q usa bcrypt (e password_verify() para verificar)
- usar rand não é recomendável. se tiveres a usar php 7 podes usar random_bytes(), ou se tiveres a usar uma versão inferior openssl_random_pseudo_bytes() ou random_compact
- põe o css num ficheiro separado
 
Uma possível solução: Geras um código. Introduzes esse código na db no user que fez o pedido. Envias um email com um link que tem o email do user + código. Nesse link tens uma função que verifica os dados e apresenta (ou não) um formulário para o user definir uma nova password.
Mais simples: Pedir para o user introduzir o email + código no form de recuperar password.
Podes usar uma combinação dos 2 em que envias o link (e nesse caso, tu tratas de tudo e apresentas o form para definir nova password ou um erro) e também o código para verificação manual (form onde é pedido email + código, depois é processado no mesmo "link" q falei acima, e o resto igual)

Outras coisas:
- deves deixar de usar sintax do genero "mysql" (ex: mysql_fetch_assoc) que já se deixou de usar há algum tempo (até já foi removida na versão mais recente do php). Como alternativa tens mysqli ou pdo.
- usar md5 para passwords não é recomendável. como alternativa tens a funcao password_hash() q usa bcrypt (e password_verify() para verificar)
- usar rand não é recomendável. se tiveres a usar php 7 podes usar random_bytes(), ou se tiveres a usar uma versão inferior openssl_random_pseudo_bytes() ou random_compact
- põe o css num ficheiro separado
muito obrigado pelas dicas!!!
 
Back
Topo