Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP i klasy
woolf864
post 21.04.2007, 14:32:07
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.12.2006

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


Twoże sobie ładną klase
  1. <?php
  2. class db_driver {
  3. private $dane = array ( "sql_database"  => "pav"  ,
  4.  "sql_user"  => "root"  ,
  5.  "sql_pass"  => ""  ,
  6.  "sql_host"  => "localhost",
  7.  "sql_tbl_prefix"  => ""  ,
  8.  );
  9. private $wynik;
  10. private $connection_id;
  11. function __construct($get = false, $host = '', $user = '', $pass = '', $db = '', $prefix = ''){
  12. if($get){
  13. $this->dane['sql_host'] = $host;
  14. $this->dane['sql_user'] = $user;
  15. $this->dane['sql_pass'] = $pass;
  16. $this->dane['sql_database'] = $db;
  17. $this->dane['sql_tbl_prefix'] = $prefix;
  18. }
  19. $this->connect();
  20. }
  21. ...
  22. public function select($array ,$wypisz = false){
  23. //kolumny
  24. $select = "SELECT ".implode(", ", $array['select']);
  25. //z tabel
  26. $select .= " FROM ".implode(", ", $array['from']);
  27. //jezeli podany warunek to dodac
  28. if(isset($array['where']))
  29. $select .= " WHERE ".$array['where'];
  30. //w razie czego dodac listowanie po kolumnie
  31. if(isset($array['order']))
  32. $select .= " ORDER ".$array['order'];
  33. //LIMIT
  34. if(isset($array['limit']))
  35. $select .= " LIMIT ".$array['limit'];
  36. //w razie czego wypisuje zapytanie
  37. if($wypisz)
  38. echo $select.'<BR><BR>';
  39. return $this->query($select);
  40. }
  41. ...
  42. private function query($querry){
  43. $this->wynik = mysql_query($querry, $this->connection_id);
  44. return $this->wynik;
  45. }
  46. ...
  47. }
  48. ?>

i zapisuje w pliku sql.php
potem importuje ten plik do pliku index.php, jakis inny plik jeszcze czyli logowanie.php
następnie inicjuje obiekt:
  1. <?php
  2. require_once('dane.php');
  3. require_once('klasy/sql/sql.php');
  4. require_once('klasy/logowanie.php');
  5. $DB = new db_driver(true, $dane['host'], $dane['user'], $dane['haslo'], $dane['baza'], $dane['prefix']);
  6. ?>

i robi się problem
bo moge działać na $DB i korzystać z tego tylko w plikach index.php i sql.php
w index.php i sql.php to działa:
  1. <?php
  2. $array = array(
  3. 'select' => array(
  4. '*',
  5. ),
  6. 'from' => array(
  7. 'users',
  8. ),
  9. 'where' => 'user = abc',
  10. );
  11. $wynik = $DB->select($array, true);
  12. ?>

jak identyczny kod skopiuje do pliku logowanie.php to już wywala błąd:
Kod
Notice: Undefined variable: DB in E:\apache\htdocs\tac_by_wolfi\klasy\logowanie.php on line 56

Fatal error: Call to a member function select() on a non-object in E:\apache\htdocs\tac_by_wolfi\klasy\logowanie.php on line 56


pytanie brzmi: dlaczego tak się dzieje
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
rojmarek
post 21.04.2007, 14:37:04
Post #2





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 10.09.2005

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


pokaz z laski swojej daj kod logowanie.php... bo kody raczej nie są identyczne, skoro chodzi o linijke 56..
Go to the top of the page
+Quote Post
woolf864
post 21.04.2007, 14:53:57
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.12.2006

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


  1. <?php
  2. class logowanie {
  3. public $dane = array(
  4. 'id' => '0',
  5. 'login' => '',
  6. 'p_dostepu' => '0',
  7. );
  8. public $zalogowany = false;
  9. private $sesja;
  10. private $s_sesja;
  11. function __construct($login = 'zly', $klucz = 'typ', $logowanie = true){
  12. if($logowanie){
  13. $wynik = $this->login($login, $klucz);
  14. }
  15. else{
  16. }
  17. }
  18. private function login($login, $pass){
  19. $array = array(
  20. 'select' => array(
  21. '*',
  22. ),
  23. 'from' => array(
  24. 'users',
  25. ),
  26. 'where' => 'user = '.$login,
  27. );
  28. $wynik = $DB->select($array, true);
  29. return $wynik;
  30. }
  31. private function logged_in($login, $session){
  32. }
  33. }
  34. ?>


teraz to będzie:

Kod
Notice: Undefined variable: DB in E:\apache\htdocs\tac_by_wolfi\klasy\logowanie.php on line 28

Fatal error: Call to a member function select() on a non-object in E:\apache\htdocs\tac_by_wolfi\klasy\logowanie.php on line 28


skasowałem swoje komentarze do pliku winksmiley.jpg
Go to the top of the page
+Quote Post
NuLL
post 21.04.2007, 15:15:29
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%)
-----


Zastanow sie czym jest zmienne $DB w metodzie login, przeciez niczym czy nie ? winksmiley.jpg Moze warto ja jakos przekazac ?


--------------------
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
woolf864
post 21.04.2007, 15:27:36
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.12.2006

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


pytanie jak to zrobić winksmiley.jpg
taka myśl mnie nurtowała ale nie miałem pojęcia jak tongue.gif
Go to the top of the page
+Quote Post
Sedziwoj
post 21.04.2007, 18:38:55
Post #6





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


A np. wykorzystując wzorzec singletona w DB i tworząc nowy obiekt wewnątrz logowanie, tylko że wtedy jest kłopot z danymi o połączeniu...


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:13