Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OO] Hasła w pliku końcowym
Forum PHP.pl > Forum > Przedszkole
primo
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
silent
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. ?>
primo
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
Jojo
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?
primo
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
silent
Pokaż jak próbowałeś, bo nie może nie działać.
primo
no dokładknie jak Jojo pokazał oraz deklaracja:

  1. <?php
  2. $bd = new BD ()
  3. ?>
silent
Ok, a wywaliłeś wtedy funkcję BD() z ciała klasy?
primo
no, nie.
Jojo
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.
silent
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.
primo
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
MoD
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.
Jojo
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?
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.