Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP i klasy
Forum PHP.pl > Forum > PHP
woolf864
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
rojmarek
pokaz z laski swojej daj kod logowanie.php... bo kody raczej nie są identyczne, skoro chodzi o linijke 56..
woolf864
  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
NuLL
Zastanow sie czym jest zmienne $DB w metodzie login, przeciez niczym czy nie ? winksmiley.jpg Moze warto ja jakos przekazac ?
woolf864
pytanie jak to zrobić winksmiley.jpg
taka myśl mnie nurtowała ale nie miałem pojęcia jak tongue.gif
Sedziwoj
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...
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.