Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: OO,bazy danych, smarty, bezpieczeństwo
Forum PHP.pl > Forum > PHP > Object-oriented programming
Arkon
Witam.
Wcześniej pisałem strukturalnie, teraz doszedłem do wniosku, że mój kod jest tak zabałaganiony iż każda zmiana trwa długooo a wszystkie inne osoby modyfikujące kod z pewnośćia kierują w moją strone różne niemiłe epitety winksmiley.jpg
Wcześniej uważałem że OO to przerost formy nad treścią ale teraz gdy serwis staje się coraz bardziej rozbudowany a OO taakkiee modne cool.gif postanowiłem o tym przeczytać. Okazało się całkiem sympatycznie. To zabieram sie za to! I...
Poniżej przedstawiam liste pytań, które mnie nurtują, jeśli możecie odpowiadajcie jak najbardziej lopatologicznie, podajcie linki z ciekawymi wiadomościami lub chociaż słowa które mogę przegooglowac. Nie wszystkie dotyczą OO ale jak już sie brać za przepiswyanie kodu to w całości i ładnie( i po co zaśmiecać forum smile.gif ). Niektórym osobom problemy mogą wydawać się oczywiste ale dla mnie nie są wiec nie piszcie "poszukaj sobie" smile.gif

1. Postanowiłem podzielić struktóre mojej strony na 3 główne klasy:
a ) DB - czyli baza danych
- pobieranie z MySql informacji i zwracanie ich w postaci klasy Danetowa
- zapisywanie do bazy
- kasowanie z bazy
- updatowanie bazy
b ) Dane - wszystkie które sa pobierane z DB (artykuly, newsy itp...)
- opcje do wyswietlania
- modyfikowania wewnatrz ( by nastenie przekazac do DB i updatowac)
c ) Users - rozszerzenie Dane o mechanizmy sesji

Czy takie "rozplanowanie" jest dobre? Czego brakuje? Co zmienić?

