Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [skrypt] Klasa logowania i rejstracji, Ocena, dobre rady
gcdreak
post 6.06.2009, 13:04:08
Post #1





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Witam!<br>Kiedyś stworzyłem klasę logowania. Zaczynam dopiero przygodę z OOP. Proszę o Waszą opinie i jakieś rady. Moja klasa:
http://wklej.org/id/101767/
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
NuLL
post 6.06.2009, 13:08:56
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Pytanie jaki zwiazek ma uruchamianie sesji oraz laczenie sie z baza danych z samym logowaniem ? Te funkcjonalnosci zupelnie do tej klasy nie pasuja. Pomysl - co tak naprawde powinna zawierac klasa do logowania - tak naprawde TYLKO to co jest zwiazane z logowanie uzytkownika smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
gcdreak
post 6.06.2009, 13:46:11
Post #3





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Tak, masz rację. A pozatym to co jeszcze myślicie o tej klasie? Zależy mi, żeby się od was dowiedzieć istotnych rzeczy dotyczących tworzenia systemu kontoroli autoryzacji. Może ktoś mi dokładnie powie, jak to powinno wyglądać bo już któryś dzień przeglądam www i ciężko jest znaleść coś sensownego i OO.
Go to the top of the page
+Quote Post
NuLL
post 6.06.2009, 14:19:23
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


http://phpgacl.sourceforge.net/ - polecam zapoznanie sie winksmiley.jpg


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
gcdreak
post 6.06.2009, 15:08:42
Post #5





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


To cały system, który nie jest mi zbyt potrzebny. Ponadto chcę się nauczyć.
Go to the top of the page
+Quote Post
marcio
post 6.06.2009, 18:27:44
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


http://wklej.org/id/101896/txt ja kiedys dla cwiczen tak to napisalem jednak teraz bym zmienil 2 rzeczy ale ogolnie klasa jest good jak chcesz to zobacz tongue.gif

Oczywiscie dla rejestracji i bazy danych mam osobne klasy.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
gcdreak
post 6.06.2009, 20:45:45
Post #7





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


No ciekawie to wygląda.
Ja w między czasie zacząłem tworzyć coś nowego. Proszę o uwagi i pewnie wielu powie, że powninienem odseparować połączenie z bazą. Niestety nie bardzo wiem jak to zrobić, ponieważ przeważnie mam z implementacją jednej klasy w drugiej. Jeśli by komuś się chciało to byłbym bardzo wdzięczny gdyby mi pokazał jak to napisać. Oto kod: http://wklej.org/id/101976/
Go to the top of the page
+Quote Post
marcio
post 6.06.2009, 21:45:47
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Po pierwsze funckja zarejestruj powinna byc w innej klasie to raz.

Dwa to co masz w costruct daj do klasy o nazwie Db czyli taki maly zarys jak to powinno wygladac:
  1. <?php
  2. class DB { public function connect() {
  3.  
  4.        if(!self::$db) {
  5.  
  6.            self::$db = @new mysqli('localhost', 'user', 'pass', 'base');
  7.  
  8.            if(@ self::$db->connect_errno) {
  9.  
  10.                     throw new Exception('Nie można połączyć się z bazą danych.');
  11.            }
  12.  
  13.        }
  14.  
  15.                else {
  16.            return self::$db;
  17.  
  18.        }
  19.  
  20.    }
  21.  
  22. }
  23.  
  24.  
  25. //tutaj twoja klasa Autoryzcja bez funckji zarejestruj z mala modyfikacja:
  26.  
  27. class Autoryzacja {
  28.  
  29. private $db;
  30.  public function __construct(DB $db) { przekazujesz obiekt bazy danych
  31.                                                                              
  32.    $this -> db = $db;
  33.    $this -> db -> connect(); // operujesz na przekazanym obiekcie
  34.    
  35. }
  36.  
  37. //i tutaj ta twoja funkcja zaloguj/wyloguj
  38.  
  39.  
  40. public function __construct(DB $db) {
  41.  
  42.    unset($this -> db);
  43.    
  44. }
  45.  
  46. }
  47. ?>

A rejestracja ma byc w osobnym pliku.

Tak mniej wiecej oczywiscie.

Aha o potem oczywiscie robisz tak:
  1. <?php
  2. $user = new Autoryzacja(new DB); // i potem reszta normalnie $user -> funkcja();
  3. ?>


Ten post edytował marcio 6.06.2009, 21:48:10


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
gcdreak
post 7.06.2009, 07:40:48
Post #9





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Kod
public function __construct(DB $db) {
  
    unset($this ->db);
      
    }


1.A dlaczego to jest tak? Dlaczego są dwa konstruktor?
2.Jeśli tworzę klasę rejstracja to poza samą rejstracją chcę w niej umieścić metody odzyskajHaslo(). Jakie jeszcze powinienem w niej umieścić metody?


