shop34-19-商品添加

功能添加商品表单

Index.php?p=back&c=Goods&a=add

Controller-Action:

新建商品控制器类

Application/back/controller/GoodsController.class.php

addAction():

Model:

View-template

增加视图层模板:

Application/back/view/goods_add.html

需要相应的js:

留下部分选项卡,及表单元素:

补充

修改菜单的menu.html模板,请求添加动作:

Back/view/menu.html

功能:处理商品添加数据

Index.php?p=back&c=Goods&a=insert

控制器-动作

Back/GoodsController->insertAction();

Checkbox在提交时:

如果选中:则其值为value属性的值。

如果未选中:则表单不会提交其数据(_POST中没有该元素)

推荐:

采用数组方式命名,并且值就是需要插入到表中的数据:

处理:

实现insertAction();

模型

为goods表建立操作模型:

Application/back/model/GoodsModel.class.php

格式化字符串:

Sprintf()可以完成对字符串的格式化:

Sprintf(格式,格式中需要的数据)

Tip:数据参与SQL的执行,一定要防止SQL注入,使用转义!

此时在模型层面,提供可以对数组内的所有数据,进行批量转义功能:

基础模型增加方法:

escapeStringAll();

需要时调用该方法:

Back/GoodsModel->insertGoods()

视图-模板

补充

商品列表

shop34-20-表前缀的处理

模型-前缀处理

真实表名 = 前缀(项目) + 逻辑表名(功能)

前缀:通过配置文件配置。

Config/application.config.php

逻辑表名:模型类自身来确定。

模型类中增加属性:_logic_table

拼凑真实表名:

基础模型中,增加初始化真实表名的操作:

表名使用反引号包裹!

实例化模型对象时,完成对真实表名的初始化工作:

基础模型的构造方法中:

使用真实表名:

在模型中,拼凑SQL语句时,使用$this->_table:

shop34-21-文件上传工具

文件上传

上传:

从浏览器端传输的到服务器端。

请求时:

数据从浏览器端传输到服务器端。

可见:

上传,发生在浏览器向服务器发出请求过程中。

文件,对于浏览器来讲,就是表单中的一个特殊类型的数据而已。

浏览器表单中的数据:两种类型。

1, 字符串类型。(字节流编码)

2, 文件类型。(二进制编码)

(tip:文件就是表单中数据的一部分)。

提交表单时,浏览器自动将表单内的数据,传输到服务器端,文件型也会包含在内。

服务器角度:

在接受浏览器的请求时,处理好表单内数据。

根据数据类型不同(2种),采用不同的处理方法:

1, 字符串类型,存储在$_POST变量中(内存中)

2, 文件型数据,存储到上传临时目录中。

表单提交时:浏览器会默认的认为,表单内的数据都是字符串类型(即使使用file文件域),通过在form上,增加属性,告知浏览器表单内的数据类型不仅仅有字符串。

Form enctype=”multipart/form-data”

PHP服务器在接受到文件型的表单数据后:

将文件,存储于上传临时目录。就是临时文件,有效期脚本周期内有效。

通过PHP的php.ini配置:

默认为服务器操作系统临时目录。

需要,将临时上传文件持久化存储!(将其移动到指定位置)

函数:

Move_uploaded_file(上传临时地址,目标地址);

完成

需要使用$_FILES数组,存储了上传的临时文件的信息,包括临时地址!

每个上传的临时文件,有5个信息,name:原始文件名,type:类型,tmp_name,临时地址,error:是否有错误及错误类型,size:大小。

典型的上传代码

通过对文件的属性信息的判断,决定文件是否可用!

类型:表示方式 2种:

后缀名:文件系统中,标识文件的方案。

MIME(多用途internet邮件扩展):网络上传输资源时,使用的资源类型表示方法。

Text/html; image/png

后缀名截取:

$file = 'x.y.z.png';

echo strrchr($file, '.');

// 找到字符串中某个子字符串的最后出现位置,从该位置截取到字符串末尾。

Array_merge()数组合并

array_unique()去掉数组中重复的元素值

重命名文件:

使用原名。(重名,特殊字符, 不具备逻辑含义)

起名:uniqID();

UniqID()可以生成一个唯一的字符串,并且允许设置前缀。

类型检测:

后缀和MIME

以上两个值,都是由浏览器端请求提供的。

需要服务器PHP自身完成MIME的检测:

需要 PHP的扩展: fileinfo 完成对文件的信息的检测。

提供面向对象和函数两套语法:

使用面向对象语法吧:

开启该扩展:

Apache restart

分子目录存储上传文件

原则:业务逻辑。文件数量。按照时间。

Mkdir(目录地址)创建目录

Is_dir(目录地址)检测目录

Date()获得日期时间

项目中使用

上传的工具类:

完成自动加载:

添加商品时使用:

Back/GoodsController->insertAction();

模型中,处理goods_image_ori:

Back/GoodsModel->insertGoods();

修改表单,使之可以上传文件,并设置file表单元素,起名字。

Back/iew/goods_add.html

