witam mam zrobione taki maly system logowania ktory sklada sie z 2 plikow.
pierwszy class.login.php:
  1. <?php
  2. require_once('class.DB.php');
  3. require_once('class.validator.php');
  4. require_once('class.config.php');
  5.  
  6. class login{
  7.  
  8. protected $login;
  9. protected $password;
  10. protected static $instance;
  11.  
  12. private function __construct(){
  13. $config = config::singleton();
  14. session_set_cookie_params($config->sessionLifetime);
  15. if(!empty($_POST['login'])) $this->login = $_POST['login']; else $this->login = '';
  16. if(!empty($_POST['password'])) $this->password = $_POST['password']; else $this->password = '';
  17. }
  18.  
  19. public static function singleton(){
  20. if (!isset(self::$instance)) {
  21. $c = __CLASS__;
  22. self::$instance = new $c();
  23. }
  24. return self::$instance;
  25. }
  26.  
  27. public function checkLoginData(){
  28. $validator = validator::singleton();
  29. if(!$validator->validatePassword($this->password)){
  30. echo 'zle haslo ';
  31. return false;
  32. }else if(!$validator->validateLogin($this->login)){
  33. echo 'zly login';
  34. return false;
  35. }else{
  36. $db = DB::singleton();
  37. $pass = md5($this->password);
  38. if(strtolower($this->login) == 'admin'){
  39. $query = "SELECT COUNT(*) AS COUNT FROM `ADMIN` WHERE `PASSWORD` = '$pass'";
  40. }else{
  41. $query = "SELECT COUNT(*) AS COUNT FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login') ";
  42. $query .= "AND `PASSWORD` = '$pass'";
  43. };
  44. $db->send_query($query);
  45. $error = $db->isQueryError();
  46. if($error === false){
  47. $row = $db->getRow();
  48. if($row['COUNT'] == 1){
  49. return true;
  50. }else{
  51. return false;
  52. };
  53. }else{
  54. return $error;
  55. };
  56. };
  57. }
  58.  
  59. public function isActive(){
  60. $db = DB::singleton();
  61. $query = "SELECT `ACTIVATED` FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login')";
  62. $db->send_query($query);
  63. $row = $db->getRow();
  64. if($row['ACTIVATED'] == 1) return true; else return false;
  65. }
  66.  
  67. public function isBanned(){
  68. $db = DB::singleton();
  69. $query = "SELECT `BANNED` FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login')";
  70. $db->send_query($query);
  71. $row = $db->getRow();
  72. if($row['BANNED'] == 1) return true; else return false;
  73. }
  74.  
  75. public function login(){
  76. if($this->checkLoginData()){
  77. if(strtolower($this->login) == 'admin'){
  78. $_SESSION['logged'] = true;
  79. $_SESSION['login'] = 'Admin';
  80. }else{
  81. $db = DB::singleton();
  82. $query = "SELECT `LOGIN` FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$this->login')";
  83. $db->send_query($query);
  84. $row = $db->getRow();
  85. $time = time();
  86. $query = "UPDATE `USERS` SET `LASTLOGIN` = $time WHERE `LOGIN` = '".$row['LOGIN']."'";
  87. $db->send_query($query);
  88. if($db->isQueryError() === false){
  89. $_SESSION['logged'] = true;
  90. $_SESSION['login'] = $row['LOGIN'];
  91. return true;
  92. }else{
  93. return $db->isQueryError();
  94. };
  95. };
  96. }else{
  97. return '';
  98. };
  99. }
  100.  
  101. public function isLogged(){
  102. if(!empty($_SESSION['logged']) && !empty($_SESSION['login'])) return true; else return false;
  103. }
  104.  
  105. public function logout(){
  106. $_SESSION = array();
  107. }
  108.  
  109. public function isAdmin(){
  110. print_r($_SESSION);
  111. if(!empty($_SESSION['login']) && $_SESSION['login'] == 'Admin' && $_SESSION['logged'] === true) return true; else return false;
  112. }
  113.  
  114. public function showAccount(){
  115. if($this->isLogged()){
  116. if($this->isAdmin() == true) {
  117. return '<div class="center"><a href="index.php?p=10&amp;action=change_passw_form">Zmiana hasła</a></div>';
  118. };
  119. $login = $this->getLogin();
  120. $query = "SELECT COUNT(*) AS COUNT FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$login')";
  121. $db = DB::singleton();
  122. $db->send_query($query);
  123. $error = $db->isQueryError();
  124. if($error === false){
  125. $row = $db->getRow();
  126. if($row['COUNT'] == 1){
  127. $query = "SELECT * FROM `USERS` WHERE LOWER(`LOGIN`) = LOWER('$login')";
  128. $db->send_query($query);
  129. if($db->isQueryError() === false){
  130. $row = $db->getRow();
  131. $table = '<div class="center">
  132. <table style="margin:20px auto;">
  133. <tr>
  134. <td><div class="right">Login : </div></td>
  135. <td><div class="left">'.$row['LOGIN'].'</div></td>
  136. </tr>
  137. <tr>
  138. <td><div class="right">Email : </div></td>
  139. <td><div class="left">'.$row['EMAIL'].'</div></td>
  140. </tr>
  141. <tr>
  142. <td><div class="right">Imię : </div></td>
  143. <td><div class="left">'.$row['NAME'].'</div></td>
  144. </tr>
  145. <tr>
  146. <td><div class="right">Płeć : </div></td>
  147. <td><div class="left">';
  148. if($row['SEX'] == 1) $table .= 'Mężczyzna'; else $table .= 'Kobieta';
  149. $table .= '</div></td>
  150. </tr>
  151. <tr>
  152. <td><div class="right">Data urodzenia : </div></td>
  153. <td><div class="left">'.date('d-m-Y',$row['BIRTHDATE']).'</div></td>
  154. </tr>
  155. <tr>
  156. <td><div class="right">Skąd : </div></td>
  157. <td><div class="left">'.$row['CITY'].'</div></td>
  158. </tr>
  159. <tr>
  160. <td><div class="right">Konto utworzono : </div></td>
  161. <td><div class="left">'.date('d-m-Y H:i:s',$row['DATE']).'</div></td>
  162. </tr>
  163. <tr>
  164. <td><div class="right">Ostatnie logowanie : </div></td>
  165. <td><div class="left">'.date('d-m-Y H:i:s',$row['LASTLOGIN']).'</div></td>
  166. </tr>
  167. <tr>
  168. <td colspan="2"><div class="center"><a href="index.php?p=10&amp;action=edit_account_form">Edycja danych</a> | 
  169. <a href="index.php?p=10&amp;action=change_passw_form">Zmiana hasła</a></div></td>
  170. </tr>
  171. </table></div>';
  172. return $table;
  173. }else{
  174. return $db->isQueryError();
  175. };
  176. }else{
  177. return '<div class="error">W bazie nie ma takiego użytkownika</div>';
  178. };
  179. }else{
  180. return $error;
  181. };
  182. }else{
  183. return '<div class="error">Nie jesteś zalogowany</div>';
  184. };
  185. }
  186.  
  187. public function showLoginForm(){
  188. return '
  189. <div class="center">
  190. <form action="index.php?p=10&amp;action=login" method="post">
  191. <table style="margin:50px auto;">
  192. <tr><td class="right">Login: </td><td><input type="text" maxlength="30" name="login" class="gb_sygnature" /></td></tr>
  193. <tr><td class="right">Hasło: </td><td><input type="password" maxlength="30" name="password" class="gb_sygnature" /></td></tr>
  194. <tr><td colspan="2" class="right"><input type="submit" value="Zalogój" class="submit" /></td></tr>
  195. </table>
  196. </form>
  197. </div>';
  198. }
  199.  
  200.  
  201. };
  202. ?>