Ten post edytował gcdreak 7.06.2009, 07:47:44
Go to the top of the page
+Quote Post
marcio
post 7.06.2009, 11:55:59
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(gcdreak @ 7.06.2009, 08:40:48 ) *
Kod
public function __construct(DB $db) {
  
     unset($this ->db);
        
     }


1.A dlaczego to jest tak? Dlaczego są dwa konstruktor?
2.Jeśli tworzę klasę rejstracja to poza samą rejstracją chcę w niej umieścić metody odzyskajHaslo(). Jakie jeszcze powinienem w niej umieścić metody?

Sorki literowka mial byc __destruct() tongue.gif poprostu na szybko pisalem.

Nom ogolnie co robia zawsze klasy rejestracji dodaja user'a i ewentualnie odzsykuja jego stare haslo potem jak to sobie juz zaimplementujesz to juz twoja sprawa czy bedziesz uzywal gettery/settery czu pola publiczne lub arg. funckji by ustawiac dane.

Zrob pokaz a my ci powiemy co i jak.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Moli
post 7.06.2009, 12:49:08
Post #11





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


  1. <?php
  2. #
  3.  
  4. function __get($var){
  5.  
  6. #
  7.  
  8.            return $this->$var;
  9.  
  10. #
  11.  
  12.        }
  13.  
  14. #
  15.  
  16.        
  17.  
  18. #
  19.  
  20.        function __set($var, $val){
  21.  
  22. #
  23.  
  24.            $this->$var = $val;
  25.  
  26. #
  27.  
  28.        }
  29. ?>

Bez sensu smile.gif
Go to the top of the page
+Quote Post
Kildyt
post 7.06.2009, 13:14:43
Post #12





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


Ale bajerujesz z komentarzami. tongue.gif Nie wystarczy jedno liniowy bez gwiazdek?
Używaj angielskim nazw funkcji, zmiennych itp.
Może spodobają ci się skrócone warunki?
Nie lepiej włączyć sesje w konstruktorze?
Polecam error_reporting(E_ALL).


--------------------
Go to the top of the page
+Quote Post
gcdreak
post 7.06.2009, 14:49:03
Post #13





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


@Moli
co Ci w tym nie pasuje?

Cytat(Kildyt @ 7.06.2009, 14:14:43 ) *
Używaj angielskim nazw funkcji, zmiennych itp.
Postanowiłem ten projekt zrealizować używając polskich nazw. Wszyscy używają angielskich i nie mówię, że to jest złe bo ang. to język programowania i dla wszystkich czytelne jest. Należy jednak zauważyć, że tego kodu będę używał tylko ja, a jeśli ktoś inny by chciał poużywać to i tak będzie to Polak.

Cytat(Kildyt @ 7.06.2009, 14:14:43 ) *
Może spodobają ci się skrócone warunki?
Możesz mi to dokładniej wytłumaczyć? Dać przykład?

Cytat(Kildyt @ 7.06.2009, 14:14:43 ) *
Nie lepiej włączyć sesje w konstruktorze?
Do sesji zrobię osobną klasę i pewnie zamieszcze ją, aby sie od Was dowiedzieć co można by zrobić lepiej. Może nawet dzisiaj ją wrzucę.

Cytat(Kildyt @ 7.06.2009, 14:14:43 ) *
Polecam error_reporting(E_ALL).
W php.ini mam:
Kod
error_reporting  =  E_ALL|E_STRICT & ~E_NOTICE
Go to the top of the page
+Quote Post
Kildyt
post 7.06.2009, 15:12:22
Post #14





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


Cytat(gcdreak @ 7.06.2009, 15:49:03 ) *
Możesz mi to dokładniej wytłumaczyć? Dać przykład?

Zamiast:
  1. <?php
  2. if(mysqli_errno($db)){
  3.  return false;
  4. }else{
  5.  return true;
  6. }
  7. ?>


masz:
  1. <?php
  2. if(mysqli_errno($db))
  3.  return false;
  4. else
  5.  return true;
  6. ?>

Osobiście dla mnie taki układ jest bardziej czytelny.


Co do angielskich nazw, to należy stosować się do tej zasady zawsze, nawet wtedy gdy programuje się tylko dla siebie ponieważ dobre nawyki trzeba u siebie wyuczyć od samego początku.


--------------------
Go to the top of the page
+Quote Post
phpion
post 7.06.2009, 15:17:02
Post #15





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Kildyt:
Jeśli usunięcie 4 znaków sprawia, że kod jest dla Ciebie bardziej czytelny to spoko smile.gif Jak już bawimy w skracanie warunków to można tak:
  1. <?php
  2. return mysqli_errno($db) ? false : true;
  3. ?>

lub wręcz:
  1. <?php
  2. return (bool)mysqli_errno($db);
  3. ?>
