zoukankan      html  css  js  c++  java
  • php_mvc实现步骤十

    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服务器在接受到文件型的表单数据后:

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

    通过PHPphp.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

  • 相关阅读:
    关于metaclass,我原以为我是懂的
    有趣的版本号
    关于乱序(shuffle)与随机采样(sample)的一点探究
    我在博客园的这一年
    我的进程去哪儿了,谁杀了我的进程
    Elasticsearch学习系列之term和match查询
    数据库垂直拆分 水平拆分
    分布式锁的几种实现原理
    Redis常见面题
    github建仓库注意
  • 原文地址:https://www.cnblogs.com/ybygb-geng/p/10001528.html
Copyright © 2011-2022 走看看