Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][OOP] Dziedziczenie klas , wychwytywanie danych
Forum PHP.pl > Forum > Przedszkole
GameMaker
Otóż napisałem 2 klasy :

- 1 sprawdzanie czy user jest zalogowanych (autoryzacja)
- 2 głosowanie , ocena artykułu , dziedziczy po 1szej

Mam pytanie :

Czy napisałem to poprawnie , bo zaczyna przygodę z OOP pisząc swój mały cmsik .

Czekam na sugestie do plików, ukazanie błędów czy innych możliwości łatwiejszego zapisu.
  1. <?php
  2.  
  3. ///////////klasa usera auth class////////////
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13. class User {
  14.  
  15. public $logged_in = null;
  16. public $user_level = null;
  17.  
  18.  
  19. function __construct($db)
  20. {
  21. $this->_db = $db;
  22. $this->startSession();
  23. }
  24.  
  25.  
  26.  
  27. public function loginCheck()
  28. {
  29. if (isset($_SESSION['id']) && $_SESSION['id'] > 0) {
  30.  
  31.  
  32. return true;
  33. } else {
  34. return false;
  35. }
  36. }
  37.  
  38. public function levelCheck()
  39. {
  40. $id = intval($_SESSION['id']);
  41. $q = $this->_db->query("Select * from mpa_users where id='$id'");
  42.  
  43. if($this->_db->num_rows($q) == 1)
  44. {
  45. $row = $this->_db->fetch_array($q);
  46.  
  47. if($row['admin'] == 1)
  48. {
  49. return 7;
  50. }elseif($row['admin'] == 0 && $row['premium'] == 1 && $row['premium_time'] > time())
  51. {
  52.  
  53. return 2;
  54.  
  55. }elseif($row['admin'] == 0 && $row['premium'] == 1 && $row['premium_time'] < time())
  56. {
  57. $this->_db->query("Update mpa_users set premium='0' where id='$id'");
  58.  
  59. return 1;
  60.  
  61. }elseif($row['admin'] == 0 && $row['premium'] == 0)
  62. {
  63.  
  64. return 1;
  65. }
  66.  
  67. }
  68. else
  69. {
  70.  
  71. }
  72.  
  73. }
  74.  
  75.  
  76. private function startSession()
  77. {
  78. $this->logged_in = $this->loginCheck();
  79. if($this->logged_in)
  80. {
  81. $this->user_level = $this->levelCheck();
  82. }
  83. else
  84. {
  85. $this->user_level = 0;
  86. }
  87.  
  88. }
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97. }
  98.  
  99.  
  100. ?>
  101.  
  102.  
  103.  
  104.  
  105. //////////////Rate Class
  106.  
  107. <?php
  108.  
  109.  
  110.  
  111. class Rating extends User{
  112.  
  113.  
  114.  
  115.  
  116.  
  117. function __construct($db)
  118.  
  119. {
  120.  
  121. $this->_db = $db;
  122. $this->AllowRate = $this->loginCheck();
  123.  
  124.  
  125. }
  126.  
  127.  
  128.  
  129.  
  130. private function checkRate($smth,$type)
  131. {
  132. if($this->AllowRate)
  133. {
  134. $this->movie = intval($smth['movie']);
  135. $this->user_id = intval($_SESSION['id']);
  136. $this->type = intval($type);
  137. $check = $this->_db->num_rows($this->_db->query("Select * from mpa_rate where userid='".$this->user_id."' and fileid='".$this->movie."' and type='".$this->type."'"));
  138. if($check == 0)
  139. {
  140. return true;
  141.  
  142. }
  143. else
  144. {
  145. return false;
  146.  
  147. }
  148.  
  149. }
  150. else
  151. {
  152. return false;
  153.  
  154. }
  155.  
  156.  
  157. }
  158.  
  159.  
  160. private function checkData($smth,$type)
  161.  
  162. {
  163. if(is_array($smth))
  164.  
  165. {
  166. $this->value = intval($smth['value']);
  167. $this->movie = intval($smth['movie']);
  168. $this->type = intval($type);
  169. $error = 0;
  170.  
  171. if($this->value > 5)
  172. {
  173. $error++;
  174. }
  175.  
  176. switch($this->type)
  177. {
  178. case 1:
  179. if($this->_db->num_rows($this->_db->query("Select * from mpa_movies where id='".$this->movie."'")) == 0)
  180. {
  181. $error++;
  182.  
  183. }
  184.  
  185.  
  186. break;
  187. case 2:
  188.  
  189. break;
  190.  
  191. default :
  192.  
  193. $error++;
  194. break;
  195.  
  196. }
  197.  
  198.  
  199. if($error == 0)
  200. {
  201.  
  202. return true;
  203. }
  204. else
  205. {
  206.  
  207. return false;
  208. }
  209.  
  210.  
  211.  
  212.  
  213.  
  214. }
  215. else
  216. {
  217.  
  218. return false;
  219. }
  220.  
  221.  
  222.  
  223. }
  224.  
  225.  
  226.  
  227.  
  228. public function doRate($smth,$type)
  229. {
  230.  
  231. if(is_array($smth))
  232. {
  233. if($this->AllowRate && $this->CheckRate($smth,$type) && $this->checkData($smth,$type))
  234. {
  235. $this->value = intval($smth['value']);
  236. $this->user_id = intval($_SESSION['id']);
  237. $this->movie = intval($smth['movie']);
  238. $this->type = intval($type);
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248. $check = $this->_db->query("INSERT INTO `mpa_rate` (`id`, `userid`, `fileid`, `type`, `value`) VALUES (NULL, '".$this->user_id."', '".$this->movie."', '$type', '".$this->value."');");
  249.  
  250. if($check)
  251.  
  252. {
  253. return "good";
  254. }
  255. else
  256. {
  257. return "bad";
  258.  
  259. }
  260.  
  261. }
  262. else
  263. {
  264.  
  265. ///Sypie ze brak dostepu
  266. return "bad";
  267. }
  268. }
  269. else
  270. {
  271.  
  272. return "bad22";
  273. }
  274.  
  275.  
  276. }
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287. }
  288.  
  289.  
  290.  
  291.  
  292.  
  293. ?>
  294.  







