PHP 面向对象实现数据库登陆类的简单示例

前端之家收集整理的这篇文章主要介绍了PHP 面向对象实现数据库登陆类的简单示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP面向对象实现数据库登陆的类代码感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!
db_class.PHP类的实现代码
  1. /**
  2. * PHP面向对象实现数据库登陆的类代码
  3. *
  4. * @param
  5. * @arrange 网: 512Pic.com
  6. **/
  7. <?PHP
  8. class dbclass
  9. {
  10. public $connection ;
  11. public $result ;
  12. public $fetch_num ;
  13. function connect_db($host,$user,$password)
  14. {
  15. if(($this->connection = MysqL_connect($host,$password)) == FALSE)
  16. {
  17. die("Cannot connect to the database . error code:".MysqL_error());
  18. }
  19. }
  20. function select_db($dbname,$connection)
  21. {
  22. if(MysqL_select_db($dbname,$connection)==FALSE)
  23. {
  24. die("Cannot to select the database . Error code:".MysqL_error());
  25. }
  26. }
  27. function db_query($sql)
  28. {
  29. $result = MysqL_query($sql);
  30. if($result == FALSE){
  31. die("MysqL_query execute error . Error code : ".MysqL_error());
  32. }
  33. $this->result = $result ;
  34. }
  35. function fetch_num($result)
  36. {
  37. $this->fetch_num = MysqL_num_rows($result);
  38. }
  39. }
  40. ?>
  41. /*** 来自编程之家 jb51.cc(jb51.cc) ***/
登录验证:login.PHP
  1. <?PHP
  2. /**
  3. * PHP面向对象实现数据库登陆的类代码
  4. *
  5. * @param
  6. * @arrange 网: 512Pic.com
  7. **/
  8. session_start();
  9. require_once("config.PHP");
  10. require_once("dbclass.PHP");
  11. if(count($_POST)>0)
  12. if(isset($_POST["username"])&&isset($_POST["password"])){
  13. <span style="color:#000000;"> $my_db_class = new dbclass();
  14. $my_db_class->connect_db(HOST,USER,PASSWD);
  15. $my_db_class->select_db(DB,$my_db_class->connection);
  16. $sql = sprintf("SELECT * FROM users WHERE user_name = '%s' AND user_pwd = '%s'",MysqL_real_escape_string($_POST["username"]),MysqL_real_escape_string($_POST["password"]));
  17. $my_db_class->db_query($sql);
  18. $my_db_class->fetch_num($my_db_class->result);
  19. if($my_db_class->fetch_num == 1)
  20. </span> {
  21. $_SESSION["YES"] = TRUE ;
  22. $host = $_SERVER["HTTP_HOST"] ;
  23. $path = dirname($_SERVER["PHP_SELF"]);
  24. header("Location:http://$host$path/home.PHP");
  25. }
  26. }
  27. ?>
  28. <html>
  29. <head>
  30. <title>Login web</title>
  31. </head>
  32. <body>
  33. <?PHP if(count($_POST)>0) echo "Invalid_login"; ?>
  34. <form method="post" action="<?PHP echo $_SERVER["PHP_SELF"] ?>">
  35. <table>
  36. <tr>
  37. <td>Username:</td>
  38. <td><input type="text" name="username" value="<?PHP echo $_POST["username"] ?>"/></td>
  39. </tr>
  40. <tr>
  41. <td>Password:</td>
  42. <td><input type="password" name="password"/></td>
  43. </tr>
  44. <tr>
  45. <td><input type="submit" value="Submit"/></td>
  46. </tr>
  47. </table>
  48. </form>
  49. </body>
  50. <html>
  51. /*** 来自编程之家 jb51.cc(jb51.cc) ***/
这里有几个需要注意的地方:
1. 创建一个类的实例: $my_db_class = new dbclass()

2. 操作类中的属性或者函数: $my_db_class->result(属性) $my_db_class->connect_db(HOST,PASSWD)(方法);

3. 进行数据库操作时防止sql注入:$sql = sprintf("SELECT * FROM users WHERE user_name = '%s' AND user_pwd = '%s' ",MysqL_real_escape_string($_POST["password"]))

注意:
从安全角度来考虑,我们并没有执行数据库查询后得出一个哈希表的 $row 值, 再来比较是否等于 username 和 password,即:
if ( ($row["user_name"]==$_POST["username"])&&($row["user_pwd"]==$_POST["password"]) )
{
// do something
}else{
// do something
}
利用我们代码中的比较方法,就可以将username 和 passwd 的对比在MysqL的内部运行,外部无法看到,因此增加了访问的安全性。

为了更加安全我们通常会对password进行加密,可以利用PASSWORD()函数,应值得注意的是PASSWORD()是作为哈希加密,安全性不高,我们在MysqL中看的时候是一长串的字符(它仍是ASCII码),通过一定的方式可以很轻松的破解。

作为用户,我们也不想让数据库后台管理人员看到我们的密码,我们可以利用AES_ENCRYPT($ness,$method ) $ness制定需要加密的密码 , $method为密钥,这里我们通常使用"secret",这样加密后的即使后台管理人员也无法看到我的实际密码。同样设计数据库时也需要做一些改动,比如:不加密或者利用PASSWORD()进行加密时user_pwd字段仍未:VARCHAR类型,但是利用AES_ENCRYPT()加密时则需要将 user_passwd 字段的数据类型设为: VARBINARY ;
因为它是二进制加密,最后你看到的也分辨不出来。

好了,这里重点还是介绍PHP5的面向对象的思想。

猜你在找的PHP相关文章