Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [OO] Hasła w pliku końcowym, Programowanie obiektowe klasa BD
primo
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


Witam,

odkąd zacząłem czytać wszystko co mi wpadło w rękę odnośnie php to zawsze ucierało się przeświadczenie, że tworząc sobie plik z funckjami bazy to w nim wpisywało się hasło, bazę i dalej tylko icludowało się taki gotowiec i o haśle się nie myślało, bo było w jednym miejscu.
Teraz o stopień wyżej zacząłem czyli OO i tu mam następujący problem. Poniżej znajduje się klasa BD:

  1. <?php
  2. class BD
  3. {
  4. // parametry połączeniowe
  5. var $wezel = '';
  6. var $uzytkownik = '';
  7. var $haslo = '';
  8. var $bazadanych= '';
  9. var $trwale = false;
  10.  
  11. // identyfikator połączenia z bazą danych
  12. var $pol = NULL;
  13.  
  14. // wynik zapytania
  15. var $wynik = false;
  16.  
  17. function BD($wezel, $uzytkownik, $haslo, $bazadanych, $trwale = false)
  18. {
  19. $this->wezel = $wezel;
  20. $this->uzytkownik = $uzytkownik;
  21. $this->haslo = $haslo;
  22. $this->bazadanych = $bazadanych;
  23. $this->trwale = $trwale;
  24. }
  25.  
  26. function otworz()
  27. {
  28. // wybierz właściwą funkcję połączeniową
  29. if ($this->trwale) {
  30. $funkcja = 'mysql_pconnect';
  31. } else {
  32. $funkcja = 'mysql_connect';
  33. }
  34.  
  35. // nawiąż połączenie z serwerem MySQL
  36. $this->pol = $funkcja($this->wezel, $this->uzytkownik, $this->haslo);
  37. if (!$this->pol) {
  38. return false;
  39. }
  40.  
  41. // ustaw wskazaną bazę danych jako bieżącą
  42. if (!@mysql_select_db($this->bazadanych, $this->pol)) {
  43. return false;
  44. }
  45.  
  46. return true;
  47. }
  48.  
  49. function zamknij()
  50. {
  51. return (@mysql_close($this->pol));
  52. }
  53.  
  54. function blad()
  55. {
  56. return (mysql_error());
  57. }
  58.  
  59. function zapytaj($zapytanie = '')
  60. {
  61. $this->wynik = @mysql_query($zapytanie, $this->pol);
  62.  
  63. return ($this->wynik != false);
  64. }
  65.  
  66. function liczbaZmienionychWierszy()
  67. {
  68. return (@mysql_affected_rows($this->pol));
  69. }
  70.  
  71. function liczbaWierszy()
  72. {
  73. return (@mysql_num_rows($this->wynik));
  74. }
  75.  
  76. function pobierzObiekt()
  77. {
  78. return (@mysql_fetch_object($this->wynik, MYSQL_ASSOC));
  79. }
  80.  
  81. function pobierzTablice()
  82. {
  83. return (@mysql_fetch_array($this->wynik, MYSQL_NUM));
  84. }
  85.  
  86. function pobierzTabliceAsocjacyjna()
  87. {
  88. return (@mysql_fetch_assoc($this->wynik));
  89. }
  90.  
  91. function zwolnijZbiorWynikowy()
  92. {
  93. return (@mysql_free_result($this->wynik));
  94. }
  95. }
  96. ?>


teraz jak wywołuję tą klasę w jakimś innym pliku:
załączam go przez indlude i później wywołuję:

  1. <?php
  2. $bd = new BD ('db.st.interia.pl', '11111', '11111', 'db11111');
  3. ?>



no i tu tkwi problem, że za każdym razem jak wywyłuję tą klasę to muszę to klepać we wszystkich osobnych plikach, znowu jak chciałem określić te parametry w ciele klasy to mi określa złego użytkownika.

pozdrawiam


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
silent
post
Post #2





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.08.2004
Skąd: Jastrzębie Zdrój

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


Przecież możesz includować sobie wszędzie plik np config.php w którym będzie:
  1. <?php
  2. $dbhost='localhost';
  3. $dbuser='user';
  4. $dbpass='pass';
  5. $dbname='jakas_baza';
  6. ?>

a później:
  1. <?php
  2.  
  3. include('config.php');
  4. $db=new BD($dbhost,$dbuser,$dbpass,$dbname);
  5. ?>
Go to the top of the page
+Quote Post
primo
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


no myślałem o takim sposobie, ale w sumie to wolę mieć to rozwiązane w jeszcze prostszy sposób. Czy nie da rady określić tych argumentów już w samej klasie questionmark.gif


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Jojo
post
Post #4





Grupa: Zarejestrowani
Postów: 405
Pomógł: 1
Dołączył: 19.09.2003
Skąd: Lublin

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


Hmm ja nie rozumiem w czym problem:
  1. <?php
  2. class BD
  3. {
  4. // parametry połączeniowe
  5. var $wezel = 'db.st.interia.pl';
  6. var $uzytkownik = '11111';
  7. var $haslo = '11111';
  8. var $bazadanych= 'db11111';
  9. var $trwale = false;
  10.  
  11. // (...)
  12.  
  13. }?>

O coś takiego Ci chodzi?


--------------------
Rozwój cywilizacji informatycznej to wyścig między programistami, którzy wytwarzają coraz łatwiejsze
programy użytkowe dla idiotów, a światem produkującym coraz lepszych gatunkowo idiotów.

Blog: Małolepszy.info
Go to the top of the page
+Quote Post
primo
post
Post #5





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


