PDO logowanie

0

Witam, chciałbym wykonać skrypt logowania przy użyciu PDO, mam taki kod

if (isset($_POST['send'])){
    if (!empty($_POST['login']) && !empty($_POST['password'])){
        include_once ('../DB/connect_DB.php');
        $query = $db -> prepare("SELECT FROM pracownik WHERE login ?");
        try{
            $query -> bindValue(1, $_POST['login']);
            $query -> execute();
            if ($query -> rowCount() > 0){
                $data = $query -> fetch(PDO::FETCH_ASSOC);
                if ($data['haslo'] === $_POST['password']){
                    $_SESSION['ID_Pracownika'] = $data['ID_Pracownika'];
                }else{
                    echo 'Niepoprawne dane !';
                }
            }else echo 'Brak takiego użytkownika !';
        }catch (PDOException $e){

        }
    }else{
        echo 'Brak wprowadzonych danych !';
    }
}

hasła w bazie są jednak szyfrowane i zawsze zostaje zwracane "brak takiego użytkownika" jak "odszyfrować hasło" z bazy i porównać je z hasłem wprowadzonym? jak powinien wyglądać ten skrypt?

0

Po co odszyfrować hasło? Zaszyfruj wpisywane hasło tym samym algorytmem, co w bazie i wtedy je porównaj. W zapytaniu SQL przypadkiem nie brakuje znaku =

0

hasła w bazie są jednak szyfrowane i zawsze zostaje zwracane>

Rozumiem, że do hashowania używasz metody password_hash?
Jeżeli tak, to wykorzystaj metodę password_verify()
http://php.net/manual/en/function.password-verify.php

Staraj się omijać takie zagnieżdżanie ifów, bo kod ciężej się czyta.
Dużo lepiej zamiast tego:

if (isset($_POST['send'])){...}

zanegować isset i zakończyć program, gdy $_POST nie jest ustawiony.

if (i!sset($_POST['send'])){
    header(Location: ...);
    exit();
}

lub stworzyć jedną zmienną przełącznikową np.

$verifiedPostData = true;

Przetestować każdy Twój warunek zanegowany z osobna i ustawić false, jeżeli któryś z testów się nie powiedzie.
Dalej tylko zrobisz np.

if(!$verifiedPostData){
    header(...);
    exit();
}

albo wykorzystasz if, by wejść w swoje logowanie.

No i nie wstawiaj spacji między klasą, "->"(strzałką), a metodą, bo też się to gorzej czyta.

1 użytkowników online, w tym zalogowanych: 0, gości: 1