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
cinekz
post
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 6
Dołączył: 15.06.2006

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


1. Skoro mówimy już o OOP to ta klasa nie ma z nim nic wspólnego. To powinno wyglądać inaczej. Powinieneś zrobić klasę bazową dla każdego filtra. Każdy filtr byłby osobną klasą wyprowadzoną z klasy głównej. Przykładowy kod:
  1. <?php
  2. abstract class Filter //klasa abstrakcyjna dla wszystkich filtrów
  3. {
  4. private $value = '';
  5.  
  6. public function __construct( $value = null )
  7. {
  8. $this->setValue( $value );
  9. $this->run();
  10. }
  11.  
  12. public function setValue( $value )
  13. {
  14. if( !is_null( $value ) )
  15. {
  16. $this->value = $value;
  17. }
  18. }
  19.  
  20. public function getValue()
  21. {
  22. return $this->value;
  23. }
  24.  
  25. abstract protected function run();
  26. }
  27.  
  28. class HtmlEntitiesFilter extends Filter // implementacja Filtra zamieniające tagi na encje
  29. {
  30. protected function run()
  31. {
  32. $this->setValue( htmlentities( $this->getValue() ) );
  33. }
  34. }
  35.  
  36. class AddSlashesFilter extends Filter // przykład Filtra dodającego slashe
  37. {
  38. protected function run()
  39. {
  40. $this->setValue( addslashes( $this->getValue() ) );
  41. }
  42. }
  43.  
  44.  
  45. $filter = new HtmlEntitiesFilter( '<b>sasasas</b>' );
  46.  
  47. echo $filter->getValue(); // wynik: &lt;b&gt;sasasas&lt;/b&gt;
  48. ?>


Myślę, że pomogłem. Pozdrawiam Marcin.

PS Dąż raczej do prywatności składowych klasy i udostępniaj akcesory.

Ten post edytował cinekz 26.02.2008, 16:26:34
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 - 02:18