Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] 2 klasy i łatwe poruszanie się po nich
Forum PHP.pl > Forum > PHP
Lejto
Mam 2 klasy w 2 plikach i 1 plik i nazwie admin.php. 1 klasa służy do łączenia z mysql a 2 do zalogowania.
Fragment 1 klasy
  1. <?php
  2. class mysql
  3. {
  4.    private $lacz;
  5.    
  6.    public function __construct()
  7.    {
  8.        $this->lacz = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  9.  
  10.    }
  11.    public function __dectruct()
  12.    {
  13.        $this->lacz->close();
  14.    }
  15. }
  16. ....[...]....
  17. ?>

tu jest wszystko ok
dalej 2 klasa
  1. <?php
  2. class Auth extends mysql{
  3.    public function authUser($nick, $pass)
  4.    {
  5.        $q = 'SELECT * FROM admin where nick = "'.$nick.'" and pass = "'.sha1($pass).'"';
  6.        $r = mysql::$this->lacz->query($q);
  7.        
  8.        if(mysql::$this->lacz->num_rows($r) == 1)
  9.        {
  10.            return true;
  11.        }
  12.        else
  13.        {
  14.            return false;
  15.        }
  16.    }
  17. }
  18. ?>

i plik admin.php
  1. <?php
  2. include("db.class.php");
  3. $db = new mysql();
  4.  
  5. include("login.class.php");
  6. $log = new Auth();
  7.  
  8. $log->authUser('aaa','1111');
  9. ?>

gdy to wszystko odpalam to mi woła że nie mam połączenia z mysql i że query nie ma obiektu
źle to zintegrowałem? nie wywołałem poprawnie klasy mysql żeby mi się połączyło z klasie Auth?
nospor
nie:private $lacz;
a: protected $lacz;

Doczytaj sobie jakie są roznice miedzy private, protected a public
Lejto
ok dzięki już wiem zmieniłem ale jeszcze wywala błąd w num_rows ;/
Kod
Fatal error: Call to undefined method mysqli::num_rows() in C:\Serv\www\spin\login.class.php on line 8
nospor
komunikat dosc wyraźny: $lacz nie ma metody num_rows.
Zajrzyj do manuala a dowiesz sie jaki obiekt ma te metode
http://pl.php.net/manual/pl/book.mysqli.php
Lejto
muszę jeszcze w to włączyć wywołane query nie?
zrobiłem tak:
  1. <?php
  2. if(mysql::$this->lacz->$r->num_rows($r) == 1)
  3.        {
  4.            return true;
  5.        }
  6. ?>

i teraz jeszcze inny błąd
Kod
Catchable fatal error: Object of class mysqli_result could not be converted to string in C:\Serv\www\spin\login.class.php on line 8
nospor
przeciez query to samo $r:
$r = mysql::$this->lacz->query($q);

nie:mysql::$this->lacz->$r->num_rows($r)
a:mysql::$r->num_rows

link do manuala podalem ci nie bez powodu
http://pl.php.net/manual/pl/mysqli-result.num-rows.php
Lejto
ok zrobiłem
ale teraz daje błąd co do uprawnień
Kod
Fatal error: Access to undeclared static property: mysql::$r in C:\Serv\www\spin\login.class.php on line 8
nexis
  1. <?php
  2. class mysql
  3. {
  4.    protected $_lacz;
  5.    
  6.    public function __construct()
  7.    {
  8.        $this->_lacz = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  9.    }
  10.    public function __destruct()
  11.    {
  12.        $this->_lacz->close();
  13.    }
  14. }
  15. ?>


  1. <?php
  2. class Auth extends mysql
  3. {
  4.    public function authUser($nick, $pass)
  5.    {
  6.        $q = sprintf
  7.            (
  8.                "SELECT * FROM `admin` WHERE `nick` = '%s' AND `pass` = '%s'",
  9.                $nick,
  10.                sha1($pass)
  11.            );
  12.        $r = $this->_lacz->query($q);
  13.        
  14.        return $r->num_rows == 1;
  15.    }
  16. }
  17. ?>
Lejto
ok działa, ale ta mała zmiana nie mówię o num_rows czemu ma służyć? bezpieczeństwu?
Mephistofeles
Autoryzacja nie powinna dziedziczyć po bazie - bo czy telefonistka dziedziczy po telefonie ;]?
Przekazuj połączenie w konstruktorze, albo użyj np. singletona/rejestru.
Poza tym mylisz zmienne statyczne z normalnymi - ten komunikat
Kod
Fatal error: Access to undeclared static property: mysql::$r in C:\Serv\www\spin\login.class.php on line 8

o tym mówi.
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.