Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PDO prosty czat - proszę o ocenę
sajegib
post 23.04.2013, 17:12:53
Post #1





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


Witam!

Proszę szanowne grono o ocenę mojego czatu napisanego w OOP, dopiero się uczę, z chęcią przyjmę wszystkie uwagi (szczególnie krytyczne) dot. kodu a także co mogłoby być lepiej


config.php

  1.  
  2. <?php
  3.  
  4. //DANE DO POŁĄCZENIA Z BAZĄ
  5.  
  6. class Config{
  7.  
  8. public static $db_host = 'localhost';
  9. public static $db_name = 'Czat';
  10. public static $db_user = 'root';
  11. public static $db_pass = 'root';
  12.  
  13. }
  14.  
  15. ?>
  16.  
  17.  
  18.  



database.php



  1.  
  2. <?php
  3.  
  4. require_once 'config.php';
  5.  
  6. abstract class database
  7. {
  8.  
  9. protected $pdo;
  10. public $error;
  11.  
  12. public function __construct()
  13. {
  14. // POLACZENIE Z BAZA
  15. try
  16. {
  17. $this->pdo = new PDO('mysql:host='.Config::$db_host.';dbname='.Config::$db_name, Config::$db_user, Config::$db_pass);
  18. $this->pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  19. }
  20. catch (PDOException $e)
  21. {
  22. print "Error!: " . $e->getMessage() . "<br/>";
  23. die();
  24. }
  25.  
  26. }
  27.  
  28.  
  29.  
  30.  
  31. protected function insert($author, $msg)
  32. {
  33.  
  34. $stmt = $this->pdo->prepare('INSERT INTO Czat (Author, Msg) VALUES (:auth, :msg)');
  35. $stmt->bindParam(':auth', $author);
  36. $stmt->bindParam(':msg', $msg);
  37.  
  38. if($stmt->execute())
  39. {
  40. return TRUE;
  41. }
  42. else
  43. {
  44. return FALSE;
  45. }
  46. }
  47.  
  48.  
  49.  
  50.  
  51. protected function select()
  52. {
  53. $messages = $this->pdo->query('SELECT * FROM Czat');
  54. return $messages;
  55. }
  56.  
  57.  
  58.  
  59. public function __destruct()
  60. {
  61. $this->pdo = NULL;
  62. }
  63.  
  64.  
  65. }
  66.  
  67.  
  68. ?>
  69.  
  70.  




czat.php
  1.  
  2. <?php
  3.  
  4. require_once 'database.php';
  5.  
  6. class czat extends database
  7. {
  8.  
  9. public $error ='';
  10.  
  11. public function __construct() {
  12. parent::__construct();
  13. }
  14.  
  15.  
  16. public function add_message($author, $msg)
  17. {
  18.  
  19. if(!empty($author) && !empty($msg))
  20. {
  21. $escaped = $this->escape($author, $msg); // escapujemy
  22.  
  23.  
  24. if($this->insert($escaped[0], $escaped[1])){
  25. $this->error = "DODANO";
  26. }
  27. else{
  28. $this->error = "NIE DODANO";
  29. }
  30.  
  31. }
  32.  
  33.  
  34. }
  35.  
  36.  
  37. public function get_messages()
  38. {
  39. return $this->select();
  40. }
  41.  
  42.  
  43. public function escape($val1, $val2)
  44. {
  45. $auth = addslashes($val1);
  46. $msg = addslashes($val2);
  47.  
  48. return array($auth, $msg); // ZWRACAMY WYESCAPOWANA TABLICE
  49. }
  50.  
  51.  
  52. }
  53.  
  54.  
  55. ?>
  56.  
  57.  
  58.  




pozdrawiam!
Go to the top of the page
+Quote Post
ssstrz
post 23.04.2013, 17:21:17
Post #2





Grupa: Zarejestrowani
Postów: 103
Pomógł: 17
Dołączył: 15.12.2012

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


jak ma być oop to rozdziel walidacje, na osobną klasę
Go to the top of the page
+Quote Post
ShadowD
post 23.04.2013, 17:51:13
Post #3





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Chat moim zdaniem nie powinien dziedziczyć z bazy a być oddzielną częścią i posiadać obiekt klasy jako zmienną.


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
sajegib
post 23.04.2013, 18:06:34
Post #4





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


w ktore miejsce najlepiej wrzucic obiekt bazy? jak sie wtedy odwolac do jego metod?
Go to the top of the page
+Quote Post
hind
post 24.04.2013, 06:57:25
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 24
Dołączył: 30.03.2009
Skąd: Rokitno Szlacheckie

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


Bazę (PDO) przekazać jako parametr do konstruktora, a to co masz w klasie database przekopiuj do klasy chat
i w tedy
  1. class chat {
  2. protected $pdo;
  3.  
  4. public function __construct($pdo)
  5. {
  6. if ($pdo) {
  7. throw new exception('nie pdo');
  8. }
  9. $this->pdo = $pdo;
  10. }
  11. [...]
  12. }


Ten post edytował hind 24.04.2013, 06:57:50
Go to the top of the page
+Quote Post
ShadowD
post 24.04.2013, 08:18:21
Post #6





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


@hind dobrze mówi, ale by jeszcze pójść o krok dalej powiem Ci jak działją fw.

W fw masz coś takiego jak klasa DI to taki rejestr wszystkich elementów składowych systemu, najłatwiejsza jego odmiana ma aż 2 metody set($name, $obiect) i get($name) i służy do przechowywania w sobie wszystkich obiektów typu baza danych, instancaj widoku, routingu, requestu, configu itd. i to ona jest przekazywana do kontrolerów (dla uproszczenia można uznać że u Ciebei to klasa chat) podczas konstrukcji klasy, a sama klasa chat ma zmienną $di i metody setDi() i getDi() dzięki który możesz odwołać się do obiektów zapisanych w niej.

Taki zabieg w przyszłośic ułatwi Ci kod, bo obiektów typu chat, form, controller jest wiele sposobem @hind musiał byś za każdym razem do nich wprowadzać wszystkie serwisty (db, request, routing itd), a tutaj wszystko wprowadzasz do Di, a samo Di przekazujesz zawsze dalej i ew w przyszłości dodajesz tylko do niego kolejne serwisy. ;-)


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
sajegib
post 24.04.2013, 08:40:36
Post #7





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


Coś tam działam sobie w wolnych chwilach w codeigniterze i przyznam, że sporo załapałem z obiektówki dzięki temu, ale nie bardzo doszukałem się informacji odnośnie architektury całego przedsięwzięcia.
Dzięki wielkie szanownym Panom za informację, będę walczył dalej.

A jako, ze już przeszliśmy na FW, to mam jeszcze małe pytanko, mam kilka podstron, których treść trzymam w bazie (strona oparta o codeigniter).

Stworzyłem sobie kontroler, który zajmuje się wyświetlaniem kolejnych podstron, przyjmuje 1 parametr z ID podstrony - wtedy url wyglada tak: xxx.pl/home/page/1 (2,3, itd)
Co myślicie o takim rozwiązaniu? Może jest jakieś lepsze?
Go to the top of the page
+Quote Post
nospor
post 24.04.2013, 08:47:31
Post #8





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Używasz PDO, używasz bindowania, a mimo to escapujesz dane i to na dodatek przy pomocy addslashes.... przecież to nie ma żadnego sensu...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sajegib
post 24.04.2013, 09:03:54
Post #9





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


Doczytałem trochę, faktycznie, wstyd sciana.gif

Ale chyba trzeba się troche powstydzić za swoje dokonania, żeby się nauczyć biggrin.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 03:23