龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

面向对象 PHP面向对象实现数据库登陆的类代码

时间:2014-06-06 15:13来源:网络整理 作者:网络 点击:
分享到:
PHP面向对象实现数据库登陆的类代码 db_class.php类的实现代码: [代码片段(42行)]

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"])){    
           <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>

                                这里有几个需要注意的地方:

    1.; 创建一个类的实例: $my_db_class = new dbclass()

    2.; 操作类中的属性或者函数: $my_db_class-&gt;result(属性)  $my_db_class-&gt;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"])&amp;&amp;($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()进行加密时
收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接