PHP面向对象之数据库类实现登录
来源:互联网 发布:java教学 编辑:程序博客网 时间:2024/05/22 01:36
面向对象的思想在PHP5中得到更为广泛的应用,这里我们仅实现一个简单的db_class的数据库操作类来实现登录验证:
db_class.php类的实现代码:
<?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);} }?>
登录验证:login.php
<?php session_start(); ?><?php require_once("config.php"); require_once("dbclass.php"); if(count($_POST)>0) if(isset($_POST["username"])&&isset($_POST["password"])){ $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) { $_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>
这里有几个需要注意的地方:
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面向对象之数据库类实现登录
- PHP通过面向对象实现数据库备份
- PHP之面向对象
- PHP面向对象操作数据库
- php面向对象之抽象类
- php面向对象之-抽象类-131
- php面向对象之抽象类
- php面向对象的用户登录身份验证
- PHP面向对象之我见
- PHP面向对象之我见
- PHP面向对象之----static
- php面向对象之__destruct()
- PHP面向对象之克隆
- PHP之面向对象学习
- PHP 面向对象之__toString
- php 面向对象之 __invoke
- php 面向对象之反射
- php初学之面向对象
- 学习笔记之使用vi(暂时离开)和.vimrc(一)
- 我不可能永远都对
- 初学JDBC__第四节(SQL注入,PreparedStatement和Statement )
- 低级格式化
- 闪回查询、闪回表、闪回数据库(delete,update,drop及一切混合动作)
- PHP面向对象之数据库类实现登录
- fedora安装apache2
- 从这里开始
- [转]VC生成MAP文件
- Oracle Tablespace Point-in-Time Recovery (TSPITR)
- oracle死锁时,杀进程的方法
- 进程和线程的详细比较
- 如何停止一个JOB
- linux重要命令