Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja klasy do obsługi użytkownika
rav1989
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

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


Witam

Napisałem klasę która ma obsługiwać użytkownika wydaje mi się, że jest ona nieoptymalna... wstawiam ją aby ktoś z większym doświadczeniem ją obejrzał i mnie nakierował co można zrobić lepiej i co mam poprawić (IMG:style_emoticons/default/biggrin.gif)

Klasa:
  1.  
  2. define("MySql_Host", "localhost");
  3. define("MySql_Login", "root");
  4. define("MySql_Password", "");
  5. define("MySql_DbName", "test");
  6. define("MySql_TPrefix", "");
  7.  
  8. define("MODE_USER",0);
  9. define("MODE_MOD",1);
  10. define("MODE_ADMIN",2);
  11.  
  12. function removeSlashes(&$value)
  13. {
  14. if(is_array($value))
  15. {
  16. return array_map('removeSlashes', $value);
  17. }
  18. else
  19. {
  20. return stripslashes($value);
  21. }
  22. }
  23.  
  24. class User{
  25. private $id;
  26. private $email;
  27. private $haslo;
  28.  
  29. public $nazwa;
  30. public $opis;
  31. public $avatar;
  32. public $mode;
  33. public $urls;
  34. private $sesja;
  35.  
  36. private $pdo;
  37.  
  38. public function __construct($email_ = null, $haslo_ = null){
  39. $this->pdo = new PDO('mysql:host='.MySql_Host.';dbname='.MySql_DbName, MySql_Login , MySql_Password);
  40. $this->pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  41.  
  42. if(isset($email_) and isset($haslo_)){
  43. $this->email = $email_;
  44. $this->haslo = md5(sha1($haslo_).sha1('TuJestSol'));
  45. }elseif(isset($_SESSION['token'])){
  46. $this->sesja = $_SESSION['token'];
  47. $this->Load();
  48. }else die('Ups! Odwiedź rejestrację!');
  49. }
  50.  
  51. private function mysql_insert($table, $inserts) {
  52. $values = array_map("removeSlashes", array_values($inserts));
  53. $keys = array_keys($inserts);
  54.  
  55. $query = 'INSERT INTO `'.MySql_TPrefix.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $values).'\')';
  56. try{
  57. return $this->pdo -> exec($query);
  58. }
  59. catch(PDOException $e)
  60. {
  61. echo 'Wystąpił błąd biblioteki PDO: ' . $e->getMessage();
  62. return false;
  63. }
  64. }
  65.  
  66. public function Rejestruj($nazwa_){
  67. $this->nazwa = $nazwa_;
  68. $this->mode = MODE_USER;
  69. $stmt = $this->pdo -> query('SELECT * FROM `users` WHERE `haslo`="'.$this->haslo.'" and `email`="'.$this->email.'"');
  70. if($stmt->fetch()) return false;
  71. $tmp = $this->mysql_insert('users',array('nazwa'=>$this->nazwa, 'haslo'=>$this->haslo, 'email'=>$this->email, 'mode'=>$this->mode));
  72.  
  73. if($tmp)
  74. return true;
  75. return false;
  76. }
  77.  
  78. public function Loguj(){
  79. try
  80. {
  81. $_SESSION['token'] = md5(rand());
  82. $this->sesja = $_SESSION['token'];
  83. $this->pdo -> query('UPDATE `users` SET `sesja`="'.$_SESSION['token'].'" WHERE `haslo`="'.$this->haslo.'" and `email`="'.$this->email.'"');
  84. }
  85. catch(PDOException $e)
  86. {
  87. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  88. return null;
  89. }
  90. }
  91. public function Wyloguj(){
  92. try
  93. {
  94. $this->pdo -> query('UPDATE `users` SET `sesja`="NULL" WHERE `sesja`="'.$this->sesja.'"');
  95. }
  96. catch(PDOException $e)
  97. {
  98. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  99. return null;
  100. }
  101. }
  102.  
  103. public function __set($name,$value){
  104. $this->$name($value);
  105. }
  106. private function Load(){
  107. try
  108. {
  109. $stmt = $this->pdo -> query('SELECT * FROM `users` WHERE `sesja`="'.$this->sesja.'"');
  110. $row = $stmt->fetch();
  111. $stmt -> closeCursor();
  112. $urls = $this->pdo -> query('SELECT url FROM `user_sites` WHERE `users_id`="'.$row['id'].'"');
  113. foreach($urls as $url){
  114. $this->urls[] = base64_decode($url['url']);
  115. }
  116. $urls -> closeCursor();
  117. $this->opis = $row['opis'];
  118. $this->avatar = $row['avatar'];
  119. $this->nazwa = $row['nazwa'];
  120. $this->mode = $row['mode'];
  121. $this->id = $row['id'];
  122. }
  123. catch(PDOException $e)
  124. {
  125. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  126. return null;
  127. }
  128. }
  129.  
  130. public function AddUrl($url){
  131. $url = base64_encode($url);
  132. $stmt = $this->pdo -> query('SELECT * FROM `user_sites` WHERE `url`="'.$url.'" and `users_id`="'.$this->id.'"');
  133. if($stmt->fetch()) return false;
  134. $tmp = $this->mysql_insert('user_sites',array('url'=>$url, 'users_id'=>$this->id));
  135. $this->urls[] = base64_decode($url);
  136.  
  137. if($tmp)
  138. return true;
  139. return false;
  140. }
  141.  
  142. public function Opis($value){
  143. $this->opis = $value;
  144. try
  145. {
  146. $this->pdo -> query('UPDATE `users` SET `opis`="'.$this->opis.'" WHERE `sesja`="'.$this->sesja.'"');
  147. }
  148. catch(PDOException $e)
  149. {
  150. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  151. return null;
  152. }
  153. }
  154.  
  155. public function Avatar($value){
  156. $this->avatar = $value;
  157. try
  158. {
  159. $this->pdo -> query('UPDATE `users` SET `avatar`="'.$this->avatar.'" WHERE `sesja`="'.$this->sesja.'"');
  160. }
  161. catch(PDOException $e)
  162. {
  163. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  164. return null;
  165. }
  166. }
  167.  
  168. public function Mode($value){
  169. $this->mode = $value;
  170. try
  171. {
  172. $this->pdo -> query('UPDATE `users` SET `mode`="'.$this->mode.'" WHERE `sesja`="'.$this->sesja.'"');
  173. }
  174. catch(PDOException $e)
  175. {
  176. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  177. return null;
  178. }
  179. }
  180.  
  181.  
  182.  
  183. }


