![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 2.10.2006 Skąd: Wrocław Ostrzeżenie: (0%)
|
Witam.
Mam do was prośbę - chcę wrzucić do klasy wszystkie ważniejsze odwołania do MySQL'a ale mam problem z samą funkcją połączenia się z bazą danych. Nie mogę coś napisać tego. O ile sama funkcja działa o tyle w klasie już coś nie chce. Możecie mi z tym pomóc ? Będę bardzo wdzięczny (IMG:style_emoticons/default/smile.gif)
Ogólnie to chciałem aby stworzyć bezpieczne logowanie się do serwera mysql i tak aby nikt niepowołany nie mógł wywołać z zewnątrz klasy funkcji DB_Connect - niestety moje starania na nic się nie zdały pomimo iż rozszerzenie klasy jest napisane poprawnie (no może jakiś błąd w deklaracji funkcji w rozszerzeniu klasy) Ewentualnie jeżeli możecie mi doradzić jak co zmienić aby było bezpieczniejsze i co źle robię w tym przykładzie (IMG:style_emoticons/default/sad.gif) Ten post edytował Setesh 29.01.2011, 23:41:35 |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%)
|
Mam jedno pytanie: po co Ty to w ogóle robisz skoro możesz wykorzystać (rozszerzyć) gotową klasę PDO będącą już niemal standardem? Poprawne korzystanie z PDO zapewnia lepsze bezpieczeństwo niż kolejna implementacja opakowywania strukturalnego kodu w klasy. W temacie:
- gdzie w klasie BazaMySql masz zdefiniowaną metodę DB_Connect do której się odwołujesz, bo nigdzie jej nie widać? - dlaczego w klasie bazowej wywołujesz metodę, której definicja znajduje się w klasie wyprowadzonej? |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 2.10.2006 Skąd: Wrocław Ostrzeżenie: (0%)
|
O PDO nic nie wiedziałem a po za tym nie wiedziałbym na razie jak to wykorzystać - znalazłem manual o PDO ale trochę mi to zajmie aby się o tym nauczyć.
Odnośnie wywoływania funkcji... Ok jestem nowy w php ale nigdzie w przykładach nie widziałem aby wcześniej było trzeba deklarować funkcję będącą poza klasą główną - zawsze było coś w stylu Funk1(){..}, funk2(){...} i w rozszerzeniu była funk3(){...}. więc nie wiem jak to w php zrobić (IMG:style_emoticons/default/sad.gif) |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%)
|
(IMG:style_emoticons/default/blinksmiley.gif) Ok, to inaczej - gdzie w klasie BazaMySQL znajduje się metoda, którą wywołujesz w konstruktorze poprzez wywołanie $this->DB_Connect('Nazwa_bazy');? Nie można odwołać się do czegoś, co jeszcze nie istnieje.
// edit a dziedziczymy z góry w dół, gdzie góra to klasa bazowa, a dół to klasa najbardziej wyprowadzona: bazowa <------ Ty tu wywołujesz metodę, która... | wyprowadzona1 <----- ... znajduje się tutaj | wyprowadzona2 Ten post edytował darko 30.01.2011, 00:27:44 |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 2.10.2006 Skąd: Wrocław Ostrzeżenie: (0%)
|
Znaczy się tak : ? (nie mam obecnie dostępu so php i mysql na tym komputerze - jestem poza domem)
Jeżeli tak to czy aby ta funkcja mogła być wywołana tylko z klasy głównej z konstruktora to nie powinienem ustawić jej jako protected lub jako private ? |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%)
|
sześć kwestii:
1. po co definiujesz metodę DB_Connect w klasie BazaMySQL i wywołujesz ją w konstruktorze skoro dalej w klasie potomnej ją nadpisujesz, czemu to ma służyć? 2. w konstruktorze klasy wyprowadzonej (którego nie zdefiniowałeś) wywołaj konstruktor klasy nadrzędnej (parent::__construct) 3. po co Ci dwie klasy do obsługi tej implementacji, którą tu uskuteczniasz, nie wystarczy jedna? 4. poczytaj o podstawach obiektowego programowania bo widzę, że się gubisz 5. nie używaj globali, przekazuj zmienne w parametrach metod lub konstruktorów 6. skorzystaj jednak z PDO nadpisując klasę bazową albo w ogóle jej nie nadpisuj, ale naucz się z niej korzystać i z pewnością wyjdzie Ci to na dobre. Owocnej nauki. |
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 02:47 |