2. Klasa DB (w tej chwili tylko do wyciagania rekordow):
  1. <?php
  2.  
  3. // Klasa obslugujaca bazy danych
  4. class DB
  5. {
  6.  //Tu mozna modyfikowac zmienne potrzebne do laczenia
  7.  protected $db_name = &#092;"xxx\"; //nazwa bazy
  8.  protected $host = &#092;"localhost\"; //host
  9.  protected $login = &#092;"yyy\"; // username
  10.  protected $pass = &#092;"zzz\"; // haslo
  11.  //Koniec modyfikowania
  12.  protected $co_pobrac = '*';
  13.  protected $laczenie, $db;
  14.  protected $zapytanie, $result;
  15.  protected $ile_wynikow;
  16.  
  17. function polacz(){
  18. $this->laczenie = @mysql_connect($this->host, $this->login, $this->pass) or die(&#092;"Nie udalo sie polaczyc\");
  19. $this->db = @mysql_select_db($this->db_name, $this->laczenie) or die(&#092;"Nie udalo sie wybrac bazy\");
  20. }
  21.  
  22. function zapytanie($table_name, $szukamy){
  23. $this->ile_wynikow = 0;
  24. if($szukamy instanceof Dane){
  25. $this->zapytanie = &#092;"SELECT $this->co_pobrac FROM $table_name WHERE $szukamy->pobierzListeDanych()\"; 
  26. }else{
  27. $this->zapytanie = &#092;"SELECT $this->co_pobrac FROM $table_name WHERE $szukamy\"; 
  28. }
  29. $this->result = mysql_query($this->zapytanie, $this->laczenie);
  30. $this->ile_wynikow = mysql_num_rows($this->result);
  31. }
  32.  
  33. function pobierz() {
  34. if ($this->ile_wynikow){
  35. return new Dane(mysql_fetch_array($this->result));
  36. } else {
  37. return false;
  38. }
  39.  echo &#092;"$this->ile_wynikow--\";
  40. }
  41.  
  42. }
  43. ?>

Jak łatwo się domyślacie nie działa. Raz, że nie zwraca rekordów a 2 że
while ($baza->pobierz()) trwa w nieskończoność.
Wiem, że istenieją gotowe klasy do obsługi az danych ale ja upieram sie przy swojej.

3. Bezpieczeństwo:
Czy tablice $get, $post, $session są wystarczająco bezpieczne? Czy istnieją jeszcze jakieś inne metody pozwalające jeszcze podnieść stopień bezpieczeństwa? Jakie?

4. Szablony:
Który system wybrać? Swojego nei będę pisał (na razie biggrin.gif), przychylam się do smarty ale chciałbym się dowiedzieć czegoś więcej (najlepiej po polsku) Bardzo prosze o linki..

5. Adres:
Najlepszy sposob zamiany adresu np.
index.php?imie=Adam&nazwisko=Kowalski
na
index.php/Adam/Kowalski

To chyba jak na razie wszystko, jeśli mi się coś przypomni to będę dopisywał smile.gif
Może warto przykleić gdzieś topic z wybranymi zagadnieniami ładnie omówionymi bo myślę, że wiele osób boryka się z podobnymi problemami.
Pozdrawiami
P.S.
Jesteś wyjątkowo wytrwały, że przeczytałeś moje brednie do końca biggrin.gif
DeyV
1. jeśli chcesz aplikacje zaprojektowac w sposóbn ciekawy i przejżysty - zapoznaj się z ostatnio modnym u nas tematem MVC . W tej chwili nie znam lepszego sposobu na zorientowanie budowy aplikacji webowej.

2. nie rozumiem do czego dążysz.
Uważąm, że jakaś warstwa pośrednia, pozwalajaca na uniknięcie pisania mysql_ * jest potrzebna

3. jeśli masz register_globals =off i używasz tablic superglobals do tego, do czego są przeznaczone, to wszystko będzie OK, jeśli nie zapomnisz o walidacji wszystkich danych pochodzących od usera.

4. Ja lubię smarty, choć są szybsze rozwiazania

5. jest art na wortalu

ps. czytywałem gorsze tongue.gif
Arkon
Dzieki za odpowiedzi
ad 1
Tez o tym czytałem ale przyznam sie szczerze nie nie wiem jak "oddielic" te trzy warstwy? I w jaki sposob to ma byc porozkładane

ad 2.
To jak to mam rozwiazac? Chcialem to napisac w ten sposob zeby mozna bylo wyciagac dowolna ilosc rekordow, np tak:
  1. <?php
  2. $baza = new DB;
  3. $baza->polacz();
  4. $baza->zapytanie(&#092;"news\", \"news_specjalny = 1\");
  5. while ($baza->pobierz()){
  6. echo &#092;" To jest tytul newsa: $newsy->news_tytul <br />\";
  7. }
  8. ?>


ad 4
Jakie? Mozesz podac jakies www na ktorym moglbym poczyta o smarty? Jak to sie je?
hamlecik
Arkon: na forum jest bardzo duzo postow na temat Smarty. http://smarty.php.net/ - dokumentacja + forum z cala masa informacji.
bela
Ad ad 1
to proste winksmiley.jpg, piszesz klase kontrolera, która pobiera z konfiga wszystie dane o akcjach, na podstawie konfigu i danych ( _GET, _POST, _SESSION etc ) kontroler wybiera jaką akcje uruchomic, akcja wywoluje model z ktorego pobiera dane i dalej wszystko jest pakowane do widoku

ja rozdzielam przez katalogi ( actions, models, views winksmiley.jpg )
Arkon
bela_666 : Ok wszystko ladnie pieknie ale jak to zrobic? Moge prosic jakis banalny przyklad obrazujacy co i jak? biggrin.gif
bela
dostaniesz pseudokod :]

very simple mvc app tongue.gif

Controller :
1. pobierz dane o widokach i akcji z ConfigParsera
2. pobierz dane o widoku i akcji z Routera
3. uruchom akcje albo wyrzuc wyjatek ( blad )

Akcja:
1. pobierz dane z modelu
2. zrob cos z nimi
3. zwroc je do kontrolera
// end action

4. pobierz dane z akcji
5. utworz widok
6. wrzuc do niego dane

Widok
1. pobierz dane z kontrolera
2. uruchom np. Smarty albo OPT ( najnowsza wersja na cvs, ale chyba na stronce tez jest aktualna )
3. wyrzuc output

proste winksmiley.jpg wszystko mozna wyczytać, mi jeszcze pomogla analiza kodu Phienda winksmiley.jpg
Arkon
Ok wielkie dzieki. Tylko o ile reszta wydaje się w miare OK to dzialanie kontrolera a dokladnie pierwszych 2 punktow jest jakos dla mnie zagmatwane. Cos mi podpowiada ze nie jest to trudne ale hmm.. Mozesz to jakos rozwinac?
bela
tu masz moj parser http://forum.php.pl/index.php?showtopic=24090
a Router to cos takiego co parsuje adres, czyli wspomaga Przyjazne URLe ( na wortalu art scannera ) i nie musisz jak tam bawic sie z tablicą tylko dajesz getAction, getView getParam(1) i dostajesz co chcesz smile.gif

aha, ten model mvc jest baaaaaardzo tongue.gif uproszczony, polecam dokumentacje do phienda, ewentualnie dokumentacje strutsa ( tam tez fajnie pisza, duzo sie z tamtad dowiedzialem ) i jeszcze w okolicach WACT tez jest troche
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.