Автор Тема: Database and user class  (Прочетена 6489 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Database and user class
« -: 09 Ноември 2011, 15:18:32 »
Един database class и от мен. Не е кой знае какво, но като за начинаещи става
Код: PHP
  1.  
  2. <?php
  3.  
  4.  
  5. //Singleton Database class
  6. //Mysql persistent class
  7.  
  8.  
  9.  
  10.  
  11. class SppDatabase {
  12.  
  13.  
  14.     //holds the object instance
  15.  
  16.  
  17.     private static $instance = NULL;
  18.     public $link;
  19.  
  20.     //the constructor is private.. The class is Singleton
  21.  
  22.     private function __construct() {
  23.        
  24.     }
  25.  
  26.  
  27.   //connect to the databse
  28.  
  29.     public function connect($host, $user, $password) {
  30.         $this->link = mysql_connect($host, $user, $password);
  31.  
  32.  
  33.         //checks for  errors
  34.         if (!$this->link) {
  35.             throw new Exception('Unable to establish database connection: '
  36.                     . mysql_error());
  37.         }
  38.     }
  39.  
  40.  
  41.     public function SelectDatabase($database) {
  42.         if (!@mysql_select_db($db_name, $this->link)) {
  43.             throw new Exception('Unable to select database: ' . mysql_error($this->link));
  44.         }
  45.     }
  46.  
  47.  
  48.     //check the instance of the class
  49.  
  50.  
  51.     public static function getInstance() {
  52.         if (!isset(self::$instance)) {
  53.             self::$instance = new SppDatabase();
  54.         }
  55.  
  56.  
  57.         return self::$instance;
  58.     }
  59.  
  60.  
  61.     //check if there is active connection
  62.  
  63.  
  64.     public function isConnected() {
  65.         if (!empty($this->link)) {
  66.             return @mysql_ping($this->link);
  67.         } else {
  68.             return false;
  69.         }
  70.     }
  71.  
  72.  
  73.     //query the database
  74.  
  75.  
  76.     public function query($query) {
  77.         $res = @mysql_query($query, $this->link);
  78.  
  79.         if (!$res) {
  80.             throw new Exception("Query Error: " . mysql_error());
  81.         }
  82.  
  83.         return $r;
  84.     }
  85. }
  86. ?>
  87.  
  88.  
  89.  
« Последна редакция: 10 Ноември 2011, 06:06:25 от HD »

federer_11

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 931
  • ULTRAS LEVSKI
Re: Database and user class
« Отговор #1 -: 09 Ноември 2011, 20:01:52 »
Singleton и Exception-и, static свойства и методи, браво, ето един хубав ООП клас, който ползва ОО възможностите на PHP5 (изключвайки public, private, protected). :D
(x)HTML, CSS, PHP, MySQL, XML, WML, JavaScript (jQuery)

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Database and user class
« Отговор #2 -: 09 Ноември 2011, 21:13:47 »
Може да се направи даже и по-добре. Примерно вместо да  се използва морално остарялото разширение mysql може  да се използва mysql improved(mysqli) и  prepared statements.  Дори може и pdo,но все пак за начинаещите е добре да схванат смисъла на нещата.  Надявам се да свърши работа на някой.  След няколко часа или утре ще пусна и един примерен User class

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Database and user class
« Отговор #3 -: 09 Ноември 2011, 22:48:26 »
Това e User class-a,  който обещах.
Код: PHP
  1. <?php
  2.  
  3. class SppUser {
  4.  
  5.     public function __construct() {
  6.        
  7.     }
  8.  
  9.     //check if the username exist
  10.     public function exists($username) {
  11.         //Checks a user exists (for the register page)
  12.         if (mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '$username'"))) {
  13.             return TRUE;
  14.         }
  15.     }
  16.  
  17.     public function save($username, $password, $email) {
  18.  
  19.         //check if the user exist.
  20.         if (!$this->exists($username)) {
  21.  
  22.             //The query for inserting our new user into the DB
  23.             $sq1 = "INSERT INTO users (username, password, email) VALUES ('" . mysql_real_escape_string($username) . "',
  24.                '" . sha1($password) . "', '" . mysql_real_escape_string($email) . "')";
  25.             $res = mysql_query($sq1) or die(mysql_error());
  26.             //Run it. If it doesn't go through stop the script and display the error.
  27.             return true;
  28.         } else {
  29.             return false;
  30.         }
  31.     }
  32.  
  33.     public function UserInfo($username) {
  34.         //This function returns all user details to the front end. This is to save storing it all in sessions
  35.         $r2 = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE username='" . $username . "';")); //Fetch the array
  36.         return $r2; //return it
  37.     }
  38.  
  39.     public function UserInfoId($uid) {
  40.         //This function returns all user details to the front end. This is to save storing it all in sessions
  41.         $r2 = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='" . $uid . "';")); //Fetch the array
  42.         return $r2; //return it
  43.     }
  44.  
  45.     //when we call this method we define that the user is logged in
  46.  
  47.     public function setLoggedIn($username, $password) {
  48.         //This function is self explanitory :)
  49.         $_SESSION['loggedIn'] = TRUE;
  50.         $_SESSION['username'] = $username;
  51.         $_SESSION['password'] = $password;
  52.     }
  53.  
  54.     //checks the level of the users
  55.  
  56.     public function checkLevel($i) {
  57.         $levels = array("Normal", "Moderator", "Admin");
  58.         return $levels[$i];
  59.     }
  60.  
  61.     //check if the user is logged in
  62.     public function isLoggedIn() {
  63.         if (isset($_SESSION['loggedIn'])) { //If the session variable is set (Prevents nasty warnings)
  64.             if ($_SESSION['loggedIn'] && $this->verify($_SESSION['username'], $_SESSION['password'])) {
  65.                 //If it's true and the details work
  66.                 return TRUE;
  67.             }
  68.         }
  69.     }
  70.  
  71.     //log out method
  72.  
  73.     public function LogOut() {
  74.         if (isset($_SESSION['loggedIn'])) { //If they are logged in
  75.             //Unset the session variables
  76.             unset($_SESSION['loggedIn'], $_SESSION['username'], $_SESSION['password']);
  77.             $this->RedirectTo('login'); //Redirect to the login page or somewhere else
  78.         }
  79.     }
  80.  
  81.     //redirection method
  82.  
  83.     public function RedirectTo($page) {
  84.         header('Location: ' . $page . '.php');
  85.     }
  86.  
  87. }
  88.  