Logowanie:
  1. require_once('class/user.class.php');
  2. $user = new User('test','test');
  3. $user -> Loguj();


Update/Odczyt danych:
  1. require_once('class/user.class.php');
  2. $user = new User();
  3. $user->Opis = 'adad';
  4. $user->AddUrl ='http://wp.pl';
  5. echo $user -> opis;
  6. print_r($user -> urls);


Wylogowanie:
  1. require_once('class/user.class.php');
  2. $user = new User();
  3. $user->Wyloguj();


Struktura SQL:
  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id` INT NOT NULL AUTO_INCREMENT ,
  3. `nazwa` VARCHAR(45) NULL ,
  4. `email` VARCHAR(45) NULL ,
  5. `haslo` VARCHAR(45) NULL ,
  6. `opis` TEXT NULL ,
  7. `avatar` VARCHAR(128) NULL ,
  8. `mode` INT NULL ,
  9. `sesja` VARCHAR(45) NULL ,
  10. PRIMARY KEY (`id`) )
  11. ENGINE = MyISAM
  12. DEFAULT CHARACTER SET = utf8
  13. COLLATE = utf8_general_ci
  14. PACK_KEYS = DEFAULT;

Pozdrawiam
Rav
Go to the top of the page
+Quote Post

Posty w temacie
- rav1989   Optymalizacja klasy do obsługi użytkownika   21.04.2011, 20:56:08
- - Valker   Może nie jestem jakimś profesjonalistą, ale zmieni...   22.04.2011, 00:22:26
|- - rav1989   Cytat(Valker @ 22.04.2011, 01:22:26 )...   22.04.2011, 11:23:29
- - misiek172   można wiele zmienić taka troszkę średnia ta klasa ...   22.04.2011, 11:45:21
- - rav1989   Cytat(misiek172 @ 22.04.2011, 12:45:2...   22.04.2011, 23:13:52
- - Dipter   1. Definiujesz dane do bazy danych, które równie d...   23.04.2011, 23:15:56
|- - rav1989   Nie wiedziałem, że jest aż tak źle... no cóż konie...   25.04.2011, 21:47:20
- - konole   Postaraj się trzymać stałego nazewnictwa. Nazwy fu...   25.04.2011, 21:58:56
|- - rav1989   Cytat(konole @ 25.04.2011, 22:58:56 )...   25.04.2011, 22:23:02
- - Dipter   1. Klasa pomocnicza - W konstruktorze klasy ustala...   25.04.2011, 22:41:02
|- - rav1989   Cytat1. Klasa pomocnicza - W konstruktorze klasy u...   26.04.2011, 13:15:27
- - Dipter   CytatCytat5. Znów wszystko jest namieszane jak lec...   26.04.2011, 14:16:06
|- - rav1989   Cytat1. HttpRequest - Dodałeś GET i POST, ale co z...   27.04.2011, 15:06:28
- - Dipter   CytatHmm... KodFatal error: Non-static method...   27.04.2011, 16:48:55
|- - rav1989   CytatBłąd jest chyba logicznie prosty (Niestety mó...   27.04.2011, 18:08:06
- - Dipter   Usunąłeś przed metodą w klasie DB magiczne słowo ...   27.04.2011, 18:59:39
|- - rav1989   Cytat(Dipter @ 27.04.2011, 19:59:39 )...   27.04.2011, 20:56:40
- - Dipter   Właśnie o to chodzi by usunąć tego statica, bo on ...   27.04.2011, 21:47:34
|- - rav1989   Cytat(Dipter @ 27.04.2011, 22:47:34 )...   27.04.2011, 22:01:58
- - Dipter   Przydać zawsze się przyda, lecz najpierw trzeba wy...   27.04.2011, 22:09:14
- - rav1989   Cytat(Dipter @ 27.04.2011, 23:09:14 )...   28.04.2011, 02:18:56


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: 22.08.2025 - 17:19