PHP框架_Smarty_实现登录功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"     
    )
)

 

以上是关于PHP框架_Smarty_实现登录功能的主要内容,如果未能解决你的问题,请参考以下文章

一个php文件怎么写上增删改查 功能?

smarty中增加类似foreach的功能自动加载数据方法

Smarty简单配置代码

6月3日 smarty基础

PHP开发技术环境全套手册30+本_PHP手册下载_MySQL手册下载_Apache手册_Smarty手册

PHP Smarty 模板 变量访问 韩顺平 讲解