Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Księga gości OOP, Proszę o analizę i błędy
malymakar
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.07.2009

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


  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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
slightyboy
post
Post #2





Grupa: Zarejestrowani
Postów: 52
Pomógł: 12
Dołączył: 12.07.2007

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


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. (IMG:style_emoticons/default/smile.gif)
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: 14.10.2025 - 11:15