Update plików
marcio
A wiec polecilbym ci lektore na temat:
  • Kompozycja
  • Hermentyzacji
  • Sql Injection
  • MVC/MVP
  • Acl

Stosuj wciecia w kodzie bo jest on nieczytelny chyba ze to wina parser'a forum.

O kompozycji bo Obiekt User nie ma nic wspolnego z Rating zeby po nim dziedziczyla.

Metoda: loginCheck()
Nie sprawdza w ogole czy uzytkownik jest poprawnie zalogowany wystarczy ze ustawie sobie sesje na id jakiegokolwiek user'a i rozpozna mnie jako uzytkownika twojego serwisu...

Stosuj jakies unikalne id/hash dla uzytkownika i zapisuj je w sesji przy logowaniu potem w metodzie loginCheck() sprawdzaj czy hash z sesji zgadza sie z user'em aktualnie zalogowanym jesli tak to wtedy mozesz powiedziec ze jest zalogowany...

Mozesz tez sprawdzac ip i user agent.
GameMaker
Co do autoryzacji , to mogę zrobić na zasadzie , że przy każdym logowaniu tworze hash usera , dodaje go do bazy danych oraz zapisuje go w sesji , przy każdej akcji wykonanej przez usera porównuje hashe , jeśli hashe sa złe to niszcze sesje oraz np dodaje jakis log do bazy ze blad zbieznosci danych
marcio
Tez moze byc...ja ci poradzilem co i jak a ty zrobisz jak zechcesz wink.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.