php_mvc实现步骤十的更多相关文章

  1. php_mvc实现步骤九(登录验证码,退出-登录标记)

    shop34-17-登录验证码 验证码的分析 登录:防止暴力破解 论坛:防止灌水水 展示类:被抓取. 需要技术: 图片处理技术. 会话session技术. PHP图片处理技术 – GD 具体操作步骤 ...

  2. php_mvc实现步骤八

    shop34-10-框架类 框架类(框架初始化类) 将原来入口文件中功能,放在该类中完成,入口文件变得简单,轻量! 将入口文件中的各个功能,由框架类的各个方法,完成: 为了简单化,使用纯静态的类.(看 ...

  3. php_mvc实现步骤七

    shop34-5-登录表单 登录功能分析 功能:登录表单 C控制器-动作 back后台admin控制器loginAction动作完成该功能. Application/back/controller/A ...

  4. php_mvc实现步骤六

    shop34-1-目录布局 存在项目的根目录 shop34 框架代码与应用程序代码划分 框架代码: 在各个应用程序间可以通用的代码. 应用程序代码: 当前项目的业务逻辑实现的代码. 分别创建两个子目录 ...

  5. php_mvc实现步骤五

    5.match_controller 控制器层典型实现 控制器类 依据功能的相关性,将一系列相关的功能,使用一个控制器类来处理,而该控制器的每个方法,就对因某个功能. 注意:控制器是按照功能划分的.( ...

  6. php_mvc实现步骤三,四

    3.match_mvc MVC 以ecshop的前台为例: 功能一: 首页 购物车数据,商品分类数据,其他的首页需要的数据 功能二: 拍卖活动 购物车数据,商品分类数据,拍卖相关数据 功能三: 团购商 ...

  7. php_MVC实现步骤二

    2.match_split 显示逻辑相分离 将功能强制分成两个部分,显示html文件,和逻辑PHP文件: 要求浏览器请求负责功能的PHP逻辑文件: 该PHP逻辑文件,对需要的显示内容进行载入. 逻辑P ...

  8. php_MVC实现步骤一

    1.Match 基本实现 功能,比赛列表,球队信息 数据表初始化: 比赛列表: 球队一 比分 球队二 比赛时间 韩国 1:2 澳大利亚 15-01-31 17:00 从SQL思考,如何完成上面的查询: ...

  9. 转载:CentOS7下部署Django项目详细操作步骤

    部署是基于:centos7+nginx+uwsgi+python3+django 之上做的 文章转自:Django中文网        https://www.django.cn/article/sh ...

随机推荐

  1. 内核用户模式调试支持(Dbgk)

    简介 将详细分析Windows调试的内核模式接口.希望读者对C和通用NT内核体系结构和语义有一些基本的了解.此外,这并不是介绍什么是调试或如何编写调试器.它可以作为经验丰富的调试器编写人员或好奇的安全 ...

  2. MQTT 遗嘱使用

    大部分人应该有这个需求: 我想让我的APP或者上位机或者网页一登录的时候获取设备的状态   在线还是离线 设备端只需要这样设置 注意:MQTT本身有遗嘱设置 所以大家可以设置遗嘱 ,注意哈,发布的主题 ...

  3. 石子合并(NOI1995)题解

    题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

  4. 【CPLEX教程03】java调用cplex求解一个TSP问题模型

    00 前言 前面我们已经搭建好cplex的java环境了,相信大家已经跃跃欲试,想动手写几个模型了.今天就来拿一个TSP的问题模型来给大家演示一下吧~ CPLEX系列教程可以关注我们的公众号哦!获取更 ...

  5. python 图片格式转换png转jpg,如何利用python给图片添加半透明水印

    from PIL import Imageim = Image.open(r'd:\test2.png')r, g, b, a = im.split()im = Image.merge("R ...

  6. Linux Shell 之 对文件中的行、单词、字符进行迭代

    在进行文本文件进行处理时,对文件件中的行.单词.字符进行迭代和遍历是非常常用的操作.而将一个简单的循环用于迭代,再加上来自stdin或文件的重定向,这就是对文件中的行.单词.和字符进行迭代的基本方法. ...

  7. win10回收站右键有2个“CCleaner”怎么删除

      win10回收站右键有2个"CCleaner"怎么删除? win10系统安装最新的CCleaner后遇到了这样子的问题:右击回收站有两个关于CCleaner的乱码,卸载CCle ...

  8. 通过OpenSSL来生成PEM格式的私钥、PKCS8格式的私钥、公钥|pfx格式的私钥、cer格式的公钥

    1.生成PEM格式RSA私钥 不对输出的文件内容进行加密 openssl genrsa -out private-rsa.key 对输出的文件内容进行加密(DES/AES128/AES256等) op ...

  9. nodejs接收前端formData数据

    转:https://www.cnblogs.com/zhensg123/p/11078579.html 很多时候需要利用formdata数据格式进行前后端交互. 前端代码可以是如下所示: <!D ...

  10. centos7 docker swarm加入集群失败

    提示的错误为 [root@localhost downloads]# docker swarm join --token SWMTKN-1-2ezr0k5ybds1la4vgi2z7j8ykxkmm0 ...