• PHP框架_Smarty_实现登录功能


    1.项目框架

    |--mvc 

      |--data  数据

        |--cache 缓存

        |--template_c 模板生成目录

      |--framework  

        |--function

          |--function.php 功能类

        |--libs

          |--core

            |--DB.class.php  数据库工具类  

            |--VIEW.class.php  视图工具类

          |--db

            |--mysql.class.php  mysql工具类

          |--view

            |--Smarty  smarty核心文件

        |--include.list.php  统一导入php数组

        |--pc.php  统一初始化

      |--html

      |--img

      |--libs

        |--controller

          |--adminController.class.php  用户控制

        |--model

          |--adminModel.class.php  用户模型

      |--admin.php  php入口

      |--config.php  php配置

    2.function.php 功能类

        function daddslashes($str){
            return (!get_magic_quotes_gpc())?addslashes($str):$str;
        }

    3.DB.class.php  数据库工具类

    class DB {
    
        public static $db;
    
        public static function init($dbtype, $config) {
            self::$db = new $dbtype;
            self::$db->connect($config);
        }
    
        public static function query($sql){
            return self::$db->query($sql);
        }
    
        public static function findAll($sql){
            $query = self::$db->query($sql);
            return self::$db->findAll($query);
        }
    
        public static function findOne($sql){
            $query = self::$db->query($sql);
            return self::$db->findOne($query);
        }
    
        public static function findResult($sql, $row = 0, $filed = 0){
            $query = self::$db->query($sql);
            return self::$db->findResult($query, $row, $filed);
        }
    
        public static function insert($table,$arr){
            return self::$db->insert($table,$arr);
        }
    
        public static function update($table, $arr, $where){
            return self::$db->update($table, $arr, $where);
        }
    
        public static function del($table,$where){
            return self::$db->del($table,$where);
        }
    
    }

    4.VIEW.class.php  视图工具类

    class VIEW {
    
        public static $view;
    
        public static function init($viewtype,$config){
            self::$view = new $viewtype;
            /*$smarty = new Smarty();//实例化smarty
            $smarty->left_delimiter=$config["left_delimiter"];//左定界符
            $smarty->right_delimiter=$config["right_delimiter"];//右定界符
            $smarty->template_dir=$config["template_dir"];//html模板的地址
            $smarty->compile_dir=$config["compile_dir"];//模板编译生成的文件
            $smarty->cache_dir=$config["cache_dir"];//缓存*/
            foreach($config as $key=>$value){
                self::$view -> $key = $value;
            }
    
        }
    
        public static function assign($data){
            foreach($data as $key=>$value){
                self::$view->assign($key, $value);
            }
        }
    
        public static function display($template){
            self::$view->display($template);
        }
    }

    5.mysql.class.php  mysql工具类

        /**
         * 报错函数
         * 
         * @param string $error
         */
        function err($error){
            die("对不起,您的操作有误,错误原因为:".$error);//die有两种作用 输出 和 终止   相当于  echo 和 exit 的组合
        }
    
        /**
         * 连接数据库
         * 
         * @param string $dbhost 主机名
         * @param string $dbuser 用户名
         * @param string $dbpsw  密码
         * @param string $dbname 数据库名
         * @param string $dbcharset 字符集/编码
         * @return bool  连接成功或不成功 
         **/
        function connect($config){
            extract($config);
            if(!($con = mysql_connect($dbhost,$dbuser,$dbpsw))){//mysql_connect连接数据库函数
                $this->err(mysql_error());
            }
            if(!mysql_select_db($dbname,$con)){//mysql_select_db选择库的函数
                $this->err(mysql_error());
            }
            mysql_query("set names ".$dbcharset);//使用mysql_query 设置编码  格式:mysql_query("set names utf8")
        }
        /**
         * 执行sql语句
         *
         * @param string $sql
         * @return bool 返回执行成功、资源或执行失败
         */
        function query($sql){
            if(!($query = mysql_query($sql))){//使用mysql_query函数执行sql语句
                $this->err($sql."<br />".mysql_error());//mysql_error 报错
            }else{
                return $query;
            }
        }
    
        /**
        *列表
        *
        *@param source $query sql语句通过mysql_query 执行出来的资源
        *@return array   返回列表数组
        **/
        function findAll($query){
            while($rs=mysql_fetch_array($query, MYSQL_ASSOC)){//mysql_fetch_array函数把资源转换为数组,一次转换出一行出来
                $list[]=$rs;
            }
            return isset($list)?$list:"";
        }
    
        /**
        *单条
        *
        *@param source $query sql语句通过mysql_query执行出的来的资源
        *return array   返回单条信息数组
        **/
        function findOne($query){
            $rs = mysql_fetch_array($query, MYSQL_ASSOC);
            return $rs;
        }
    
        /**
        *指定行的指定字段的值
        *
        *@param source $query sql语句通过mysql_query执行出的来的资源
        *return array   返回指定行的指定字段的值
        **/
        function findResult($query, $row = 0, $filed = 0){
            $rs = mysql_result($query,  $row, $filed);
            return $rs;
        }
    
        /**
         * 添加函数
         *
         * @param string $table 表名
         * @param array $arr 添加数组(包含字段和值的一维数组)
         * 
         */
        function insert($table,$arr){
            //$sql = "insert into 表名(多个字段) values(多个值)";
            foreach($arr as $key=>$value){//foreach循环数组
                $value = mysql_real_escape_string($value);
                $keyArr[] = "`".$key."`";//把$arr数组当中的键名保存到$keyArr数组当中
                $valueArr[] = "'".$value."'";//把$arr数组当中的键值保存到$valueArr当中,因为值多为字符串,而sql语句里面insert当中如果值是字符串的话要加单引号,所以这个地方要加上单引号
            }
            $keys = implode(",",$keyArr);//implode函数是把数组组合成字符串 implode(分隔符,数组)
            $values = implode(",",$valueArr);
            $sql = "insert into ".$table."(".$keys.") values(".$values.")";//sql的插入语句  格式:insert into 表(多个字段)values(多个值)
            $this->query($sql);//调用类自身的query(执行)方法执行这条sql语句  注:$this指代自身
            return mysql_insert_id();
        }
    
        /**
        *修改函数
        *
        *@param string $table 表名
        *@param array $arr 修改数组(包含字段和值的一维数组)
        *@param string $where  条件
        **/
        function update($table,$arr,$where){
            //update 表名 set 字段=字段值 where ……
            foreach($arr as $key=>$value){
                $value = mysql_real_escape_string($value);
                $keyAndvalueArr[] = "`".$key."`='".$value."'";
            }
            $keyAndvalues = implode(",",$keyAndvalueArr);
            $sql = "update ".$table." set ".$keyAndvalues." where ".$where;//修改操作 格式 update 表名 set 字段=值 where 条件
            $this->query($sql);
        }
    
        /**
        *删除函数
        *
        *@param string $table 表名
        *@param string $where 条件
        **/
        function del($table,$where){
            $sql = "delete from ".$table." where ".$where;//删除sql语句 格式:delete from 表名 where 条件
            $this->query($sql);
        }
    
    }

    6.include.list.php  统一导入php数组

        $paths = array(
            'function/function.php',
            'libs/core/DB.class.php',
            'libs/core/VIEW.class.php',
            'libs/db/mysql.class.php',
            'libs/view/Smarty/Smarty.class.php'
        );

    7.pc.php  统一初始化

    $currentdir = dirname(__FILE__);
        include_once($currentdir.'/include.list.php');
        foreach($paths as $path){
            include_once($currentdir.'/'.$path);
        }
        class PC{
            public static $controller;
            public static $method;
            private static $config;
            private static function init_db(){
                DB::init('mysql', self::$config['dbconfig']);
            }
            private static function init_view(){
                VIEW::init('Smarty', self::$config['viewconfig']);
            }
            private static function init_controllor(){
                self::$controller = isset($_GET['controller'])?daddslashes($_GET['controller']):'index';
            }
            private static function init_method(){
                self::$method = isset($_GET['method'])?daddslashes($_GET['method']):'index';
            }
            public static function run($config){
                self::$config = $config;
                self::init_db();
                self::init_view();
                self::init_controllor();
                self::init_method();
                C(self::$controller, self::$method);
            }
        }

    8.adminController.class.php  用户控制

    require_once("libs/model/adminModel.class.php");
    
    class adminController{
        public function login(){
            if($_POST){
                //登录处理
                $this->checklogin();
            }else{
                VIEW::display("login.html");
            }
            
        }
    
        private function checklogin(){
            $authobj = new adminModel;
            if($authobj->loginsubmit()){
                $this->showmessage("登录成功");
            }else{
                $this->showmessage("登录失败");
            }
        }
    
        private function showmessage($info){
            echo "<script>alert('$info')</script>";
            exit;
        }
    }

    9.adminModel.class.php  用户模型

    class adminModel{
    
        //定义表名
        public $_table = "admin";
        private $auth="";
    
        function findByUsername($username){
            $sql = 'select * from '.$this->_table.' where username="'.$username.'"';
            return DB::findOne($sql);
        }
    
        public function loginsubmit(){
            if(empty($_POST["username"])||empty($_POST["password"])){
                return false;
            }
            $username = addslashes($_POST["username"]);
            $password = addslashes($_POST["password"]);
            //用户验证操作
            if($this->auth = $this->checkuser($username,$password)){
                $_SESSION["auth"]=$this->auth;
                return true;
            }else{
                return false;
            }
        }
    
        private function checkuser($username,$password){
            //$adminobj = M("admin");
            //$auth = $adminobj->findByUsername($username);
            $auth = $this->findByUsername($username);
            if((!empty($auth))&&$auth["password"]==$password){
                return $auth;
            }else{
                return false;
            }
        }
    }

    10.admin.php  php入口

        header("Content-type: text/html; charset=utf-8");
        session_start();
        require_once('config.php');
        require_once('framework/pc.php');
        PC::run($config);

    11.config.php  php配置

    $config=array(
        "dbconfig"=>array(
            "dbhost" => "localhost",
            "dbuser" => "root",
            "dbpsw" => "root",
            "dbname" => "demo",
            "dbcharset" => "utf8"
        ),
        "viewconfig" => array(
            'left_delimiter' => '{',
            'right_delimiter' => '}', 
            'template_dir' => 'html',
            'compile_dir' => 'data/template_c',
            "cache_dir" => "data/cache"     
        )
    )
  • 相关阅读:
    笔试面试过程中常考的简单题目
    MySQL字符串函数:字符串截取总结
    克隆到新的datatale中
    C#后台调用js代码和其他页面(弹窗)
    asp.net中如何使一个button先执行后台的Click再执行javascript的onclick?
    table按某列进行分组
    table里有两个input,选中只选中一个
    ts和js的区别
    es6-es7-es10
    ECMAScript 6(简称:ES6) 和 JavaScript 到底是什么关系?
  • 原文地址:https://www.cnblogs.com/Ryan344453696/p/5223206.html
Copyright © 2020-2023  润新知