Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] OOP PDO wyszukiwanie w bazie, jw
miras
post
Post #1





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


Witam, mam pewną klasę w niej obiekt pdo (uprzedzając podpowiedzi:)) i pewną funkcję, która odpowiada za sprawdzanie czy w bazie istnieje dany user czy nie jednak coś nie śmiga...



  1. public function login($login, $password) {
  2. $this->login = $login;
  3. $this->password = $password;
  4. $this->check_data = $this->pdo -> query("SELECT mail, haslo FROM users WHERE `mail`='$this->login' AND `haslo`='$this->password'");
  5. if (!empty($this->check_data)) {
  6. return "wszystko ok";
  7. }
  8. }


jak to "usprawnić" ?

Dzięki z góry!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
piotr.pasich
post
Post #2





Grupa: Zarejestrowani
Postów: 27
Pomógł: 4
Dołączył: 27.01.2012
Skąd: Gliwice

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


Przede wszystkim PDO jest po to, żeby uniknąć czystych zapytań MySQL, czyli powinno być coś w stylu:

$this->check_data = $this->pdo->select('users')
->fields(array('mail', 'haslo'))
->andWhere('mail = ?', $this->login)
->andWhere('haslo = ?', $this->password);

W ten sposób uzyskujesz minimum bezpieczeństwa. W swoim skrypcie masz bardzo poważny problem z SQJ injection.

Dodatkowo nie powinieneś mieć $this->login i $this->password tylko przekazać np obiekt usera i mieć $user->login i $user->password . Byłoby super gdyby było to pobierane przez metody np. $user->getLogin(), oraz $user->getPassword(). Przy czym password pamiętaj, że powinno być szyfrowane, czyli po zbindowaniu z formularza logowania ustawiasz najlepiej plainPasswod, które jest później konwertowane.

Za dużo w ogole operujesz na properiesach. Nie musisz ustawiac wszystkiego jako nowe pola w klasie. To bez sensu. Metoda ma zwócić tylko informację czy użytkownik może się zalogować czy nie. Przy czym return "wszystko ok"; raczej odpada. Daj return !empty($this->check_data) - zwróci true, albo false. Pomijasz wtedy w ogóle ifa.

Dodatkowo z tego co widzę to metoda nazywa się login.. przy czym nie loguje użytkownika tylko sprawdza czy istnieje w bazie danych. Powinna się nazywać zupełnie inaczej np. userExists($login, $password) i być wywoływaną przez login gdzie będzie ustawiana sesja.

Trochę chaotycznie, ale zawsze (IMG:style_emoticons/default/smile.gif)

Najlepiej wrzuć na githuba (IMG:style_emoticons/default/smile.gif)

Zapraszam też do głosowania na agendę http://www.phpcon.pl/2013/pl/agenda (IMG:style_emoticons/default/smile.gif)

Piotr Pasich

Ten post edytował piotr.pasich 7.08.2013, 20:10:22
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: 14.10.2025 - 15:46