Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Klasa do filtrowania tekstu
_olo_1984
post
Post #1





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


Witam

napisałem taką oto klasę, do filtrowania tekstu. W związku z tym, że dopiero zaczynam zabawę z OOP (w strukturalnym radzę sobie całkiem dobrze i czas podnieść poprzeczkę) mam do Was następujące pytania:
1. Czy klasa którą napisałem to nie pseudo oop? czy tak to powinno wyglądać (czy dobrze kombinuje)
2. Czy filtrowanie danych wchodzących do bazy (tryb 1) jest dobrym zabezpieczeniem przed atakami?
3. Już poza tym tematem, chodzi o smarty (z których tez korzystam), jak w innym obiekcie moge urzyć smarty, oraz jak w pliku inkludowanym urzyć smarty np. mam w głównym katalogu index.php (tu smarty działa ok), ale dołanczam do indexa plik z katalogu /includes/1.php i w tym pliku 1.php gdy prubuję uzyc szablonu, to nie działa (nie dolancza plikow tpl). smarty dolanczam w index. a po nim ten plik 1.php (mam nadzieje ze nie zamieszalem).

poniżej kod:

  1. <?php
  2.  
  3. class text {
  4. private $zakazane = array("script", "SCRIPT",
  5.  "type", "TYPE",
  6.  "name", "NAME",
  7.  "union", "UNION",
  8.  "select", "SELECT",
  9.  "delete", "DELETE",
  10.  "modify", "MODIFY",
  11.  "show", "SHOW",
  12.  "NULL", "null", "NUL", "nul",
  13.  "<", ">", "'", "/", " ", "&", "%", ";", ":", "*", "&", "?");
  14. public $tekst;
  15. public $zmieniony;
  16. public function filter($tryb) {
  17. switch($tryb) {
  18. case '1':
  19. return $this->zmien_tekst_1();
  20. break;
  21.  
  22. case '2':
  23. return $this->zmien_tekst_2();
  24. break;
  25.  
  26. case '3':
  27. return $this->zmien_tekst_3();
  28. break;
  29. }
  30. }
  31. private function show_tekst() {
  32. echo $this->zmieniony;
  33. }
  34. private function zmien_tekst_1() {
  35. $this->zmieniony=str_replace($this->zakazane, "", strip_tags($this->tekst));
  36. return $this->show_tekst();
  37. }
  38. private function zmien_tekst_2() {
  39. $this->zmieniony=stripslashes($this->tekst);
  40. return $this->show_tekst();
  41. }
  42. private function zmien_tekst_3() {
  43. $this->zmieniony=htmlentities($this->tekst);
  44. return $this->show_tekst();
  45. }
  46. }
  47. $text=new text;
  48. ?>


pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Mi sie nie podoba kilka rzeczy, w tym jedna jest błędem.

1. Stosuj angielskie nazwy zmiennych, metod itd. Polskie wyglądają po prostu komicznie, a u Ciebie to wogóle jest esperanto
2. W show_text() widze jakieś echo. Błąd! nigdy echo w takiej metodzie. Zawsze return
3. Nazwy metod typu zmien_tekst_1() nc nie mówią o tym, co dana operacja robi. Jedną z zasad OOP jest nazywanie metod zgodnie tym, co robią. Zwłaszcza, jeśli dotyczy to interfejsu publicznego (wiem, masz prywatny, ale czytaj dalej)
4. To, że zastosuję filter($tryb) też mi nic nie mówi

  1. <?php
  2. $text=new text();
  3. $text->tekst="<b>lol</b>";
  4. $text->filter(2); // No i skąd mam widzieć, co robi filter z parametrem 2?
  5. ?>


5. Ograniczasz funkcję strip_tags() - ona ma jeszcze więcej parametrów, których teraz nie można użyć.

Podsumowując. Kod jest raczej bezużyteczny, bo powoduje więcej problemów niż rozwiązuje i do tego jest nieintuicyjny.
Nie martw się jednak, bo akurat tego typu klasy zazwyczaj są mało przydatne. Zazwyczaj taki kod leci automatycznie gdzieś we framworku, albo wogóle w modelu. To nie jest najlepszy pomysł na naukę oop - lepiej postaraj się wymodelować jakieś zachowania programu np. klasę News, albo księgę gości etc.

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 21:42