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

PHP面向对象实现数据库登陆的类代码感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!
db_class.PHP类的实现代码

/**
 * PHP面向对象实现数据库登陆的类代码
 *
 * @param 
 * @arrange 网: 512Pic.com
 **/
<?PHP
   class dbclass
   {
	 public $connection ;
  public $result ;
		public $fetch_num ;   
		 function connect_db($host,$user,$password)
   {
		if(($this->connection = MysqL_connect($host,$password)) == FALSE)
	 {
		 die(Cannot connect to the database . error code:.MysqL_error());
	 }
   }
   function select_db($dbname,$connection)
   {
		 if(MysqL_select_db($dbname,$connection)==FALSE)
	  {
		 die(Cannot to select the database . Error code:.MysqL_error());
	  }
   }
   function db_query($sql)
   {
	   $result = MysqL_query($sql);
	if($result == FALSE){
	   die(MysqL_query execute error . Error code : .MysqL_error());
	}
	$this->result = $result ;
   }
   function fetch_num($result)
   {
		$this->fetch_num = MysqL_num_rows($result);
   }
   }
?>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/
登录验证:login.PHP

<?PHP
/**
 * PHP面向对象实现数据库登陆的类代码
 *
 * @param 
 * @arrange 网: 512Pic.com
 **/
session_start();
	 require_once(config.PHP);
  require_once(dbclass.PHP);
	 if(count($_POST)>0)
	 if(isset($_POST[username])&&isset($_POST[password])){  
		<span style=color:#000000;>   $my_db_class = new dbclass();
   $my_db_class->connect_db(HOST,USER,PASSWD);
   $my_db_class->select_db(DB,$my_db_class->connection);
   $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]));
		 $my_db_class->db_query($sql);
		 $my_db_class->fetch_num($my_db_class->result);
		 if($my_db_class->fetch_num == 1)
</span>         {
	   $_SESSION[YES] = TRUE ;
	$host = $_SERVER[HTTP_HOST] ; 
	$path = dirname($_SERVER[PHP_SELF]);
	header(Location:http://$host$path/home.PHP);
		 }   
  }
?>
<html>
	 <head>
		<title>Login web</title>
  </head>
  <body>
  <?PHP if(count($_POST)>0) echo Invalid_login; ?>
	 <form method=post action=<?PHP echo $_SERVER[PHP_SELF] ?>>
	 <table>
		 <tr>
	   <td>Username:</td>
	   <td><input type=text name=username value=<?PHP echo $_POST[username] ?>/></td>
   </tr>
   <tr>
	   <td>Password:</td>
	<td><input type=password name=password/></td>
   </tr>
   <tr>
	   <td><input type=submit value=Submit/></td>
   </tr>
		</table>   
  </form>
  </body>
<html>
/***   来自编程之家 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的面向对象的思想。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中NATIVE的支付实现流程与PC端实现扫码支付流程
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中APP的支付的配置与实现流程
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户信息这个功能的开发流程。 配置 1.首先得在微信公众平台申请一下微信小程序账号并获取到小程序的AppID和AppSecret https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2F
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常完善且强大的功能和便捷的开发体验,使我逐渐喜欢上了它。
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中JSAPI的支付实现流程
服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?