Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Księga gości OOP
Forum PHP.pl > Forum > Przedszkole
malymakar
  1. <?php
  2.  
  3. class Ksiega {
  4.  
  5. public function zapis() {
  6. if(!empty($_POST['nick']) && !empty($_POST['tresc']) && !empty($_POST['email'])) {
  7. if(preg_match('@^[a-zA-Z1-9]{2,30}\@[a-zA-Z1-9]{2,10}.[a-z]{2,3}$@',$_POST['email'])) {
  8. $plik = "ksiegagosci.txt";
  9. $bufor = file_get_contents('ksiegagosci.txt');
  10. $f = fopen($plik, "w");
  11. $tresc = date('d M y H:i:s')." ".$_POST['nick']." napisał: ".$_POST['tresc']."<br/>";
  12. fputs($f, $tresc);
  13. fputs($f, $bufor);
  14. fclose($f);
  15. $_SESSION['koment']=$_POST['hash'];
  16. } else echo "Nie poprawny adres email!<br/><br/>";
  17. } else echo "Wypełnij poprawnie wszystkie pola!<br/><br/>";
  18. }
  19.  
  20. public function odczyt() {
  21. $plik = "ksiegagosci.txt";
  22. $hak = fopen($plik, "r");
  23. $tresc = fread($hak, filesize($plik));
  24. echo $tresc;
  25. fclose($hak);
  26. }
  27.  
  28. public function generateHash() {
  29. return md5(time() * rand());
  30. }
  31.  
  32.  
  33. }
  34.  
  35. ?>


  1. <?php
  2. session_start();
  3. include("klasa_ksiega.php");
  4. $ksiega = new Ksiega;
  5. ?>
  6. <link rel="stylesheet" href="style.css" type="text/css" />
  7. </head>
  8. <div id="formularz">
  9. <form action="ksiegagosci.php" method="post">
  10. <tr>
  11. <td><label>Nick: </label></td>
  12. <td><input type="text" name="nick" size="10" maxlength="15"/></td>
  13. </tr>
  14. <tr>
  15. <td><label>Email: </label></td>
  16. <td><input type="text" name="email" size="15" maxlength="20"/></td>
  17. </tr>
  18. <tr>
  19. <td><label>Tresc: </label></td>
  20. <td><textarea name="tresc" size="30" maxlength="64" rows="3" cols="50">Tresc komentarza</textarea></td>
  21. <input type="hidden" id="hash" name="hash" value="<?=$ksiega->generateHash();?>">
  22. </tr>
  23. <tr>
  24. <td id="wyslij" colspan="2"><input type="submit" value="Wyslij"/></td>
  25. </tr>
  26. </form>
  27. </table>
  28. </div>
  29. <?php
  30. if($_SESSION['koment']==$_POST['hash']) {
  31. $ksiega->odczyt();} else {
  32. $ksiega->zapis();
  33. $ksiega->odczyt();
  34. }
  35. ?>
  36. </body>
  37. </html>


Witam, to jest mój pierwszy projekt na obiektach w php i chciałbym prosić o analizę oraz błędy jakie popełniłem przy klasie. Znajomość php jest u mnie na poziomie przedszkola, a z programowaniem obiektowym jest jeszcze słabiej, ale od czegoś trzeba zaczynać, dlatego proszę o jakieś sugestie.
Co do samej księgi gości to zdaję sobie sprawę, że jest kiepska, bo niema blokady pliku przy zapisie, blokady antyfloodowej, itp., ale to tylko na potrzeby nauki pracy na klasach.

ps. jeżeli chodzi o działanie, to działa bez zarzutu.
slightyboy
Póki co jedynie opakowałeś proceduralny kod klasą i jej metodami, a nie o tym w OOP chodzi. Jak powinno to wyglądać?
  • przyjęło się, iż m.in. nazwy klas i metod pisane są w języku angielskim,
  • metoda "zapis" powinna zostać zastąpiona przez metodę np. "addEntry", która dodaje wpis do księgi gości - przekazywane do niej parametry to dane o wpisie (odwołując się do Twojego kodu, kolejno: $nick, $content, $email - wówczas przy wywołaniu przekazujesz dane z tablicy POST),
  • jeśli ma to być OOP, skorzystaj z wyjątków ("throw Exception...", a następnie "try{ } catch.."), które będą "wyrzucane" w momencie kiedy pojawi się błąd (np. walidacji),
  • w metodach zwracaj wartości, nie używaj echo,
  • błędnie dopisujesz komentarze do pliku (skorzystaj z fopen [w odpowiednim trybie] oraz fwrite), co więcej zamiast wrzucać już sformatowany tekst (ze znacznikami HTML) lepiej stwórz coś na kształt bazy danych opartej na pliku (kolumny wierszy oddzielane np. znakiem "|" - wówczas pobierasz wiersze pliku, rozbijasz każdy z nich funkcją explode i otrzymujesz wszystkie wpisy w postaci tablicy, którą możesz bezproblemowo zarządzać),
  • jeśli już decydujesz się na bezpośrednie wyświetlanie zawartości pliku skorzystaj z file_get_contents, a nie fread;
To tylko kilka z błędów (tych najbardziej rażących), które można znaleźć w Twoim kodzie. Musisz skupić się na poznaniu OOP w teorii, a dopiero potem stopniowo próbować ową wiedzę przekładać na praktykę. Warto też przeanalizować kody innych osób, spróbować je zrozumieć, a może nawet poszukać w nich błędów. smile.gif
malymakar
Dzieki bardzo za tą obszerną odpowiedź... dała mi ona dużo do myślenia.

Prosiłbym o nie zamykanie tematu, ponieważ po dogłębnym przeanalizowaniu wszystkich punktów i zaleceń postaram sie umieścić kolejną wersję tego kodu... Pewnie nie nastąpi to zbyt szybko, ale napewno kiedyś będzie.
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.