• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

password_verify nie działa php pdo

VPS Starter Arubacloud
+1 głos
142 wizyt
pytanie zadane 9 marca 2021 w PHP przez niezalogowany

Witam mam problem z weryfikacją hasła za pomocą funkcji password_verify w metodzie logowania czy ktoś może mi podpowiedzieć gdzie leży problem 

Oto moja metoda rejestracji 

 public function Registerion(array $date): void // Metoda która sprawdza czy dany użytkownik został zarejestrowany
    {
            $email = $this->conn->quote($date['email']);
            $NazwaUzytkownika = $this->conn->quote($date['NazwaUzytkownika']);
            $haslo = $this->conn->quote($date['Haslo']);
            $PowtorzHaslo = $this->conn->quote($date['PowtorzHaslo']);
            $Imie = $this->conn->quote($date['Imie']);
            $Nazwisko = $this->conn->quote($date['Nazwisko']);
            $Numer = $this->conn->quote($date['Numer']);
            $Panstwo = $this->conn->quote($date['Panstwo']);
            $Miasto = $this->conn->quote($date['Miasto']);
            $Wybor = $this->conn->quote($date['Wybor']);
            $KodPocztowy = $this->conn->quote($date['KodPocztowy']);
            if(isset($email))
            {
                // Walidajca danych powiodła się
		        $ok = true;
                $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

                if(empty($email))
                {
                    $_SESSION['email_provided'] = $_POST['email']; // zmienna sesyjna podaje nieprawidłowy email
                    header('Location: /?action=Rejestracja'); 
                    $ok = false; 
                }

                $NazwaUzytkownika = filter_input(INPUT_POST, 'NazwaUzytkownika');
                if((strlen($NazwaUzytkownika) < 3) || (strlen($NazwaUzytkownika) > 20)) {
                    $ok = false;
                    $_SESSION['name_user'] = $_POST['NazwaUzytkownika']; // Sprawdzenie długości znaków Nazwa Uzytkownika
                    header('Location: /?action=Rejestracja');
                }
                $NazwaUzytkownika = filter_input(INPUT_POST, 'NazwaUzytkownika');
                if(ctype_alnum($NazwaUzytkownika)==false) {
                    $ok = false;
                    $_SESSION['not_polish_user'] = $_POST['NazwaUzytkownika']; // Nazwa użytkownika ma składać się tylko z liter i cyfr (bez polskich znaków)
                    header('Location: /?action=Rejestracja');
                }
                $Haslo = filter_input(INPUT_POST, 'Haslo');
                $PowtorzHaslo = filter_input(INPUT_POST, 'PowtorzHaslo');
                /* Przyda się do sprawdzania hashy
		        $hash_hasla = password_hash($hasloOne, PASSWORD_DEFAULT);
		        echo $hash_hasla; exit();
		        */
                if((strlen($Haslo)< 8) || (strlen($Haslo) > 20))
                {
                    $ok = false;
                    $_SESSION['one_password'] = $_POST['Haslo']; // Hasło musi posiadać od 8 do 20 znaków!
                    header('Location: /?action=Rejestracja');
                } 
                if($Haslo!=$PowtorzHaslo)
                {
                    $ok = false;
                    $_SESSION['same_password'] = $_POST['Haslo']; // Podane hasła nie są identyczne!
                    header('Location: /?action=Rejestracja'); 
                } 
                $hash_hasla = password_hash($Haslo, PASSWORD_DEFAULT);
                $Imie = filter_input(INPUT_POST, 'Imie');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Imie))
                {
                    $ok = false;
                    $_SESSION['name_field'] = $_POST['Imie']; // Wprowadzanie Imienia
                    header('Location: /?action=Rejestracja');
                }
                $Nazwisko = filter_input(INPUT_POST, 'Nazwisko');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Nazwisko))
                {
                    $ok = false;
                    $_SESSION['surname_field'] = $_POST['Nazwisko']; // Wprowadzenie Nazwiska
                    header('Location: /?action=Rejestracja'); 
                }
                $Numer = filter_input(INPUT_POST, 'Numer');
                if(!preg_match('/^[0-9]{9,13}$/',$Numer))
                {
                    $ok = false;
                    $_SESSION['number_field'] = $_POST['Numer']; // Wprowadzenie Numeru Telefonu
                    header('Location: /?action=Rejestracja'); 
                }
                $Panstwo = filter_input(INPUT_POST, 'Panstwo');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Panstwo))
                {
                    $ok = false;
                    $_SESSION['country_field'] = $_POST['Panstwo']; // Wprowadzenie Państwa w którym użytkownik się znajduje 
                    header('Location: /?action=Rejestracja'); 
                }
                $Miasto = filter_input(INPUT_POST, 'Miasto');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Miasto))
                {
                    $ok = false;
                    $_SESSION['city_field'] = $_POST['Miasto']; // Wprowadzenie Miasta przez użytkownika
                    header('Location: /?action=Rejestracja'); 
                } 
                // Jakie województwo
                $Wybor = filter_input(INPUT_POST, 'Wybor');
                // Jaki kod pocztowy
                $KodPocztowy = filter_input(INPUT_POST, 'KodPocztowy');
                if(empty($KodPocztowy)) {
                    $ok = false;
                    $_SESSION['post_office'] = $_POST['KodPocztowy']; // Wprowadzenie kodu pocztowego 
                    header('Location: /?action=Rejestracja');
                }
                $results = $this->conn->query("SELECT id FROM uzytkownicy WHERE NazwaUzytkownika='$NazwaUzytkownika'");
                $howMuchUser = $results->rowCount();
                if($howMuchUser > 0) 
                {
                    $ok = false;
                    $_SESSION['exist_user'] = $_POST['NazwaUzytkownika']; // Czy istnieje już taki użytkownik w bazie 
                    header('Location: /?action=Rejestracja'); 
                } 
                $result = $this->conn->query("SELECT id FROM uzytkownicy WHERE email='$email'");
                $howMuchEmail = $result->rowCount();
                if($howMuchEmail > 0)
                {
                    $ok = false;
                    $_SESSION['exist_mail'] = $_POST['email']; // Czy istnieje użytkownik o taki emailu
                    header('Location: /?action=Rejestracja'); 
                }
                
                if($ok==true)
                {
                    $query = "INSERT INTO uzytkownicy VALUES(NULL, '$email', '$NazwaUzytkownika', '$hash_hasla', '$Imie', '$Nazwisko', '$Numer', '$Panstwo', '$Miasto', '$Wybor', '$KodPocztowy')";
                    $this->conn->exec($query);
                }
            }
    }