Ако имате някакви въпроси или забележки казвайте.
« Последна редакция: 09 Ноември 2011, 22:50:00 от metost »

velizar

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 15
  • -Получени: 1
  • Публикации: 97
Re: Database and user class
« Отговор #4 -: 27 Януари 2012, 22:02:56 »
загледах се по внимателно в user class-а и не си написъл verify метода (64 ред
Код: PHP
  1.   if ($_SESSION['loggedIn'] && $this->verify($_SESSION['username'], $_SESSION['password'])) {

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Database and user class
« Отговор #5 -: 30 Януари 2012, 15:54:02 »
Всичко си е наред. Разгледай по-внимателно метода и ще разбереш логиката.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: Database and user class
« Отговор #6 -: 30 Януари 2012, 18:27:31 »
@HD, разбирам логиката на метода, но не виждам някъде да си го сетнал. Вече друг е въпроса ако той е част от някакъв PDO, MySQLI object.
Относно SQL-a от save method-a, аз лично винаги позлвам sprintf function. Кода е по-подреден и лесно четим. Ето един мой пример, да видиш за кво иде реч:
Код: MySQL
  1. $query = sprintf("INSERT INTO `users` SET
  2.                   fname = '%s',
  3.                   lname = '%s',
  4.                   email = '%s',
  5.                   phone = '%s',
  6.                   message = '%s'",
  7.  mysql_real_escape_string($_POST['fname']),
  8.  mysql_real_escape_string($_POST['lname']),
  9.  mysql_real_escape_string($_POST['email']),
  10.  mysql_real_escape_string($_POST['phone']),
  11.  mysql_real_escape_string($_POST['message']));
  12.  
  13.  
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Database and user class
« Отговор #7 -: 30 Януари 2012, 18:31:19 »
A най- изчистено си е с prepared statement-и  PDO. Tака или иначе тоя клас ще го преработя, когато имам време.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: Database and user class
« Отговор #8 -: 30 Януари 2012, 18:44:32 »
A най- изчистено си е с prepared statement-и  PDO. Tака или иначе тоя клас ще го преработя, когато имам време.
Абсолютно - за.
Нямам никакъв опит с PDO, ползвал съм само MySQLIi, но мисля да му прегледам документацията, като имам повече време.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html