Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Rozwiązanie problemu w klasie
Forum PHP.pl > Forum > Przedszkole
Matado
Piszę dla siebie klasę do logowania. Jak widać, jest w niej wylogowywanie, logowanie, ale sprawdzanie hasła takiego prawdziwego jeszcze nie ma.
Zrobię to w najbliższym czasie, razem z soleniem hasła + sha1. Ale mniejsza o to.

Mam małe pytanie jeśli chodzi o metodę get(). Wydaje mi się że trochę brzydko wygląda łączenie się z bazą danych w jednej klasie odpowiadającej za logowanie. Jak skonstruowalibyście tą metodę get(), żeby pobierała dane, ale bez łączenia się z bazą?
Czy dobrym pomysłem jest tu zrobienie osobnej klasy, która łączy się z bazą i pobiera dane, dalej include do pliku z klasą itd?

  1. <?php
  2.  
  3.  
  4. class Auth
  5. {
  6.    private $name;
  7.    private $password;
  8.    public $messages;
  9.  
  10.    public function get()
  11.    {
  12.        $pdo= new PDO ('mysql:host=localhost;dbname=trial','root','');
  13.        $stmt= $pdo-> prepare ('SELECT name,password FROM experiment WHERE name=:name ');
  14.        $stmt-> bindValue (':name', $_POST['username'] , PDO::PARAM_STR);
  15.        $stmt-> execute();
  16.      
  17.        while ($row= $stmt-> fetch())
  18.        {
  19.            $this-> name= $row['name'];
  20.            $this-> password= $row['password'];
  21.        }
  22.        $stmt-> closeCursor();
  23.    }
  24.    
  25.    public function login($login, $pass)
  26.    {
  27.        if (! empty($login) && ! empty($pass))
  28.        {
  29.            if ($this-> name== $login && $this-> password== $pass)
  30.            {
  31.                $_SESSION['user']= $this-> name;
  32.                $this-> messages= 'Welcome: ' . $_SESSION['user']
  33.                . ' <a href="execute.php?logout=true">Signout</a>';
  34.            }
  35.            else
  36.            {
  37.                $this-> messages= 'Invalid username or password';
  38.            }
  39.        }
  40.        else
  41.        {
  42.            $this-> messages= 'Fill in all fields';
  43.        }
  44.    }
  45.    
  46.    public function signout()
  47.    {
  48.        if ($_GET['logout'])
  49.        {
  50.            unset ($_SESSION['user']);
  51.            session_destroy();
  52.            session_regenerate_id;
  53.            header ("Location: form.php");
  54.        }
  55.    }
  56.    
  57.    public function show()
  58.    {
  59.        return $this-> messages;
  60.    }
  61. }
  62.  
  63. ?>
TomASS
Cytat(Matado @ 3.04.2009, 22:39:23 ) *
Czy dobrym pomysłem jest tu zrobienie osobnej klasy, która łączy się z bazą i pobiera dane, dalej include do pliku z klasą itd?

Tak - dobrym pomysłem jest smile.gif

Np. taka klasa
pejott
A ja bym powiedział, że taka klasa... PDO. http://pl.php.net/pdo, jeśli tylko masz PHP5. ; >

Pozdrawiam.
Matado
Ok, dzięki. Myślałem też żeby do tej klasy wrzucić ORM zamiast zapytań w SQL, żeby to porządniej wyglądało, ale nie wiem czy się opłaca.
Niby wydajność by spadła, ale przy małej liczbie użytkowników wydalałoby, no i bardziej czytelny kod.

@pejott a w czym to jest zrobione 15 linijka kodu blink.gif
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-2025 Invision Power Services, Inc.