Oto moja metoda logowania 

 public function Logged(): void // Metoda która sprawdza czy dany użytkownik został zalogowany
    {
        if(!isset($_SESSION['ID_LOGGED'])) {
            if(isset($_POST['NazwaUzytkownika'])) {
                $NazwaUzytkownika = filter_input(INPUT_POST, 'NazwaUzytkownika');
                $haslo = filter_input(INPUT_POST, 'Haslo');
                $query = $this->conn->prepare('SELECT id, Haslo FROM uzytkownicy WHERE NazwaUzytkownika = :NazwaUzytkownika');
                $query->bindValue(':NazwaUzytkownika', $NazwaUzytkownika, PDO::PARAM_STR);
                $query->execute();
                $user = $query->fetch();
                if($user && password_verify($haslo,$user['Haslo'])) // Jeżeli login istnieje i dla tego rekordu hasło zgadza się z tym które mamy zahaszowane w bazie to oznacza że użytkownik zalogował się poprawnie 
                {
                    $_SESSION['ID_LOGGED'] = $user['id'];
                    unset($_SESSION['failed_attempt']); // Usuwanie już nieprawidłowego logowania
                } else {
                    $_SESSION['failed_attempt'] = true; // Nieudana próba logowania 
                    header('Location: /?action=Logowanie');
                    exit();
                }
            }
        }

        if(isset($_SESSION['ID_LOGGED'])) 
        {
            header('Location: /?action=Zalogowany');
            exit();
        }
    }

