PHP 面向对象实现数据库登陆类的解决办法
内容摘要
这篇文章主要为大家详细介绍了PHP 面向对象实现数据库登陆类的简单示例,具有一定的参考价值,可以用来参考一下。
对PHP面向对象实现数据库登陆的类代码对此感兴趣的朋友,看看i
对PHP面向对象实现数据库登陆的类代码对此感兴趣的朋友,看看i
文章正文
这篇文章主要为大家详细介绍了PHP 面向对象实现数据库登陆类的简单示例,具有一定的参考价值,可以用来参考一下。
对PHP面向对象实现数据库登陆的类代码对此感兴趣的朋友,看看idc笔记做的技术笔记!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,$user,$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);
}
}
?>
/*** 来自php教程(www.idcnote.com) ***/
登录验证: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>
/*** 来自php教程(www.idcnote.com) ***/
这里有几个需要注意的地方:1. 创建一个类的实例: $my_db_class = new dbclass()2. 操作类中的属性或者函数: $my_db_class->result(属性) $my_db_class->connect_db(HOST,USER,PASSWD)(方法);3. 进行数据库操作时防止SQL注入:$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"]))注意:从安全角度来考虑,我们并没有执行数据库查询后得出一个哈希表的 $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 面向对象实现数据库登陆类的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释