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_实现登录功能的更多相关文章

  1. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  2. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  3. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  4. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  5. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  6. 构建NetCore应用框架之实战篇(四):BitAdminCore框架1.0登录功能细化及技术选型

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.BitAdminCore框架1.0版本 1.1.0版本是指最小版本 ...

  7. smm框架学习------smm框架整合实现登录功能(一)

    一.准备所需的jar包 1.1所需jar包 1.Spring框架jar包 2.Mybatis框架jar包 3.Spring的AOP事务jar包 4.Mybatis整合Spring中间件jar包 5.a ...

  8. smm框架整合实现登录功能

    一.准备所需的jar包 1.1所需jar包 1.Spring框架jar包 2.Mybatis框架jar包 3.Spring的AOP事务jar包 4.Mybatis整合Spring中间件jar包 5.a ...

  9. SpringMVC详解(四)------SSM三大框架整合之登录功能实现

    为了后面讲解的需要,我们取数据都会从数据库中获取,所以这里先讲讲三大框架(Spring.SpringMVC.MyBatis)的整合.前面讲解 MyBatis 时,写了一篇 MyBatis 和 Spri ...

随机推荐

  1. YUV像素和ycbcr

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  2. java 哈希码

    加入新的元素到数组中 /** * Append the given object to the given array, returning a new array * consisting of t ...

  3. 以O2O为核心的ERP思考

    O2O已经火了一阵子了,很多人都在说O2O,各行各业都想和O2O有所结合,都认为这里面将会有巨大的商机. 在互联网发展到移动互联网的时代,我们的生活的很多方面已经被改变了,很多事情都已经可以在移动端完 ...

  4. 找不到这个cache.properties缓存文件

    Android  Studio在导入第三库同步时报错: C:\Users\Administrator\.gradle\caches\2.4\scripts\asLocalRepo88_4u65z0u2 ...

  5. string字符串转成16进制

    package util; public class EscapeUnescape { public static String escape(String src) { int i; char j; ...

  6. 提高你的Java代码质量吧:正确使用String、StringBuffer、StringBuilder

    一.建议  CharSequence接口有三个实现类与字符串相关:String.StringBuffer.StringBuilder,虽然它们都与字符串相关,但是其处理机制不同. 根据不同的场景,建议 ...

  7. Android之打开闪光灯关键代码

    在AndroidManifest中注册相应的权限: <uses-permission android:name="android.permission.FLASHLIGHT" ...

  8. [RxJS] Filtering operators: distinct and distinctUntilChanged

    Operator distinct() and its variants are an important type of Filtering operator. This lessons shows ...

  9. [RxJS] Marble diagrams in ASCII form

    There are many operators available, and in order to understand them we need to have a simple way of ...

  10. MySQL 的 read_buffer_size 参数是如何影响写缓冲和写性能的?

    Each thread // that does a sequential scan . The value of this variable should be a multiple of 4KB. ...