Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Ksiega gosci
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
siemka dzis wieczorem postanowilem napisac sobie ksiege gosci na klasie nie na funckjach bo mysle ze to prostota i nawet ja laik nie mial bym z tym problemu wiec chcialbyc od was minimalnej pomocy oto skrypty mowie odrazy ze sa dlugie
klasa_ksiegi.php
  1. <?php
  2.  
  3.  
  4. class Ksiega {
  5. include('../config.php');
  6. var $zmien;
  7. var $token;
  8.  
  9. public function Wyswietl_form() {
  10.  
  11. echo("<html>\n
  12.  <head><meta http-equiv="content-type" charset="utf-8" /></head>\n<body>\n<h1>Ksiega gosci</h1>\n<form method="post" />\n<table widht="100%" bgcolor="#4E4E68" border="1" />\n<tr><td>Podaj nick :)<input type="text" name="Nick" /></td></tr>\n<tr><td>Wpisz wiadomosc<input type="text" name="message" /></td></tr>\n<tr><td width="80"><img src="token.php"></td><td><input type="text" name="token" /></td></tr>\n<tr><td align="right"><INPUT TYPE=image VALUE=submit src="buttons.php"/></td></tr>\n"); 
  13. }
  14.  
  15. public function bbcode() {
  16.  
  17.  
  18.  $this->zmien = htmlspecialchars($this->zmien);
  19.  $this->zmien = preg_replace("#(.*?)#si", "<A HREF='2' TARGET='top'>3</A>", $this->zmien);
  20.  $this->zmien = str_replace(":D","<img src='obrazki/biggrin.gif' />", $this->zmien);
  21.  $this->zmien = str_replace(":)","<img src='obrazki/smile.gif' />", $this->zmien);
  22.  $this->zmien = str_replace(":(","<img src='obrazki/confused.gif' />", $this->zmien);
  23.  $this->zmien = str_replace(";p","<img src='obrazki/tongue.gif' />", $this->zmien);
  24.  $this->zmien = str_replace(":]","<img src='obrazki/cool.gif' />", $this->zmien);
  25.  $this->zmien = str_replace("[:","<img src='obrazki/bigrazz.gif' />", $this->zmien);
  26.  $this->zmien = str_replace("()","<img src='obrazki/wink.gif' />", $this->zmien);
  27.  $this->zmien = preg_replace("#(.*?)#si", "<i>1</i>" $this->zmien);
  28.  $this->zmien = preg_replace("#(.*?)#si", "<b>1</b>" $this->zmien);
  29.  $this->zmien = preg_replace("#[ins](.*?)[/ins]#si", "<ins>1</ins>", $this->zmien);
  30.  $this->zmien = preg_replace("#[small](.*?)[/small]#si", "<small>1</small>", $this->zmien);
  31.  $this->zmien = preg_replace("#[big](.*?)[/big]#si", "<big>1</big>", $this->zmien);
  32.  return $this->zmien;
  33.  }
  34.  
  35. public function Sesja_tokena() {
  36.  
  37. $this->token = $_SESSION['randtoken'];
  38. }
  39.  
  40. public function Generuj_token() {
  41.  
  42. $generuj_liczby = rand(1, 1000);
  43. $this->token = substr(md5($generuj_liczby)0, 6);
  44. $_SESSION['randtoken'] = $this->token;
  45. }
  46.  
  47. public function Zwroc_token() {
  48.  
  49. return $this->token;
  50. }
  51.  
  52. public function Resetuj() {
  53.  
  54. $_SESSION['randtoken'] = "";
  55. $this->token = "";
  56. }
  57.  
  58. public function Zrob_obrazek_tokena() { 
  59.  
  60.  
  61.  header("Content-type: image/png"); 
  62. $image = @imagecreate(100,20); 
  63.  if($image) { 
  64.  
  65. $background = imagecolorallocate($image, 0,0,0); 
  66. $text = imagecolorallocate($image, 255,255,235); 
  67. imagestring($image, 4, 25,5, $this->token, $text); 
  68. header("Content-type: image/png"); 
  69. imagepng($image); 
  70. imagedestroy($image);
  71. } 
  72.  
  73. }
  74.  
  75. public function Date() {
  76.  
  77. $this->data = date('j/n/Y H:i:s;');
  78. }
  79.  
  80.  
  81. public function Dodaj_wpis() {
  82.  
  83. $this->ip = $_SERVER['REMOTE_ADRESS'];
  84.  
  85. $this->nick = htmlspecialchars($_POST['nick'];
  86.  
  87. $this->message = bbcode(htmlspecialchars($_POST['message']));
  88.  
  89. if($token->Zwroc_token() == $_POST['token'] && !empty($this->nick) && !empty($this->message)) {
  90.  
  91. $db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo']);
  92.  
  93. $db->select_db($this->pasy['baza']);
  94.  
  95. if(!is_resource($this->db)) {
  96. echo('Polaczenie z baza niemozliwe prosze sprobowac pozniej');
  97.  
  98.  return;
  99. }
  100.  
  101. $this->zapytanie = sprintf('insert into ksiega(nick,message,data,ip) values('%s', '%s','$this->data', '$this->ip')');
  102.  
  103. mysql_real_escape_string($this->nick, $this->db);
  104.  
  105. mysql_real_escape_string($this->message, $this->db);
  106.  
  107. $db->query($zapytanie) or die('Polaczenie nie mozliwe prosze sprobowac pozniej');
  108.  
  109. if($this->zapytanie) {
  110.  
  111. echo('<Br><center><h2>Dziekuje za wpis<Br></h2></center>');
  112. else {
  113.  
  114. echo('Prosze wypelnic wszystkie pola');
  115. }
  116.  
  117. else {
  118.  
  119. echo('Podaj wlasciy token');
  120.  
  121. $token->Resetuj();
  122.  
  123.  }
  124.  
  125.  }  
  126.  
  127. }
  128.  
  129. }
  130.  
  131. public function Pokaz_ksiege() {
  132.  
  133. $db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo']);
  134.  
  135. $db->select_db($this->['baza']);
  136.  
  137. if(!is_resource($this->db)) {
  138. echo('Polaczenie z baza niemozliwe prosze sprobowac pozniej');
  139.  
  140. return;
  141. }
  142.  
  143. $this->zapytanie('select nick,message,data from ksiega order by data desc')
  144.  
  145. $wynik = $db->query($zapytanie);
  146.  
  147. while($tab = $wynik->fetch_assoc()) {
  148.  
  149. echo('<tr><td>"Dodal: ".'$this->tab['nick'].'</td></tr>
  150. <tr><td>'.$this->tab['message'].'</td></tr>\n</table>\n</form>\n</body>\n</html>\n');
  151.  
  152.  
  153.  
  154.  
  155. ?>


to index.php

  1. <?php
  2. include('klasa_ksiegi.php');
  3.  
  4. $token = new Ksiega;
  5. $token->Generuj_token();
  6. $ksiega_gosci = new Ksiega;
  7. $ksiega_gosci->Wyswietl_form();
  8. $ksiega_gosci->Dodaj_wpis();
  9. $ksiega_gosci->Pokaz_ksiege();
  10. ?>


token.php

  1. <?php
  2. include('klasa_ksiegi.php');
  3.  
  4. $token = new Ksiega;
  5. $token->Sesja_tokena();
  6. $token->Zrob_obrazek_tokena();
  7. ?>


i buttons.php

  1. <?php
  2. header("Content-type: image/png");
  3. $image = @ImageCreate(60,25);
  4. $tlo = imagecolorallocate($image, 0,0,0);
  5. $kolor_tekst = imagecolorallocate($image, 5,255,47);
  6. $text = imagestring($image, 3,8,5, 'wyslij', $kolor_tekst);
  7. header("Content-type: image/png");
  8. imagepng($image);
  9. imagedestroy($image);
  10. ?>


Watpie zeby komus sie chcialo czytac caly kod ale przynajmniej zeby zobaczyl na klase bo cos chyba zle zrobilem albo czegos nie zrozumialem
sf
- str_replace - powinna być pętla przy tej operacji jak chodzi o emotikony, których lista powinna być wczytywana z zewnętrznego pliku
- nie wrzucaj HTML do PHP.. jeśli już masz taką potrzebę to powinna być całkiem osobna klasa / bądź też dekorator
- nie używaj @ w kodzie bo utrudnia to wyszukiwanie późniejszych błędów
- token powinien być osobną klasą, dzięki temu jeśli ktoś będzie chciał użyć inny gotowy token to łatwo go zaimplementuje bez grzebania w Twojej klasie, zresztą na tym polega obiektowe programowanie, że się oddziela te elementy od siebie, które użytkownik chciałby wymienić, a nie żeby grzebał w środku Twoich plików
Cysiaczek
Twoja klasa spełnia 7 funkcji, co jest 100% przekroczeniem limitu. Używasz var przy składowych a już public przy metodach - zdecyduj się.
Jeśli to pierwszy kontakt z obiektami i klasami, to ok, ale teraz długa droga przed Tobą do zrozumienia idei OOP. Teraz to wogóle nic nie ma wspólnego z programowaniam obiektowym.

Pozdrawiam.
dzesi
Cysiaczek Nie to ze sie czepiam ale ciągle czepiasz się ze coś jest nie do końca obiektowe ?, jestem ciekaw czy tak samo umiesz programować w oop jak krytykujesz innych ?. A nie zastanowiłeś sie ze ludzie oop uczą sie z książek i to co jest winternecie i uczą sie tak jak zostało im to przedstawione w najlepszy sposób ?.To tak samo pokazując kod programu napisanego w javie i stwierdzić ze nie jest on obiektowy dlatego ze nie ma np jakiegoś jednego obiektu w jakieś metodzie lub jest zapisany tylko class/metody np
  1. import javax.swing.*;
  2. public class Aplikacja extends JFrame {
  3.   private static final int wysokosc=400;
  4.   private static final int szerokosc=400;
  5.   private static final String title="Aplikacja @ DZESI";
  6.  
  7.    public Aplikacja() {
  8.        setVisible(true);
  9.        setSize(wysokosc,szerokosc);
  10.        setTitle(title);
  11.    }
  12.    
  13.  
  14.    public static void main(String[] args) {
  15.        new Aplikacja();
  16.        
  17.    }
  18.    
  19. }

Nie można pisać w javie nie obiektowo dry.gif .Takie jest moje zdanie i nie mam zamiaru tego komentować.
Cysiaczek
@dzesi - może i się czepiam - fakt. Sam też nie zawsze piszę obiektowo. To, co jednak napisałem jest prawdą. Nawet jeśli język jest bardzo obiektowy (Java), to można w nim pisać z pominięciem pewnych kluczowych zasad (ideii), które uczyczyniłyby tę aplikację obiektową. Samo używanie obiektów nie jest równoznaczne z pisaniem obiektowo. Moim zdaniem pisanie obiektowo, to pewien rodzaj specyficznego myślenia o programie. Takie myślenie zakłada mocną hermetyzację, zorientowanie na komponenty, rozważanie kilku możliwości rozwiązania zadania z ich wadami i zaletami (tu dochodzą wzorce). Nie będę dalej wymieniał, bo to można zneleźć w książkach i w necie.
Jak wspomniałem - czepiam się - nie potrafię przejść zupełnie obojętnie obok kodu reklamowanego jako obiektowy, który działa (i to dobrze działą), ale nim po prostu nie jest. Dlaczego jeszcze? Ano, potem taki ktoś będzie startował na stanowisko programisty 'ze znajomością zagadnień OOP', a nie będzie wiedział czym jest kompozycja lub agregacja (nie do Ciebie uderzam ~marcio).

Do zadań tego forum należy m.in. dbanie o rozwój programistów i z tego powodu będę się czepiał dalej, tak jak mnie się czepiano, aż czegoś się nauczyłem, za co jestem wdzięczny. : )

Pozdrawiam.
marcio
@all sorki ze nie odpisywalem ale nie mialem neta przesz 4 dni wiec sorki.
@sf nie rozuiem w jakim sensie petle ktora bedzie odczytywac dane z pliku
i jeszcze jedno pytanie moze powiedzice co jest zle skoro mowicie ze to nie jest 100% OOP to wtedy poprawie dopiero sie ucze a jak nie do dajcie moze jakis kawalek kodu zeby mi to wytlumaczyc
Sedziwoj
@marcio
Jak programujesz obiektowo, to nie myślisz jak coś działa, tylko co ma robić. Czyli masz jakieś rzecz Token, BazęDanych itp. itd. I te rzeczy powoli nauczysz się wyszukiwać a to będą obiekty.
Dlaczego 100% to nie jest obiektowo? Bo jeden obiekt ma spełniać jedno konkretne zadanie. Spróbuj w jednym/dwóch zdaniach opisać to co robi, nie uda się, a powinno się udać jeśli to byłby kod obiektowy. Moim zdaniem dobrym podejściem są karteczki (chyba 12x8cm) każda opisuje obiekt, jeśli się na niej nie mieści, znaczy że trzeba użyć nie jednego a więcej obiektów.

Ale ja nie jestem specem w sumie w tym, mimo wszystko radził bym poczytać np. "Thinking in Java" bo mimo wszystko to w dużej mierze skupia się również na OOP.
marcio
aj dzieki ale nie bede czytal ksiazki o javie bo mnie nie interesuje smile.gif ale nawet jak kod nie jest 100% OOP to chyba wiekszosc jego jest questionmark.gif zrobilem to teraz ba 2 klasach jedna do ksiegi i jedna do tokena i tam gdzie definiuje atrybuty klas zamiast var dalem public co moge jeszcze zmienic zeby to lepiej wygladalo i sa tam jakies bledy?
Cysiaczek
Tak - fajna rzecz - te karteczki to tzw. karty CRC (Class, Respobsibilities, Colaborations), czyli Klasa, Odpowiedzialności i Współpracownicy.
biggrin.gif

Pozdrawiam.
marcio
nie wiem o co chodzi z tymi karteczkami
Cysiaczek
http://adanti.files.wordpress.com/2006/05/mia_CRC.pdf

Przeczytasz - zaraz będziesz wiedział smile.gif
Powinny Ci pomóc w zrozumieniu, gdzie popełniasz błedy związane z oop

Pozdrawiam,
marcio
nie rozumiem co to ma wspolnego smile.gif ale mozesz powiedziec to tam jest zle co mam poprawic questionmark.gif
Cysiaczek
Pytasz, co jest źle? Dostajesz odpowiedzi. Sedziwoj napisał Ci ładnie o co chodzi w oop, a czego Ty nie masz. Jeśli nie nauczysz się teorii, to nic nie zdziałasz. Proste. Z punktu widzenia OOP, to tam jest wszystko źle. Nie wiem jak prościej mozna to wytłumaczyć...Skoro działa, to zostaw jak jest ;>

Pozdrawiam.
marcio
ale nie dziala a nepewno idzie to latwiej wytlumaczya na przykladzie np obrobic tylko jedna funckje mojego kodu to wtedy zrozumie
Sedziwoj
@marcio
I właśnie pokazujesz, że nie rozumiesz OOP, to nie chodzi o jedną funkcję (czy raczej metodą), to chodzi o sposób budowania całości. Ty podchodzisz ciągle od złej strony do tego, od strony implementacji, a trzeba podejść od strony co to ma robić, jakie są obiekty jak ze sobą współpracują. Taka metoda to tylko jakaś komunikacja z tym obiektem, jedno (procedura) lub dwu strona (funkcja)
marcio
czyli mam zrozumiec ze mam sobie dac spokoj z OOP?? sad.gif
Cysiaczek
Nie - oczywiście, że nie! Musisz tylko wkuć trochę teorii, a tą najlepiej znaleźć w dobrej książce. Po prostu OOP to sposób myślenia o aplikacji, a nie kod ujęty w klasie. Jak się nauczysz teroii, to potem świadomie możesz olewać część zasad. Zawsze jednak bedziesz wiedział, co jest, a co nie jest obiektowe w Twojej aplikacji.

Popatrz:
Tak sie powinieneś zabrać do projektowania.

Użytkownik może dodać wpis do księgi gości i oglądać wpisy innych użytkowników. Aby dodać wpis musi podać kod z obrazka zabezpieczającego przed spamen.

Podkreślone wyrazy są kandydatami na obiekty.
Użytkownik
Księga gości
Wpis
Obrazek

Do tego musisz znależć obiekty, które będą zarządzały tymi obiektami, lub ustalić relacje pomiędzy nimi.

Np.

  1. <?php
  2. // akcja to dodaj wpis
  3.  
  4. $user=new User('marcio');
  5. $user->login();
  6.  
  7. $post=new Post(); // nowy wpis
  8. $post->setTitle($title);//tytuł
  9. $post->setBody($body); //treść
  10. $post->setUser($user->getName()); // imie usera,który dodaje wpis
  11.  
  12. $pic=new Captcha($captchaText); // do obiektu capthc dodajemhy wprowadzony przez usera tekst
  13.  
  14. if($pic->isValid()) // jest poprawny
  15. {
  16. $ks=new GuestBook();
  17. $ks->addPost($post); // dodajemy wpis
  18. $ks->save(); //zapisujemy w bazie danych/pliku
  19. }
  20.  
  21. $ks->showPosts(); //pokazujemy dodane wpisy
  22. ?>


Ten przykładowy kod można nazwać obiektowym. pokazuje obiekty i ich wzajemne relacje. To, czego nie woidać, to bebechy, które nas teraz nie interesują.

Pozdrawiam.
marcio
dobra poddaje sie wyeliminowalem wszystkie syntax_error form jest token jest kod sie zmienszyl o 30%. wyswietlaja sie wiadomosci lecz sie nie dodaja sie tzn jesli je dodam poprzez baze wyswietlaja sie lecz jesli je wpisze w formie to nic sie nie dodaje i teraz przyczyna moze bycs token bo nie wiem czy dobre sa sejse chodz je wyswietlam i sa takie same i nie wiem czy dobrze zrobilem bbocoda'a moze podam kod:

qwerty.php

  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. class Ksiega {
  6.  
  7. public $data;
  8. public $ip;
  9. public $nick;
  10. public $message;
  11. private $pasy;
  12.  
  13. public function __construct($nick, $message) {
  14.  
  15. global $pasy;
  16.  
  17. $this->data = date('j/n/Y H:i:s;');
  18. $this->nick = htmlspecialchars($nick);
  19. $this->message = $message;
  20. $this->pasy = $pasy;
  21. }
  22.  
  23.  
  24. public function Wyswietl_form() {
  25.  
  26. echo('<html>
  27. <head><meta http-equiv="content-type" charset="utf-8" /></head><Br><body><Br><center><h1>Ksiega gosci</h1></center><form method="post" /><table widht="100%" bgcolor="#4E4E68" border="1" align="center" /><tr><td align="center">Podaj nick</td><td><input type="text" name="Nick" /></td></tr align="center"><Br><tr><td>Wiadomosc</td><td><textarea name="message" rows="3">Tutaj wpisz wiadomosc</textarea></td></tr><Br><tr><td width="80" align="center"><img src="token.php"></td><td><input type="text" name="token" value="Przepisz kombinacje" /></td></tr><Br><tr><td align="right"><INPUT TYPE=image VALUE=submit src="buttons.php"/></td></tr></table><div style="background:#000;color:#0f0;text-align:center;border:2px solid:white;">Powered by Marcio</div></body><html>'); 
  28. }
  29.  
  30. public function bbcode() {
  31.  
  32. $zmien = htmlspecialchars($this->message);
  33. $zmien = preg_replace("#(.*?)#si", "<A HREF='2' TARGET='top'>3</A>", $zmien);
  34. $zmien = str_replace(":D","<img src='obrazki/biggrin.gif' />", $zmien);
  35. $zmien = str_replace(":)","<img src='obrazki/smile.gif' />", $zmien);
  36. $zmien = str_replace(":(","<img src='obrazki/confused.gif' />", $zmien);
  37. $zmien = str_replace(";p","<img src='obrazki/tongue.gif' />", $zmien);
  38. $zmien = str_replace(":]","<img src='obrazki/cool.gif' />", $zmien);
  39. $zmien = str_replace("[:","<img src='obrazki/bigrazz.gif' />", $zmien);
  40. $zmien = str_replace("()","<img src='obrazki/wink.gif' />", $zmien);
  41. $zmien = preg_replace("#(.*?)#si", "<i>1</i>", $zmien);
  42. $zmien = preg_replace("#(.*?)#si", "<b>1</b>", $zmien);
  43. $zmien = preg_replace("#[ins](.*?)[/ins]#si", "<ins>1</ins>", $zmien);
  44. $zmien = preg_replace("#[small](.*?)[/small]#si", "<small>1</small>", $zmien);
  45. $zmien = preg_replace("#[big](.*?)[/big]#si", "<big>1</big>", $zmien);
  46. $this->message = $zmien;
  47. }
  48.  
  49. public function Dodaj_wpis($token) {
  50.  
  51. $this->bbcode();
  52.  
  53. if($_SESSION['randtoken'] == $token && !empty($this->nick) && !empty($this->message))
  54. {
  55.  
  56.  if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo']))
  57.  {
  58.  
  59. mysql_select_db($this->pasy['baza']);
  60.  
  61. $zapytanie = "insert into ksiega_gosci(nick,message,data,ip) values('{$this->nick}', '{$this->message}', '{$this->data}', '{$this->ip}')";
  62.  
  63. mysql_real_escape_string($this->nick, $this->db);
  64. mysql_real_escape_string($this->message, $this->db);
  65.  
  66. if(mysql_query($zapytanie))
  67. {
  68.  mysql_close($db);
  69.  echo ('<Br><center><h2>Dziekuje za wpis<Br></h2></center>');
  70. }
  71.  }
  72. }
  73.  
  74. else
  75. {
  76.  echo('<script>alert("Podaj wlasciy token");</script>');
  77.  $this -> Wyswietl_form();
  78. }
  79. }
  80.  
  81. public function Pokaz_ksiege() {
  82.  
  83. if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  84. mysql_select_db($this->pasy['baza']);
  85.  
  86. $zap = ('select nick,data,message from ksiega_gosci order by data desc');
  87.  
  88. $wynik = mysql_query($zap, $db) or die(mysql_error());
  89.  
  90. while($tab = mysql_fetch_assoc($wynik)) {
  91.  
  92. echo('<table border="1" width="100%" bgcolor="#4E4E68" align="center"><tr><td width="50%">Dodal: '.$tab['nick'].'</td><td width="50%">Dnia:'.$tab['data'].'</td></tr>
  93. <tr><td>'.$tab['message'].'</td></tr></table></form>');
  94. }
  95. }
  96. else {
  97.  return('Nie ma wpisow');
  98.  mysql_close($db);
  99. }
  100. }
  101. };
  102. ?>


token.php
  1. <?php
  2. $token = $_SESSION['realtoken'];
  3. $generuj_liczby = rand(1, 1000);
  4. $_SESSION['realtoken'] = substr(md5($generuj_liczby), 0, 6);
  5.  
  6. if($_SESSION['realtoken'] != $token)
  7. $_SESSION['randtoken'] = $token;
  8.  
  9. $image = @imagecreate(100,20); 
  10. $background = imagecolorallocate($image, 0,0,0); 
  11. $text = imagecolorallocate($image, 255,255,235); 
  12. imagestring($image, 4, 25,5, $_SESSION['randtoken'], $text); 
  13.  
  14. header("Content-type: image/png"); 
  15. imagepng($image); 
  16. imagedestroy($image);
  17. ?>

i qwe.php

  1. <?php
  2. include('qwerty.php');
  3. $_SESSION['randtoken'] == $_POST['token'];
  4. echo($_SESSION['realtoken']);
  5. $ksiega = new Ksiega($_POST['nick'], $_POST['message']);
  6. $ksiega->Dodaj_wpis($_POST['token']);
  7. $ksiega->Pokaz_ksiege($_POST['token']);
  8. ?>

mam nadzieje ze ktos pomoze tym razem bo sie mecze juz 2 dni dzieki smile.gif
Sedziwoj
  1. <?php
  2. $token = new Token;
  3. $token = Generuj_token($token);
  4. ?>

zmienna zmienia co przechowuje? niezbyt mądre

  1. <?php
  2. $wyswietl = new Ksiega_gosci;
  3. $user = new Ksiega_gosci;
  4. $dodaj = new Ksiega_gosci;
  5. ?>


Sam sobie skomentuj cz ten obiekt zajmuje się jedną rzeczą.
Próbowałeś choć chwilę pomyśleć na wyższym poziomie abstrakcji, bo wątpię. Cysiaczek przedstawił ładnie o co chodzi, ale chyba nawet nie przemyślałeś tego.
marcio
moze dlatego ze nie zrozumialem

w poscie wyzej wykasowalem stary kod jest tam nowy i opisalem tez co nie dziala sorki ze tak mieszam sad.gif
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.