dokładnie właśnie o coś takiego, z tym że ten sposób nie działa. Próbowałem przed zadaniem pytania winksmiley.jpg


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
silent
post
Post #6





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.08.2004
Skąd: Jastrzębie Zdrój

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


Pokaż jak próbowałeś, bo nie może nie działać.
Go to the top of the page
+Quote Post
primo
post
Post #7





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


no dokładknie jak Jojo pokazał oraz deklaracja:

  1. <?php
  2. $bd = new BD ()
  3. ?>


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
silent
post
Post #8





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.08.2004
Skąd: Jastrzębie Zdrój

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


Ok, a wywaliłeś wtedy funkcję BD() z ciała klasy?
Go to the top of the page
+Quote Post
primo
post
Post #9





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


no, nie.


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Jojo
post
Post #10





Grupa: Zarejestrowani
Postów: 405
Pomógł: 1
Dołączył: 19.09.2003
Skąd: Lublin

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


Tak odbiegając nieco od tematu, to sądzę, że ta klasa jest kompletnie bezużyteczna. Poza wybieraniem rodzaju połączenia (connect/pconnect) nie robi praktycznie nic. Są tam tylko i wyłącznie aliasy dla wbudownych funkcji php. AFAIK może to bardzo spowolnić wykonywanie skryptu.
Dorobiłbyś do tego chociaż jakąś obsługę błędów albo pomiar czasu, aby to miało jakąkolwiek rację bytu.


--------------------
Rozwój cywilizacji informatycznej to wyścig między programistami, którzy wytwarzają coraz łatwiejsze
programy użytkowe dla idiotów, a światem produkującym coraz lepszych gatunkowo idiotów.

Blog: Małolepszy.info
Go to the top of the page
+Quote Post
silent
post
Post #11





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.08.2004
Skąd: Jastrzębie Zdrój

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


Cytat(primo @ 2004-10-20 21:37:07)
no, nie.

No to wywal, bo jeśli masz:
  1. <?php
  2. class BD
  3. {
  4. // parametry połączeniowe
  5. var $wezel = 'localhost';
  6. var $uzytkownik = 'user';
  7. var $haslo = 'pass';
  8. var $bazadanych= 'database';
  9. var $trwale = false;
  10.  
  11. // identyfikator połączenia z bazą danych
  12. var $pol = NULL;
  13.  
  14. // wynik zapytania
  15. var $wynik = false;
  16.  
  17. function BD($wezel, $uzytkownik, $haslo, $bazadanych, $trwale = false)
  18. {
  19. $this->wezel = $wezel;
  20. $this->uzytkownik = $uzytkownik;
  21. $this->haslo = $haslo;
  22. $this->bazadanych = $bazadanych;
  23. $this->trwale = $trwale;
  24. }
  25. //......
  26. }
  27.  
  28. ?>

To tworząc obiekt:
  1. <?php
  2.  
  3. $bd=new BD();
  4.  
  5. ?>

Wywołujesz konstruktor bez parametrów, więc nadpisuje te wpisane wartości zmiennych wartościami pustymi.
Go to the top of the page
+Quote Post
primo
post
Post #12





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


odpowiadając koledze Jojo. W sumie to i masz rację, ale naukę obiektówki, tak sądzę, najlepiej zacząć od rzeczy łatwych, które zna się w miarę dobrze. Teraz będę próbował sił, dopisać funckję obsługującą prowadzenie witryny wypożyczalni a taki obiekt w postaci klasy dostępu do bazy będzie bez mała użyteczny. Bez powiązań z innymi obiektami faktycznie jest bezużyteczny, ale jak już dojdzie z kolejnych kilka klas to to się zmieni.

pozdrawiam


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
MoD
post
Post #13





Grupa: Zarejestrowani
Postów: 193
Pomógł: 0
Dołączył: 14.09.2003
Skąd: Brodnica (koło Torunia)

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


Jojo, przecież tę klasę można rozbudować jeszcze np. o obsługę PostgreSQL, żeby w skryptcie wszędzie nie pisać
  1. <?php
  2. //(...)
  3.  
  4. if ( $db_type = 'mysql' )
  5. {
  6. mysql_query( $sql );
  7. }
  8. elseif ( $db_type = 'postgresql' )
  9. {
  10. pg_query( $handle, $sql );
  11. }
  12.  
  13. //(...)
  14. ?>

tylko po prostu wywołać konstruktor z typem bazy i klasa sama wywoła funckję. Tak więc ta klasa ma szansę bytu i nie jest całkowicie bez sensu.


--------------------
Go to the top of the page
+Quote Post
Jojo
post
Post #14





Grupa: Zarejestrowani
Postów: 405
Pomógł: 1
Dołączył: 19.09.2003
Skąd: Lublin

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


MoD: Zgoda, ale ja się wypowiadam na temat kodu, który widzę kilka postów wyżej, a nie ewentualnych możliwości jego rozbudowy. Tamten konkretny kod jest kompletnie bezwartościowy.
primo: Masz rację, że zaczynasz naukę od czegoś prostego. Obiekt w postaci klasy dostępu do bazy też Ci się przyda. Jest tylko jedno ale. Po co tworzyć taki obiekt jeśli nie oferuje on żadnej dodatkowej funkcjonalności ponad tą, którą oferuje nam samo php?


--------------------
Rozwój cywilizacji informatycznej to wyścig między programistami, którzy wytwarzają coraz łatwiejsze
programy użytkowe dla idiotów, a światem produkującym coraz lepszych gatunkowo idiotów.

Blog: Małolepszy.info
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 - 07:53