• 20141226--数据提交+文件上传-01


    image

    回顾

    系统函数:字符串函数和时间日期函数

    数组

    数组元素可以是任意数据类型;数组长度没有限制

    php凡是碰到变量带中括号的一定会当做数组处理

    遍历数组:for循环,foreach循环,each搭配循环,函数(key,current,next,prev,end,reset)

    二维数组:php数组元素又是数组

    数据结构:栈(FILO)和队列(FIFO)

    数组

    字符串数组函数

    字符串与数组之间的关系(转换)

    explode:爆炸,将一个字符串按照某个指定的规则(通常是特殊字符),将数组分成多个段,每一段都当做一个数组的元素,返回一个索引数组

    clip_image002

    implode:粘合,将一个数组内部的所有元素按照某个指定的规则(特殊字符),将所有的元素拼接成一个字符串

    clip_image004

    数组运算

    数组运算通常指的两种:+运算,合并运算,比较运算

    +运算

    将两个数组的元素进行数量上的增加,返回一个数组;如果数组元素的键名在第一个数组中存在,那么第二个数组的元素就会被抛弃(键名无论是索引还是关联都是一样的)

    clip_image006

    合并运算

    array_merge:合并,指的是将两个数组中的元素进行累计。如果后面的数组与前面的数组有下标(键名:关联)相同的,那么后面的元素的值会覆盖前面的;如果是索引的相同下标,会自动的修改下标叠加到前面的数组里。

    clip_image008

    比较运算

    比较两个数组元素的个数,然后依次比较数组元素的值

    == :值比较

    相等条件:数组的元素个数必须相同,数组元素的值必须在顺序上与另外一个数组元素的值相同

    === :类型比较

    全等条件:在相等条件上保证元素的类型也相同

    clip_image010

    验证码

    验证码的英文单词叫做captcha

    用数组来模拟生成验证码对应的随机字符串。

    1. 生成有所有元素的数组

    $arr = array(‘a’,’b’,’c’……)

    range:按照指定的ASCII码来生成一个序列对应的数组元素(索引数组)

    clip_image012

    2. 获取随机的多个元素

    array_rand:只能随机取出多个数组元素的下标,返回一个索引数组

    clip_image014

    遍历获取的随机下标:取出对应的值

    clip_image016

    3. 打乱随机取得的下标

    shuffle:将数组元素的顺序打乱,并且重新生成索引。

    clip_image018

    浏览器提交数据

    1. 浏览器为什么要提交数据给服务器?

    告诉服务器要做提供什么样的服务

    2. 浏览器提交数据的方式?

    URL:将数据绑定在url之后

    表单:<form>,将所有的要提交的数据放到对应的表单内部

    POST:数据采用post方式提交,post提交是将数据打包提交,不会绑定在url后面

    GET:数据采用get方式提交,浏览器将form表单中的数据自动的绑定到url后面

    3. post和get的区别

    a) 提交方式不一样,post提交看不到数据,但是get可以看到(在URL后面)

    b) 安全性不一样:post看不见,get看得见

    c) 二者传输的数据量不一样:get理论上不超过2KB,post理论上可以达到8M

    服务器接收数据

    1. php采用什么方式接收数据?

    a) $_GET:接收全部get方式提交的数据,形成的是一个数组,表单名字(name属性)作为键名,数据作为键值

    b) $_POST:接收全部post方式提交的数据,与$_GET形式一样。

    c) $_REQUEST:不管是get方式提交还是post方式提交,都能够接收,而且还能接受其他额外数据。

    $_REQUEST接收数据存在安全漏洞,原因是因为$_REQUEST = array_merge($_GET,$_POST);

    php.ini中有一个选项控制$_REQUEST的覆盖顺序:request_order

    clip_image020

    如果是在低版本中可能没有该选项,有一个variables_order,是用来控制$_REQUEST里面的变量顺序

    clip_image022

    请求处理

    get请求

    clip_image024

    post请求

    clip_image026

    任何没有name属性的表单,浏览器都不会提交给服务器

    clip_image028

    数据接收或者判断的前处理

    使用isset函数进行数据判断

    clip_image030

    复选框的使用

    checkbox通常情况下不止一个数据

    1. 制作表单

    clip_image032

    2. 接收数据

    clip_image034

    矛盾:表单中复选框通常一个类复选框名字都是同一个,数据提交之后服务器在接收数据的时候,会将所有的同名的表单进行数据的覆盖,最终只保留一个。

    解决方案:

    被同名表单元素的name属性增加中括号,浏览器会正常的当做字符串来解析和处理,但是一旦提交到服务器,php看到中括号会当做数组处理(不会覆盖,增加元素)

    1. 修改表单:给checkbox的name属性,增加中括号

    clip_image036

    2. 服务器正常接收数据;

    clip_image038

    用户信息都需要保存到数据库:数组不能传输给数据库,数组也不能够保存到数据库。

    clip_image040

    提取checkbox保存的信息,反显到对应的checkbox,显示给用户

    1. 从数据库获取:获取到是字符串,需要将字符串反转成数组:explode

    clip_image042

    2. 如何确定哪些checkbox是被选中的呢?

    in_array:判断一个值是否在数组中存在,如果存在返回true,失败返回false

    clip_image044

    文件传输流

    数据在网络间传输的形式分为两种:字符流和二进制流

    数据传输一定只能是二进制。

    字符流:数据的传输是按照有效字符串进行传输(数据本身是字符串)

    二进制流:数据本身是二进制格式

    不管是get方式还是post方式所能提交的数据,只能是字符流。浏览器默认的不能提交二进制流数据。(文件,图片都不能提交给服务器)。

  • 相关阅读:
    flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField
    flask-admin章节一:使用chartkick画报表
    flask-admin众博客概述
    python smtplib发送邮件遇到的认证问题
    python logging模块可能会令人困惑的地方
    Markdown
    SpringBoot-启动过程
    SpringBoot-目录
    AbstractQueuedSynchronizer
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/lifushan/p/5414671.html
Copyright © 2020-2023  润新知