Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP5][OOP] Problem ze skryptem
qba10
post
Post #1





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

Ostrzeżenie: (0%)
-----


Witam

Na podstawie http://www.strefaphp.net/artykul36.html chciałem napisać ten skrypt w OOP, ale chyba coś nie wyszło....
Tu moja prośba by sprawdzić mój skrypt, czy ma identyczne działanie jak ten z linku...

Oto skrypt (połączenie z bazą danych jest wykonywane przed wykonaniem tego obiektu):
  1. <?php
  2. class logowanie
  3.  {
  4. public $login;
  5. public $haslo;
  6. public $zapamietaj; 
  7. public $login_use;
  8. public $haslo_use;
  9. public $zalogowany;
  10. public $metod;
  11. public $dane;
  12. public $kxc = "a523d703f908dd69e02db64ec35d07315f4c49ab3cacad14a97304b02f2fbb09";  
  13.  
  14.  
  15.  
  16.  private function sprawdzanie()
  17.  {
  18.  
  19. if(isset($_COOKIE['dane'])) 
  20. {
  21. $this->dane = $_COOKIE["dane"]^$this->kxc;
  22. $this->login_use = substr($dane, 0, 32);
  23. $this->haslo_use = substr($dane, -32);
  24. $this->metod = "cookies";
  25. }
  26. elseif(isset($_SESSION['login']) AND isset($_SESSION['haslo'])) 
  27. {
  28. $this->login_use = $_SESSION['login'];
  29. $this->haslo_use = $_SESSION['haslo'];
  30. $this->metod = "session";
  31. }
  32. elseif(isset($this->login) AND isset($this->haslo)) 
  33. {
  34. $this->login_use = md5(strtolower($this->login));
  35. $this->haslo_use = md5($this->haslo);
  36. $this->metod = "post";
  37. } 
  38.  
  39.  
  40.  
  41.  }
  42.  public function autoryzacja($login, $haslo, $zapamietaj )
  43. {
  44.  
  45.  $this->login = $login ;
  46.  $this->haslo = $haslo;
  47.  $this->zapamietaj = $zapamietaj;
  48.  
  49.  
  50.  $this->zalogowany = false ;
  51.  if(isset($this->metod)) 
  52.  {
  53.  $query = mysql_query("SELECT * FROM `users` WHERE `user`='".$this->login_use."' AND `pass`='".$this->haslo_use."';"); 
  54.  if(mysql_num_rows($query) == 1) 
  55.  {
  56.  
  57.  $wiersz = mysql_fetch_array($query);
  58.  $_SESSION['login'] = $wiersz['user'];
  59.  $_SESSION['haslo'] = $wiersz['pass'];
  60.  $_SESSION['nick'] = $wiersz['nick']; 
  61.  $this->zalogowany = true;
  62.  if($this->metod == "post" AND isset( $this->zapamietaj) AND $this->zapamietaj == "ok") 
  63.  {
  64.  $dane = ($login.$haslo)^$_CONFIG['kxc'];
  65.  setcookie ("dane", $dane,time()+3600*24*365);
  66.  }
  67.  
  68. return $this->zalogowany ;  
  69.  }
  70.  }
  71.  
  72. }
  73. }
  74. ?>


PS: Żadnego błędu mi nie wywala ale, logowanie nie chce działać...

Pozdrawiam
Qba10

Ten post edytował qba10 19.06.2008, 20:52:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nithajasz
post
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Gdzie przekazuje? Bo jeśli w klasie to albo jestem ślepy albo tego nie widzę (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Edit: Spojrzałem na ten tutek co podałeś. Tam masz zupełnie coś innego niż chcesz a praktycznie przepisujesz kod. Tam masz jedną funkcję w której masz to wszystko, co ty podzieliłeś na dwie metody. Jeśli chcesz by to działało to zwracaj coś z metody sprawdzanie, ten login, hasło i co tam masz i wywołuj metodę autoryzacja z tymi danymi.

Bo tak to trudno by zwróciła Ci coś innego jeśli nie podajesz jej żadnych danych do sprawdzenia, zawsze zwróci FALSE.

Przykład taki najprostszy:

  1. <?php
  2. class prosta_klasa{
  3.  
  4. public $zalogowany = 0;
  5.  
  6. public function __construct($login, $password)
  7. {
  8. if($this -> sprawdz($login, $password)) $this -> loguj();
  9.  
  10. }
  11.  
  12. public function loguj()
  13. {
  14.  // ustawiasz parametr, który świadczy o zalogowaniu uzytkownika
  15. $this -> zalogowany = 1;
  16. // lub 
  17. $_SESSION['logged'] = 1;
  18. }
  19.  
  20. public function sprawdz($login, $password)
  21. {
  22. // tu sprawdzasz co tam chcesz np. walidujesz zmienne, sprawdzasz czy uzytkownik i
    stnieje w bazie
  23. // jesli dane sie zgadzaja to 
  24. return TRUE;
  25. // jesli nie to
  26. return FALSE;
  27. }
  28.  
  29. }
  30. ?>


Wtedy dane z formularza przekazujesz jako parametr przy tworzeniu obiektu klasy

  1. <?php
  2. $user = new prosta_klasa($login, $password);
  3. ?>


Jakoś tak, pisane tak z palca więc nie gwarantuje, że dobrze. Chodzi o ogólną zasadę tego.

Jeszcze raz w funkcji którą przerabiasz te dane są przekazywane po przez utworzenie zmiennej. W metodach te dane musisz zwrócić i przekazać do innej metody. Tak jakbyś chciał użyć tej samej zmiennej w dwóch różnych funkcjach.

Ten post edytował nithajasz 19.06.2008, 22:58:35
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 10:50