Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
Maciekbjw
post
Post #2





Grupa: Zarejestrowani
Postów: 217
Pomógł: 23
Dołączył: 2.12.2007
Skąd: Warszawa

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


Może opisz co dokładnie się dzieje...

A wysyłasz jakieś dane w ogóle ?tongue.gif


--------------------
Masz swoje mieszkanie i chcesz je wynająć? Sprawdź ofertę Zarzadządzanie Najmem

WRONA.IT - pozycjonowanie stron
www.ecyklopedia.pl
Go to the top of the page
+Quote Post
qba10
post
Post #3





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%)
-----


No się loguję za pomocą formularza no i metoda autoryzacja() zwraca mi false mimo że takie dane mam w mysql i z tym skryptem napisanym strukturalnie all było git, ale teraz uczę się OOP i chciałem go napisać obiektowo.

PS: Znacie jakiś dobry kurs OOP ale w PHP5, bo w google żadnego porządnego nie mogą znaleść a ten na wortalu jakoś mi nie podchodzi....


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
nithajasz
post
Post #4





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

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


Ja się tak zapytam, masz dwie metody, sprawdzanie i autoryzacja. Gdzie one są ze sobą powiązane? W skrypcie gdzieś dalej? Po drugie jeśli najpierw sprawdzasz dane, metodą sprawdzanie to ona powinna coś zwracać bo inaczej nie przekażesz żadnych danych do autoryzacji.

Przynajmniej moim zdaniem nie znam kursu może coś innego tam wymodzili.
Go to the top of the page
+Quote Post
qba10
post
Post #5





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%)
-----


Ale przecież metoda sprawdzenie() przekazuje do właściwości klasy $metod odpowiednią wartość. I wtedy metoda autoryzacja() wczytuje wartość $metod. Czy takie coś jest błędem?

Ten post edytował qba10 19.06.2008, 21:53:53


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
nithajasz
post
Post #6





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ę 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
qba10
post
Post #7





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%)
-----


No to wymodziłem coś takiego:
  1. <?php
  2. class logowanie{
  3.  
  4.  
  5. private $kxc = "a523d703f908dd69e02db64ec35d07315f4c49ab3cacad14a97304b02f2fbb09"; 
  6.  
  7.  
  8.  
  9. public function autoryzacja($login, $haslo, $zapamietaj)
  10. {
  11. if(isset($_COOKIE['dane'])) 
  12. {
  13. $dane = $_COOKIE["dane"]^$this->kxc;
  14. $login_use = substr($dane, 0, 32);
  15. $haslo_use = substr($dane, -32);
  16. $metod = "cookies";
  17. }
  18. elseif(isset($_SESSION['login']) AND isset($_SESSION['haslo'])) 
  19. {
  20. $login_use = $_SESSION['login'];
  21. $haslo_use = $_SESSION['haslo'];
  22. $metod = "session";
  23. }
  24. elseif(isset($login) AND isset($haslo)) 
  25. {
  26. $login_use = md5(strtolower($login));
  27. $haslo_use = md5($haslo);
  28. $metod = "post";
  29. } 
  30. if(isset($this->metod)) 
  31. {
  32.  $query = mysql_query("SELECT * FROM `users` WHERE `user`='".$login_use."' AND `pass`='".$haslo_use."';"); 
  33.  if(mysql_num_rows($query) == 1) 
  34.  {
  35.  
  36.  $wiersz = mysql_fetch_array($query);
  37.  $_SESSION['login'] = $wiersz['user'];
  38.  $_SESSION['haslo'] = $wiersz['pass'];
  39.  $_SESSION['nick'] = $wiersz['nick']; 
  40.  
  41.  if($metod == "post" AND isset( $zapamietaj) AND $zapamietaj == "ok") 
  42.  {
  43.  $dane = ($login.$haslo)^$_CONFIG['kxc'];
  44.  setcookie ("dane", $dane,time()+3600*24*365);
  45.  }
  46.  return TRUE;
  47.  } 
  48.  else
  49.  {
  50.  return FALSE;
  51.  }
  52. }
  53.  
  54. }
  55.  
  56. }
  57. ?>


No i teraz passer wywala mi to:
Kod

   <b>Warning</b>:  Missing argument 1 for logowanie::autoryzacja(), called in /home/qba10/public_html/test/index.php on line 5 and defined in <b>/home/qba10/public_html/test/system/jadro/e-door/functions/logowanie.php</b> on line <b>9</b>
  
   <b>Warning</b>:  Missing argument 2 for logowanie::autoryzacja(), called in /home/qba10/public_html/test/index.php on line 5 and defined in <b>/home/qba10/public_html/test/system/jadro/e-door/functions/logowanie.php</b> on line <b>9</b>
  
   <b>Warning</b>:  Missing argument 3 for logowanie::autoryzacja(), called in /home/qba10/public_html/test/index.php on line 5 and defined in <b>/home/qba10/public_html/test/system/jadro/e-door/functions/logowanie.php</b> on line <b>9
</b>


Co napisałem źle questionmark.gif


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A jak wywołujesz tą metodę autoryzacja?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
qba10
post
Post #9





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%)
-----


  1. <?php
  2. $logowanie = new logowanie ;
  3. $logowanie->autoryzacja($_POST['user'],$_POST['haslo'], $_POST['zapamietaj']);
  4. ?>


Ten post edytował qba10 20.06.2008, 13:04:47


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A zrób przed tym var_dump($_POST) i zobacz, czy na pewno są jakieś dane w $_POST.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
nithajasz
post
Post #11





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

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


Parser dokładnie Ci powiedział co jest nie tak. Brakuje Ci danych przekazywanych do tej autoryzacji, więc pewnie wywołujesz ją w momencie gdy tablice $_POST masz pustą, np. przed wysłaniem formularza..

Zrób sobie coś na podobieństwo tego:

  1. <?php
  2. if(isset($_POST[&apos;form_check&apos;]){
  3. //utowrzenie obiektu klasy i wywołanie autoryzacji
  4. } else {
  5. //wyswietlenie formularza i dodaj w nim pole :
  6. // 
  7. }
  8. ?>


To powinno w jakiś sposób pomóc jak zrozumiesz o co chodzi.

Po drugie nie bardzo rozumiesz zasadę obiektowego programowania. Poszukaj na google.pl haseł "programowanie obiektowe php5" parę pozycji jest, z którymi warto się zapoznać na początek.

Dobrym źródłem jest też PHPEdia.. prosto opisane co i jak. Może nie wyszystko ale podstawy tam są.
http://www.phpedia.pl/wiki/Klasa

Lub wikibooks : http://pl.wikibooks.org/wiki/PHP/Klasy_i_obiekty

Ten post edytował nithajasz 20.06.2008, 13:36:58
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 00:41