6月6日,晴天。“熟梅天气豆生蛾。一见榴花感慨多。

芒种积阴凝雨润,菖蒲修剪莫蹉跎。


九、后台编写-续-1

1、改动admin/Tpl/Login/index.html

自己改动logo,用户名、密码都改为中文。文本框分别加入name="username"。name="password"。

重点改动<form action="index.html">。改为<form action="__URL__/login" method="post">

解释: __URL__是当前模块的URL地址。

在PHP里:__URL__ 当前模块的URL地址

                      在模版里:__URL__ 会替换成当前模块的URL地址(不含域名)

action="__URL__/login"  是提交到当前模块的login方法下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvendzendz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" height="346" width="480" align="middle">

2、编写Login模块的login方法

<?

php
class LoginAction extends Action {
function index() {
// 配置页面显示内容
$this->assign ( 'title', '后台管理系统' );
$this->display ();
} //用户登录页面
function login(){
header("Content-Type:text/html; charset=utf-8");
//首先检查验证码是否正确(验证码存在Session中)
if($_SESSION['verify'] != md5($_POST['verify']) ){
$this->error('验证码不对');
} $user=M('User');//參数的User必须首字母大写,否则自己主动验证功能失效! $username=$_POST['username'];
$password=md5($_POST['password']); if(!$this->checklen($username)){
$this->error('用户名长度必须在5~15个字符之间');
} //查找输入的用户名是否存在
if($user->where("username ='$username' AND password = '$password'")->find()){
session(username,$username);
$url=U('/Index/index/username/'.$username);
redirect($url,0, '跳转中...');
}else{
$this->error('用户名或密码错误');
}
} function checklen($data){
if(strlen($data)>15 || strlen($data)<5){
return false;
}
return true;
}
}

当中,$user = M('User');表示实例化User模型,事实上等效于:$User
= new Model('User');表示操作think_user表。

在未定义不论什么模型的时候,我们能够使用M方法实例化一个模型类来进行操作。这样的方法最简单高效,由于不须要定义不论什么的模型类,所以支持跨项目调用。缺点也是由于没有自己定义的模型类,因此无法写入相关的业务逻辑,仅仅能完毕主要的CURD操作。

M方法的调用格式:M('[基础模型名:]模型名','数据表前缀','数据库连接信息')

       M方法有三个參数。第一个參数是模型名称(能够包含基础模型类和数据库),第二个參数用于设置数据表的前缀(留空则取当前项目配置的表前缀),第三个參数用于设置当前使用的数据库连接信息(留空则取当前项目配置的数据库连接信息)

       第二个參数留空默认表前缀think_。 第三个參数留空,则须要配置admin\Conf\config.php

<?

php

$arr1=array(
//'配置项'=>'配置值'
'URL_MODEL' =>1,//path-info 模式
); $arr2=include './config.inc.php'; return array_merge($arr1,$arr2);
? >

config.inc.php配置

<?

php
return array(
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => 'tp',//数据库名
'DB_USER' => 'root', //username
'DB_PWD' => 'root',//password
'DB_PORT' => '3306',
'DB_PREFIX' => 'think_',//数据库表名前缀
);
?>

 M('User');表示实例化User模型。模型名字是User,该模型就是数据库表think_user

drop table if exists think_user;

/*==============================================================*/
/* Table: think_user */
/*==============================================================*/
create table think_user
(
id int(11) not null auto_increment,
username char(15) not null,
password char(40) not null,
createtime int(11) not null,
ip char(16) not null,
primary key (id)
);

代码释义:

