Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dziwny problem z klasą obsługującą logowanie
Forum PHP.pl > Forum > Przedszkole
-kamil-
Siemka wszystkim, podczas pisania kodu natknąłem się na dziwny bład którego nie potrafię rozpracować, zerknijcie jak możecie,

  1. <?php
  2.  
  3. require_once '../config/config.php';
  4.  
  5. class user {
  6.  
  7. private $login;
  8. private $haslo;
  9.  
  10. function __construct($login, $haslo){
  11.  
  12. $this->login = $login;
  13. $this->haslo = $haslo;
  14.  
  15. }
  16.  
  17. static public function check(){
  18.  
  19.  
  20. if ($_SERVER['REQUEST_METHOD'] == 'POST'){
  21. {
  22. global $pdo;
  23.  
  24. $stmt = $pdo -> prepare("SELECT `login`as '$this->login', `haslo` as '$this->haslo' FROM users");
  25. $stmt -> bindValue(':login', $this->login, PDO::PARAM_STR);
  26. $stmt -> bindValue(':haslo', $this->haslo, PDO::PARAM_STR);
  27. $stmt -> execute();
  28. $stmt -> setFetchMode(PDO::FETCH_CLASS, 'user',
  29. array(0 => false));
  30. $user = $stmt -> fetch();
  31.  
  32. if ($user > 0){
  33.  
  34. $stmt -> closeCursor();
  35. return $user;
  36.  
  37. echo 'jestes zalogowany';
  38. }
  39. else
  40. {
  41. $stmt -> closeCursor();
  42.  
  43. return 0;
  44. echo 'blad';
  45. }
  46.  
  47. }
  48. }
  49. else {
  50. echo 'błąd w skrypcie';
  51. }
  52. }
  53.  
  54. }


a bład który mi się pojawia to:
Fatal error: Using $this when not in object context in ###/user.class.php on line 25
-kamil-
poprawiłem tamto, w sumie błąd przez niedopatrzenie, ale teraz znowu kicha

takie błędy:
Warning: Missing argument 2 for user::__construct() in ###/user.class.php on line 11

Notice: Undefined variable: pass in ###/user.class.php on line 14

w sumie nie powinno być błedu, var_dump() zwraca wartości zmiennych, więc nie wiem,
Adi32
Jest napisane, że brakuje drugiego paramentu w konstruktorze w klasie user czyli hasła.
Zobacz w miejscu gdzie tworzony jest obiekt klasy user czy wszystko jest ok.
-kamil-
w miejscu gdzie tworze obiekt jest raczej ok, zmienne są przekazywane do konstruktora, widze to po tym że przy użyciu var_dump($this->haslo); zwraca mi wartość przesłaną wcześniej.
Adi32
Tak przy okazji. Wiesz, że to bez sensu:

  1. $stmt -> closeCursor();
  2. return $user;
  3.  
  4. echo 'jestes zalogowany';


Return kończy działanie funkcji i metod.

A mógłbyś pokazać jak jest tworzony obiekt? Dziwne to wszystko.
-kamil-
heh, to echo 'blad'; to akurat pisalem wcześniej zanim pojawił się return, zapomniałem skasować tongue.gif

  1. $login = htmlspecialchars(trim($_POST['login']));
  2. $haslo = htmlspecialchars(trim($_POST['haslo']));
  3.  
  4. if (isset($login) && isset ($haslo)){
  5.  
  6. $user = new user($login, $haslo);
  7. $user->check();
  8.  
  9.  
  10. }


zmienne $login i $haslo zostają wczesniej przesłane z formularza, w hasle powinna byc jeszcze md5().
Adi32
  1. public function check(){
-kamil-
no niestety, dalej lipa
kehator
witam
mam podobny problem. powyżej jednej zmiennej konstruktor się sypie, wyskakuje taki sam błąd.
znalazłem tylko jedno rozwiązanie i działa.
orginał tutaj - stackoverflow.com/questions/13606429/missing-argument-in-for-construct

  1. public function __construct(array $data) {
  2. $this->setId($data['id']);
  3. .
  4. .
  5. .
  6. .
  7. }


osobiście zrobiłem tak:
  1. public function __construct($data)
  2. {
gothye
bindujesz dane w PDO ,a wcale nie wykorzystujesz ich w tworzonym zapytaniu . Po co ?
No i gdzie warunek w klauzuli WHERE ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.