Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Zwracanie informacji w metodzie OOP

PHP  Założony przez  Patryk Stefański.

Witam was po prawie dwuletniej przerwie od komputera. Więcej czasu, więcej chęci i więcej motywacji.
Wszystko w/w jest, ale dalej są problemy
Posiadam sobie taką funkcję w Controllerze
public function GetUser($login, $password): string {
       $Query = "SELECT `name` from `users` where `name`=:login";
       try {
           $Stmt = $this->conn->prepare($Query);
           $Stmt->bindValue(":login", $login, PDO::PARAM_STR_CHAR);
           $Stmt->execute();
           if (!$Stmt) {
               $_SESSION['ErrorMsg'] = "Login lub hasło jest błędnę!";
               return FALSE;
           }
           $Result = $Stmt->fetchAll(PDO::FETCH_ASSOC);
           echo $Result['password'];
           $CheckPassword = $this->PasswordVerify($password, $Result['password']);
           if (!$CheckPassword) {
               $_SESSION['ErrorMsg'] = "Login lub hasło jest błędnę!";
               return FALSE;
           }
           $Result = NULL;
           $Query = "SELECT * from `users` where `name`=:login";
           $Stmt = $this->conn->prepare($Query);
           $Stmt->bindValue(":login", $login, PDO::PARAM_STR_CHAR);
           $Stmt->execute();

           return $Result = $Stmt->fetchAll(PDO::FETCH_ASSOC);

       }
       catch (PDOException $error) {
           echo $error->getMessage();
           exit('</br>Database error');
       }
   }
I teoretycznie return powinien mi zwrócić tablicę z bazy danych, ale ogólnie metoda $Result = $Stmt->fetchAll() nie chce jakoś przekazać do PasswordVerify czy nawet pokazać ją na echo/vardumpie
Login.php wygląda następująco
$Core = new Core();
   $Login = new LoginController();
   $login = $_POST['login'];
   $login = $Core->Clean($login);
   $password = $_POST['password'];
   if(!$Core->CheckInput($login) && !$Core->CheckInput($password)) {
       $_SESSION['ErrorMsg'] = "Pola nie mogą być pustę!";
       $Core->Refresh("0", "/?page=login");
   }
   if (!$Login->GetUser($login, $password)) {
       $_SESSION['ErrorMsg'] = "Login lub hasło jest błędnę!";
       $Core->Refresh("0", "/?page=login");
   }
   else {
           $_SESSION['Logged'] = TRUE;
           $_SESSION['Login_id'] = $Result['id'];
           $_SESSION['Name'] = $Result['name'];
           $_SESSION['Wallet'] = $Result['wallet'];
           $_SESSION['Steam_id'] = $Result['Steam_id'];
   }
I też za chiny nie chcą się wyświetlić informację tylko warning "Warning: Undefined array key "password"
Teraz się zastanawiam jak to ugryźć, ale myślę już jakiś czas no i nie mam pomysłu. Jak RegisterController poszedł mi świetnie to LoginController już dupą.
PS: Wiem, że są frameworki, ale chcę to ręcznie napisać przy użyciu OOP
$Query = "SELECT `name` from `users` where `name`=:login";
Wybierasz tutaj z bazy tylko pole name bez password więc wywala Ci błąd o nie istniejącym indexie
Faktycznie tak było, myślałem, że to błąd przy bindzie i fetchowaniem tego, więc znalazłem inny pomysł
private function getPassword(string $login) {
        $Stmt = $this->conn->prepare("SELECT `password` FROM `users` WHERE `name` = :login");
        $Stmt->execute(array(':login' => $login));
        return $Stmt->fetch()["password"] ?? null;
    }
I zadziałało, więc myślę, że problem rozwiązany



Użytkownicy przeglądający ten wątek:

1 gości