04mvc框架原理(8days)06

增加验证码的工具类

工具类

framework/tool/CaptchaTool.class.php

所有关于验证码的工作:生成,验证

?

妥善管理所使用到背景图片:

放置在 工具目录:

?

?

展示使用验证码

增加一个控制器动作

实例化该工具类,从而完成展示验证码功能!

app/controller/back/AdminController.class.php

captchaAction()

?

表单页面的img标签请求该动作

app/view/back/login.html

?

将该动作也设置成验证登录特例

app/controller/back/BackPlatformContrller.class.php

?

?

验证验证码

?

同时增加一个验证码工具的验证功能

?

登陆验证的一个子功能

app/controller/back/AdminController.class.php

signinAction();

?

?

保存登陆信息

利用cookie技术,将登陆的某些标识,保存起来!

保存当前用户的某些信息!

不保存登陆标识。

典型: 保存的管理员ID,处理过的密码!

?

?

保存登陆信息

在验证了是正确的管理员后:

app/controller/back/AdminController.class.php

signinAction();

?

先得到管理员信息!

在管理员表模型中

?

?

登陆验证时,验证cookie信息

?

app/controller/back/BackPlatformController.clas.sphp

?

完成 adminModel的checkByCookie

?

升级模型

处理表名

it_category, it_admin

真实的表名有两部分组成:实际表名 = 前缀 + 逻辑表名

?

将前缀和逻辑表名分开处理!

处理前缀

?

  1. 增加一个前缀配置项!

  1. 是所有模型(基础模型)的前缀属性为该值!

构造时,将其初始化

处理逻辑表名

为每个模型增加一个表示当前操作的逻辑表名的属性

?

拼凑真实表名

?

在基础模型中,增加一个方法,用于拼凑真实表名!

?

?

在执行sql语句,使用到表名的地方,可以利用该方法:

?

?

?

?

模型的常用功能的sql语句的拼凑!

delete from 当前表名 where 主键字段=‘主键字段值‘

3

delete from it_admin where admin_id=3

?

?

获得模型对应表的基本结构

字段名,与 ,哪个字段是主键即可!

增加一个属性保存当前模型对应表基本结构(字段集合)

?

在实例化模型对象时为其赋值

完成 getFields()

?

?

?

自动删除

利用主值,拼凑一条根据主键删除记录的sql,执行!

?

在基础模型上:

Framework/Model.class.php

?

删除时可以使用该方法:

分类模型:

categoryModel

?

?

自动利用主键查询

在基础模型中:

Model.class.php

?

用一下:

编辑分类时,获得当前分类信息:

?

?

自动插入

insert into 表名 (字段1,字段2,字段N) values (值1,值2,值N)

$data = array(

????‘字段1‘=>‘值1‘,

‘字段2‘=>‘值2‘,

‘字段3‘=>‘值3‘,

);

此时需要一个关联数组,$data。要求元素表示一个字段。下标为字段名,而元素的值为字段值!

?

添加分类时:

categoryModel

?

?

设计商品表

?

?

增加商品

展示增加表单

控制器

增加一个后台的商品管理控制器

app/controller/back/GoodsController.class.php

增加第一个方法动作:

addAction()

?

模型

已经写好!

视图

增加一个视图模板文件:

app/view/back/goods_add.html

选项卡结构!

每个内容是一个table!

所有的table都在一个form内:

<form>

<table>

<table>

?

?

以位运算管理精品新品热销:

?

切换选项卡:

使用的js:

在当前的项目中,同时增加这两个js文件:

?

提交:

?

其他

在左侧菜单部分增加一个链接请求当前的添加商品

menu.html

处理表单数据

Controller

后台商品控制器insertAction

?

Model

增加一个商品表模型

增加一个insertGoods方法:

?

View

没有到模板

?

?

?

?

文件上传

基本原理操作介绍

?

指的是,文件从浏览器端,上传到服务器端!

?

