Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] 2 klasy i łatwe poruszanie się po nich
Lejto
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




nie:private $lacz;
a: protected $lacz;

Doczytaj sobie jakie są roznice miedzy private, protected a public


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Lejto
post
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Lejto
post
Post #5





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Lejto
post
Post #7





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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


--------------------
Go to the top of the page
+Quote Post
nexis
post
Post #8





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


  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. ?>


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
Lejto
post
Post #9





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


ok działa, ale ta mała zmiana nie mówię o num_rows czemu ma służyć? bezpieczeństwu?


--------------------
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #10





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


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.

Ten post edytował Mephistofeles 13.03.2009, 15:59:35
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: 20.08.2025 - 11:57