проблема с изменением пароля на pgadmin с php - PullRequest
0 голосов
/ 08 мая 2020

Я пишу файл PHP, чтобы пользователь мог изменить свой пароль, но у меня странная проблема. Мне нужен старый пароль для подтверждения учетной записи и новый пароль. Учитывая, что учетные данные верны, эта страница всегда возвращает мне неверный пароль пользователя и поэтому возвращает эхо в строке 12 «Старый пароль неверен». Если я запускаю «select * from utente» в инструменте запросов pgAdmin, чтобы увидеть пароль, я не вижу никаких изменений в поле пароля. Затем, если я go вернусь к форме для изменения пароля, и если я введу в поле старого пароля новый пароль, который я хотел бы изменить раньше, но он, похоже, не был принят, потому что старый не был распознан до этого процедура прошла успешно. Клянусь, я не понимаю, почему. Я думал, что это ошибка в md5, но не go и sha1. Я понимаю, что оба они небезопасны, но теперь я должен использовать один из них. Как я могу это решить? Заранее спасибо

<?php
    $dbconn = pg_connect("host=localhost port=5432 dbname=progetto user=postgres password=password")
    or die('Could not connect:' . pg_last_error());
    if(!(isset($_POST['changeButton']))){
        header("Location: utente.php");
    }else{
        $email = $_COOKIE["cookieEmail"];
        $oldPassword = sha1($_POST['oldpassword']);
        $q1="select * from utente where email = $1 and password = $2";
        $result=pg_query_params($dbconn,$q1,array($email, $oldPassword));
        if($line=pg_fetch_array($result ,null ,PGSQL_ASSOC)){
            echo "<h1>Old password wrong</h1>
            <a href=formCambiaPassword.php>Click here</a>";
        }else{
            $newPassword = sha1($_POST['newpassword']);
            $q2 = "update utente set password=$1 where email=$2";
            $result=pg_query_params($dbconn, $q2, array($newPassword, $email));
            if($result==true){
                $q3="select * from utente where email = $1 and password = $2";
                $result=pg_query_params($dbconn,$q3,array($email, $newPassword));
                if($line=pg_fetch_array($result ,null ,PGSQL_ASSOC)){
                    echo "<h1>Error</h1>
                    <a href=formCambiaPassword.php>Click here</a>";
                }else{
                    header("Location: utente.php");
                }
            }else{
                echo "<h1>Error 2</h1>
                        <a href=formCambiaPassword.php>Click here</a>";
            }
        }
    }
?>

1 Ответ

0 голосов
/ 08 мая 2020

Ваш оператор if ищет истину, тогда как он должен проверять ложь.

if(!pg_fetch_array($result ,null ,PGSQL_ASSOC)){

Ваш код должен быть следующим:

<?php
$dbconn = pg_connect("host=localhost port=5432 dbname=progetto user=postgres password=password")
or die('Could not connect:' . pg_last_error());
if(!(isset($_POST['changeButton']))){
    header("Location: utente.php");
}else{
    $email = $_COOKIE["cookieEmail"];
    $oldPassword = sha1($_POST['oldpassword']);
    $q1="select * from utente where email = $1 and password = $2";
    $result=pg_query_params($dbconn,$q1,array($email, $oldPassword));
    if(!pg_fetch_array($result ,null ,PGSQL_ASSOC)){
        echo "<h1>Old password wrong</h1>
        <a href=formCambiaPassword.php>Click here</a>";
    }else{
        $newPassword = sha1($_POST['newpassword']);
        $q2 = "update utente set password=$1 where email=$2";
        $result=pg_query_params($dbconn, $q2, array($newPassword, $email));
        if($result==true){
            $q3="select * from utente where email = $1 and password = $2";
            $result=pg_query_params($dbconn,$q3,array($email, $newPassword));
            if($line=pg_fetch_array($result ,null ,PGSQL_ASSOC)){
                echo "<h1>Error</h1>
                <a href=formCambiaPassword.php>Click here</a>";
            }else{
                header("Location: utente.php");
            }
        }else{
            echo "<h1>Error 2</h1>
                    <a href=formCambiaPassword.php>Click here</a>";
        }
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...