ThinkPHP内置了很灵活的查询方法,能够高速的进行数据查询操作,查询条件能够用于CURD等不论什么操作,作为where方法的參数传入就可以: if($user->where("username
='$username' AND password = '$password'")->find())。

最后生成的SQL语句是SELECT * FROM think_user WHERE `username`='admin' and  `password`='admin'。

Session赋值比較简单。直接使用: session(username,$username);相当于:$_SESSION['username'] =$username;

$url=U('/Index/index/username/'.$username);中username是传递的參数名,$username是參数值。

redirect($url,0, '跳转中...');Action类的redirect方法能够实现页面的重定向功能。使用方法是停留0秒后跳转到Index模块的index操作,而且显示页面跳转中字样。重定向后会改变当前的URL地址。

3、
改动admin/Lib/Action/IndexAction.class.php,例如以下:

<?php
// 本类由系统自己主动生成,仅供測试用途
class IndexAction extends Action {
public function index() {
if (session ( '? username' )) {
$this->display();
} else {
$this->error ( '亲,您好,请先登录!', U ( '/Login/index/' ) );
}
}
}

代码释义:

this->assign('name',$value); //在 Action 类里面使用 assign方法对模板变量赋值,不管何种变量类型都统一使用 assign 赋值。

$this->display() // 输出默认模版文件

模板默认输出是指输出指令 display 方法中不带不论什么參数,系统默认输出相应模板,即admin/Tpl/Index/index.html。

4、 用下载的后端模板里面文件的index.html放在admin\Tpl\Index\index.html里面,改动index.html文件中的相关资源路径。如:<link rel="stylesheet" href="__PUBLIC__/Css/admin/reset.css" type="text/css" media="screen"
/>等。还有public\Css\admin\style.css里面的如:background: #f0f0f0 url('../../Images/admin/bg-body.gif')

5、訪问:http://localhost/MyFirstThinkPHP_1/admin.php  ,呵呵。出来了!须要在建好的数据库表think_user中填写username为admin,password为admin(21232f297a57a5a743894a0e4a801fc3)。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvendzendz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" align="middle">

第四天 ThinkPHP手把手高速拼接站点(四)的更多相关文章

  1. 第三天 ThinkPHP手把手高速拼接站点(三)

    6月1日,小雨." 梅子金黄杏子肥,麦花雪白菜花稀. 日长篱落无人过,唯有蜻蜓蛱蝶飞." 七.MVC模式 ThinkPHP的MVC开发机制例如以下: M  Model层    模型 ...

  2. 使用ThinkPHP框架高速开发站点(多图)

    使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...

  3. (视频)《高速创建站点》 4.2 完结篇 – 应用运营vs.发射卫星,遥測(Telemetry) 技术

    本文是<高速创建站点>系列的第10篇(完结篇),假设你还没有看过之前的内容,建议你点击下面文件夹中的章节先阅读其它内容再回到本文.訪问本系列文件夹.请点击:http://anb.io/bl ...

  4. C语言高速入门系列(四)

    C语言高速入门系列(四) C语言数组 ---------转载请注明出处:coder-pig 贴心小提示:假设图看不清晰可右键另存为,应该就非常清晰了; 注意上面的代码都要自己过一遍哦! 本节引言: 经 ...

  5. m_Orchestrate learning system---二十四、thinkphp里面的ajax如何使用

    m_Orchestrate learning system---二十四.thinkphp里面的ajax如何使用 一.总结 一句话总结:其实ajax非常简单:前台要做的事情就是发送ajax请求过来,后台 ...

  6. hibernate篇章四-- Hibernate配置文件中hiberante.hbm2ddl.auto四个参数的配置

    我们在搭建环境的时候,在配置文件中有一个属性标签为: <property name="hibernate.hbm2ddl.auto">     </propert ...

  7. ThinkPHP 3.2.3(四)架构之多层MVC

    一.模型(Model)层 1.ThinkPHP支持多层Model,不同的模型层都继承自系统的Model类.   2.模型的多层通过目录结构和命名规范区分. 例如:在某个项目设计中需要区分数据层.逻辑层 ...

  8. AutoTile 自动拼接(四) 学习与实践

    今天主要来说下,数据绑定. 之前第一章,我说到 把 资源图 画成格子,你们应该还有印象吧. 那么,当我 知道 格子数据,能否拿到 资源对应的图片呢? 大家先复习一下 第一章,发现很多格子数据 是相同的 ...

  9. Thinkphp手把手练习

    一.搭建thinkphp开发环境 准备条件:thinkphp框架 1.在Apache的www目录下新建文件夹,命名为thinkphp,可以将THinkPHP框架放在该目录中. 2.在thinkphp目 ...

随机推荐

  1. 如何在Android Studio中创建jniLib和asset文件夹 2

    1.创建asset文件夹 如图进行操作 2.创建jniLib文件夹 —打开app下面的gradle文件(不是project的gradle) —在gradle文件的Android标签里面添加 sourc ...

  2. VisualVM远程JVM

    Tomcat配置 进入TOMCAT_HOME/bin目录 打开catalina.sh文件,加入如下信息: JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.ho ...

  3. 01、Mecanim动画系统

    序言:Mecanim动画系统是Unity4.0之后退出的新版动画系统,非常适合人类动画系统.本文是作为自己的学习来讲解的, 可能会有些啰嗦,但尽量把自己的坑都为大家列出来,让大家理解透彻. 一.文件的 ...

  4. POJ 1180 Batch Scheduling(斜率优化DP)

    [题目链接] http://poj.org/problem?id=1180 [题目大意] N个任务排成一个序列在一台机器上等待完成(顺序不得改变), 这N个任务被分成若干批,每批包含相邻的若干任务. ...

  5. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

    第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...

  6. 物联仓储系统ZigBee组网原理

    在嵌入式项目物联仓储系统中,使用cortexM0模拟仓库,cortex-A9模拟服务器,两块开发板之间使用ZigBee技术实现数据接收和发送,本文就介绍一下ZigBee组网的原理和相关步骤. 1.组网 ...

  7. 深入理解CommonJS!

    CommonJS 一开始大家都认为JS是辣鸡,没什么用,官方定义的API只能构建基于浏览器的应用程序,CommonJS就按耐不住了,CommonJS API定义很多普通应用程序(主要指非浏览器的应用) ...

  8. Spring(八)编码剖析@Resource注解的实现原理

    配置文件beans2.xml <?xml version="1.0" encoding="UTF-8"? > <beans xmlns=&qu ...

  9. android中实现内容搜索

    在编写android搜索代码的时候,怎样去实现搜索功能,考虑中的有两种: 自己定义搜索方法: 1.自己定义搜索输入框,搜索图标,搜索button 2.自己定义语音输入方法 3.自己定义经常使用热词内容 ...

  10. Spark(四) -- Spark工作机制

    一.应用执行机制 一个应用的生命周期即,用户提交自定义的作业之后,Spark框架进行处理的一系列过程. 在这个过程中,不同的时间段里,应用会被拆分为不同的形态来执行. 1.应用执行过程中的基本组件和形 ...