i teraz jak uzeywam $this->login(); to on ustwaia zmienne sesji $_SESSION['logged']=1 i $_SESSION['login']='Admin' . Gorzej sie robi kiedy przechodze do innej strony np na ktorej moge zaobaczyc dane mojego konta. No i na tej stronie kiedy sprawdzam czy admin funkcja isAdmin(); to print_r($_SESSION); wyswietla takie cos:
Kod
Array ( [logged] => 1 [login] => login Object ( [login:protected] => [password:protected] => ))
Zupelnie nie wiem co sie dzieje nigdy ni przypisywalem zmiennej sesyjnej obiektu jakiegokolwiek. Powinno byc 'Admin' a nie obiekt w tej zmiennej sesyjnej. Moze ktos wie co jest z tym nie tak.

ehh cos zle dziala kolorowanie skladni polowe mi ucielo drogiego pliku login.php i jeszcze jakas sieczke na ekranie wiec ga nie wypisze tutaj :/

edit: ehh udalo mi sie rozwiazac ten problem zaczalem uzywac $_SESSION['user_login'] zamiasta $_SESSION['login']; teraz przy sprawdzaniu czy admin print_r() wyswietla takie cos:
Kod
Array ( [logged] => 1 [login] => login Object ( [login:protected] => [password:protected] => ) [user_login] => Admin )
nie wiem czemu tam ciagle jest obiekt przypisany do zmiennej sesyjnej. Moze ktos wie czemu tak jest i czy to czase nie jest wina php bo ja tego obiektu nie przypisywalem do zmiennej sesyjnej??