Gdyby ktoś jeszcze potrzebował tutaj jest funkcja z kontrolera 

public function ZalogowanyAction(): void
    {
        if($this->request->hasToPost()) {
            $Data = [
                'NazwaUzytkownika' => $this->request->postIndex('NazwaUzytkownika'),
                'Haslo' => $this->request->postIndex('Haslo'),
            ];
            $this->database->Logged($Data);
        }

        $this->view->displaytwo('Zalogowany', $viewParams ?? []);
    }
public function hasToPost(): bool
    {
        return !empty($this->post); // Zwróci wartość prawdziwą jeżeli to nie będzie post 
    }

 

komentarz 9 marca 2021 przez niezalogowany
przeniesione 9 marca 2021 przez Arkadiusz Waluk
Tutaj mam taki błąd
TypeError Object
(
    [message:protected] => password_verify() expects parameter 1 to be string, null given
    [string:Error:private] => 
    [code:protected] => 0
    [file:protected] => C:\xampp\htdocs\StronaInternetowa\src\Database.php
    [line:protected] => 254
    [trace:Error:private] => Array
        (
            [0] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\src\Database.php
                    [line] => 254
                    [function] => password_verify
                    [args] => Array
                        (
                            [0] => 
                            [1] => $2y$10$oilbg.crjt.GtfioOcuvuOK767E9nNmwJzOi5h0RIic4pAjr9gGxG
                        )

                )

            [1] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\src\Controller\ShopController.php
                    [line] => 68
                    [function] => Logged
                    [class] => App\Database
                    [type] => ->
                    [args] => Array
                        (
                            [0] => Array
                                (
                                    [NazwaUzytkownika] => Buczek123
                                    [Haslo] => 
                                )

                        )

                )

            [2] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\src\Controller\AbstractController.php
                    [line] => 56
                    [function] => ZalogowanyAction
                    [class] => App\Controller\ShopController
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

            [3] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\index.php
                    [line] => 31
                    [function] => execute
                    [class] => App\Controller\AbstractController
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

        )

    [previous:Error:private] => 
)
komentarz 9 marca 2021 przez Lavaganza Użytkownik (660 p.)

W requescie masz metode isPost() po co ci funkcja hasToPost ?

if ( $this->getRequest()->isPost() ) 

No i karygodny blad jesli kiedys pokazesz komus kod z polskimi nazwami to nikt cie nie. przyjmie. Co to te dzieciaki dzisiaj robia w tych kodach, jezuuu

komentarz 9 marca 2021 przez niezalogowany
Dzięki za radę

1 odpowiedź

0 głosów
odpowiedź 9 marca 2021 przez niezalogowany

W błędzie jest informacja że funkcja password_verify jako pierwszy parametr potrzebuje string a nie null.

[message:protected] => password_verify() expects parameter 1 to be string, null given

Sprawdź co masz w zmiennej haslo.

komentarz 9 marca 2021 przez niezalogowany

$haslo = filter_input(INPUT_POST, 'Haslo');

Tutaj struktura

Tutaj są moje wiersze w tabeli 

1
komentarz 9 marca 2021 przez niezalogowany
Dane z posta nie mają nic wspólnego z bazą danych. Sprawdził bym raczej formularz.

Podobne pytania

0 głosów
0 odpowiedzi 229 wizyt
pytanie zadane 30 lipca 2020 w PHP przez darekx10 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 5 listopada 2022 w PHP przez zbiku25 Bywalec (2,940 p.)
0 głosów
0 odpowiedzi 199 wizyt
pytanie zadane 20 maja 2022 w PHP przez AnimaVillis Stary wyjadacz (11,110 p.)

92,345 zapytań

141,147 odpowiedzi

318,721 komentarzy

61,780 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...