Go to the top of the page
+Quote Post
gcdreak
post 7.06.2009, 15:33:22
Post #16





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


@Kildyt:
Można i tak, ale to jest objętne, przeważnie piszę nawiasy.
Cytat(phpion @ 7.06.2009, 16:17:02 ) *
  1. <?php
  2. return (bool)mysqli_errno($db);
  3. ?>

Ciekawy sposób.

Zrobiłem klasę obsługi sesji:
Kod
session_start();

class ObslugaSesji
{
    
    private $login;


    public function __construct($login){
        $this->login = $login;
    }
    
    
    public function rozpocznijSesje(){
        if(!isset($_SESSION['zalogowany'])){
            $_SESSION['zalogowany'] = true;
            $_SESSION['login'] = $this->login;
        }else{
            session_regenerate_id();
        }
        return true;
    }

    
    public function zakonczSesje(){
        $zalogowany = $_SESSION['zalogowany'];
        session_destroy();
        unset($_SESSION['zalogowany'], $_SESSION['login']);
        if(!empty($zalogowany))
            return true;
        else
            return false;
    }
}


Teraz trochę o zastosowaniu tego.
1. W klasie Autoryzacja mam metodę wyloguj(). Myślałem, żeby do tej metody dopisać odniesienie do metody zakonczSesje() z klasy ObsługaSesji.
Jak to piwinienem zrobić?
2. W klasie Autoryzacja mam metodę zaloguj(). Myślałem, żeby do tej metody dopisać odniesienie do metody rozpocznijSesje() z klasy ObsługaSesji.
Jak to piwinienem zrobić?

Poza tym to co byście ewentualnie zmienili w tej klasie?
Go to the top of the page
+Quote Post
Kildyt
post 7.06.2009, 15:50:03
Post #17





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


Cytat(phpion @ 7.06.2009, 16:17:02 ) *
@Kildyt:
Jeśli usunięcie 4 znaków sprawia, że kod jest dla Ciebie bardziej czytelny to spoko smile.gif Jak już bawimy w skracanie warunków to można tak:
  1. <?php
  2. return mysqli_errno($db) ? false : true;
  3. ?>

lub wręcz:
  1. <?php
  2. return (bool)mysqli_errno($db);
  3. ?>


No mam tak. biggrin.gif Ściśle staram się zachować przejrzystość kodu, tabulację i usunięcie dwóch linijek, w którym są same klamry czynią, że kod wydaje się bardziej przejrzysty. winksmiley.jpg

Drugiego sposobu nie znam, ale i tak uważam, że oba nie powinno się stosować ponieważ są one trochę wyjęte z sufitu.


--------------------
Go to the top of the page
+Quote Post
Moli
post 7.06.2009, 18:48:08
Post #18





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


@gcdreak - Jak pisałem jest to bez sensu. Metody magiczne get i set, powinno się używać jeśli zmienne przetrzymujesz np. w tablicach. Czym będzie się różnić ten kod:
  1. <?php
  2.  
  3. class klasa
  4. {
  5.    public function __set($name,$value)
  6.    {
  7.        $this->{$name} = $value;
  8.    }
  9.  
  10.    public function __get($name)
  11.    {
  12.        return $this->{$name};
  13.    }
  14. }
  15.  
  16. $class = new klasa;
  17. $class->var = 'test';
  18. echo $class->var;
  19.  
  20. ?>

od tego:
  1. <?php
  2.  
  3. class klasa
  4. {
  5.    
  6. }
  7.  
  8. $class = new klasa;
  9. $class->var = 'test';
  10. echo $class->var;
  11.  
  12. ?>


Odpowiedź: Oprócz większego kodu - niczym.

Ten post edytował Moli 7.06.2009, 18:52:29
Go to the top of the page
+Quote Post
gcdreak
post 7.06.2009, 19:30:51
Post #19





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


To ciekawe co piszesz odnośnie metod magicznych, bo nigdy o tym nie słyszałem i dlatego trochę bez sensu (z tego wynika) ich użyłem.
Możesz podać jakiś przykład?

Proszę jeszcze o odpowiedź na moje pytania, które zamieściłem wyżej - odnośnie metod klasy ObslugaSesji
Go to the top of the page
+Quote Post
Moli
post 8.06.2009, 09:44:04
Post #20





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


  1. <?php
  2.  
  3. class klasa
  4. {
  5.    public $Config=array();
  6.  
  7.    public function __set($name,$value)
  8.    {
  9.        $this->Config[$name] = $value;
  10.    }
  11.        
  12.    public function __get($name)
  13.    {
  14.        return $this->Config[$name];
  15.    }
  16. }
  17.  
  18. $class = new klasa;
  19. $class->var = 'test';
  20. echo $class->var;
  21. var_dump($class->Config);
  22. ?>

Oczywiście tablice to tylko prosty przykład. Zastosować metod magicznych jest wiele smile.gif
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:10