已经可以将数据从浏览器端上传到服务器端!

?

文件上传 与 字符串提交到服务器之间有什么区别?

?

表单内的文本框,与文件域都一样,都是表单内的普通数据!

因此,在表单提交时,所有的数据(包括文本框,与文件域)都会被提交到服务器上!

?

但是,文本框,与 文件域不一样的地方:

数据在存储或者传输时,存在两种编码:字节码,二进制码!

普通的字符串上传到服务器需要字节编码!

但是将文件上传的编码是: 二进制编码!

?

但是,默认的,浏览器是不会处理二进制编码的!将所有的数据都当字节码字符串处理!

?

因此上传文件的第一个工作:

告知浏览器,当前表单内,有需要被二进制编码的数据!(编码的数据是由多种编码组成)

利用表单的属性:

enctype="multipart/form-data"

此时浏览器在碰到文件域时,就知道以二进制形式编码!

?

此时,提交到服务器上表单内的所有数据(字符串,文件)

?

服务器的PHP代码来处理数据:

对字符串的处理:保存$_POST变量内(内存中)

对文件的处理:将接收到文件,保存到服务器系统的临时目录下。有效期,当前脚本结束!

?

?

用户需要在php的脚本执行周期内,将临时文件 持久化(拷贝到别的地方)

利用函数:

move_uploaded_file();//移动已经上传的文件

移动结果 = move_uploaded_file(临时文件,目标文件)

上传的临时文件的信息,被保存到超全局数组变量$_FILES中!

为每个上传的文件,整理5个信息:

name: 原始文件名

type: 类型。image/jpeg text/html 网络上标识资源类型方法。称之为MIME(多用途internel邮件扩展类型)类型。

tmp_name:临时文件名

error:错误标号(0,123467)

size:大小,字节Byte

?

?

?

上传函数

?

?

?

?

?

?

?

唯一字符串 = uniqid(前缀)函数可以得到一个唯一的字符串!并且可以指定前缀:

此时应该从原文件名取得后缀!

名字字符串中最后一个点到结尾的子字符串!

strrchr()。找到某个子字符串的最后出现位置,从该位置开始,截取到字符串的最后!

?

?

?

错误类型

1:

文件太大,超过了php的对上传文件的最大限制

可以php的配置文件中修改:

?

PHP对所有post数据的大小也有限制:所有的表单数据加起来,不能超过!

2:

文件过大,超出了表单内的一个隐藏元素的限制:

该元素要出现在文件上传域之前

?

3:

文件没有上传

4:

没有上传文件

6,7:

保存上传文件临时文件夹错误!

?

?

增加文件上传工具类

framework/tool/UploadTool.class.php

?

设计:

保存文件目录

最大的文件大小

文件类型

增加以上的属性,进行在构造工具类对象时需要初始化!

?

增加一个上传文件的方法

错误信息应该保存到属性中:

对合理性的判断依赖于属性:

目标文件应该出现在指定位置:

?

返回值,文件名,保存到数据库的名称,应该相对的!

?

?

项目中使用

修改添加商品的表单

app/view/back/goods_add.html

?

添加商品时:

app/controller/back/GoodsController.class.php

?

此时需要UPLOAD_DIR ,上传目录常量配合!

需要增加目录:

?

测试:

时间: 2024-08-30 16:37:37

04mvc框架原理(8days)06的相关文章

04mvc框架原理(8days)01

面向对象关键字: class public,protected,private static const ? self,parent,static ? extends implements abstract interface final ? new clone ? $this ? ? 介绍项目开发 安装ecshop 解压压缩包后,获取其中upload子目录的所有文件,将其放置到可以被浏览器请求到某个目录(建议改名) 请求,index.php即可! 会自动跳转到安装页面(或者可以请求instal

04mvc框架原理(8days)05

后台的登陆判断 后台几乎所有的动作,在执行前都需要判断是否登录! 应该在所有的后台动作之前都判断呢? 所有的后台控制器在执行时,都需要判断! ? 典型的: 增加每个平台的基础控制器! 写平台下的公共代码! ? 实现: 在后台中: app/controller/back/ 增加: BackPlatformController.class.php 所有的后台都继承自: ? ? ? 将登陆验证的功能,提取到公共位置 ? 使其在每次,得到控制器类对象时,完成对登陆的验证! 在构造方法中: 在后台的公共控

04mvc框架原理(8days)03

页面跳转 header('Location: url'); 优势:在于立即跳转! 劣势:没有办法在跳转前给出提示! ? header功能是,发送响应头信息!相应头信息,是相应信息的一部分!通知浏览器应该做哪些事情的部分!但是要求,相应头信息,要先于响应主体(相应信息的其他部分)先被发送到浏览器! 因此,无论如何也是看不到echo的提示: 甚至,上面的代码会出现语法错误! 默认在于php有个叫:输出缓冲功能,会默认缓存所有的主体输出! ? 因此,编程上建议在使用header函数时,前面不应该有任何

04mvc框架原理(8days)02

框架 实现业务逻辑的基础代码,主要包括: 一:项目的架构模式(MVC) 二:常用的公共操作代码(MySQLDB,文件上传,图片处理,分页,字符串处理,session处理) 应该将以上的代码总结出来,下次可以直接使用! ? ? 几个项目的概念 ? 项目功能: 前台:负责展示项目具体功能的平台称之为前台! 后台:负责功能管理,数据管理的平台称之为后台! ? 工作内容: 程序:负责网站的业务逻辑主体功能实现的工作,程序!(PHP,SQL,JS) 美工:负责设计页面样式!(HTML,CSS,JS) ?

04mvc框架原理(8days)04

session操作 session详细使用 session的开启 session_start(); ? 自动开启 session可以自动开启!在当前的脚本执行之前,就完成开启! 通过php的配置文件,修改即可! ? 注意,在session已经开启的情况下再开启,则会触发错误! ? 因此典型的开启session是如下的代码: ? session_start()前的输出问题 session_start前也不应该有任何的输出,因为可能会使用到响应头信息(类似于header函数) ? ? $_SESSI

【C++基础 06】explict关键字

C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. 1.示例 我们先来看一段示例代码: class A { public: A(int v):var(v){};//带一个int型值的构造函数 bool isSame(const A& ref) const {return var == ref.var;}//判等函数 private: int var;//成员变量var }; void main()

初尝Mcafee之在ePO中进行策略和客户端任务设置【06】

一.策略和客户端任务概述 在ePO中点击"菜单",可以看到一个策略的大分类:ePO就是通过分配策略和客户端任务给客户端代理,然后代理将这些策略和客户端任务分配给本地相应的Mcafee杀毒防护软件进行执行: 策略是针对软件的内在参数和计划任务的配置,例如VirusScan是否扫描压缩文件,VirusScan的扫描计划的设置: 客户端任务是针对软件的外在交互,例如安装,部署,更新,信息统计等: 二.策略和客户端任务的分配结构: 策略和客户端任务的分配结构有点跟Windows Server的

java进阶06 线程初探

线程,程序和进程是经常容易混淆的概念. 程序:就是有序严谨的指令集 进程:是一个程序及其数据在处理机上顺序执行时所发生的活动 线程:程序中不同的执行路径,就是程序中多种处理或者方法. 线程有两种方法实现 一:继承Thread 覆盖run方法 package Thread; public class Thread1 { public static void main(String[] args){ MyThread1 thread1=new MyThread1(); thread1.setName

1099:零起点学算法06——再来一题除法算术题

1099: 零起点学算法06--再来一题除法算术题 Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: 4811  Accepted: 1917[Submit][Status][Web Board] Description 再来一题除法算术题 Input 没有输入 Output 输出8除以5,保留1位小数 Sample Output 1.6 Source 零起点学算法 1 # include <std