复选框
1、 在浏览器端,checkbox的name属性的值不论什么都会被浏览器毫无保留的提交
2、 在PHP中$_POST
/$_GET
都会对同名name属性进行覆盖
解决方案:浏览器不识别[]
(浏览器不认为有特殊性),但是PHP认为[]
有特殊性:系统自动认为该符号是数组的形式,所以PHP就会自动的将同名的但是带有[]的元素组合到一起形成一个数组
[]
里面不写数字也可以,php会自动添加下标
文件上传
实现文件上传有这几个步骤:
1、 增加文件上传的表单:浏览器请求一个服务器的HTML脚本(包含文件上传表单)
2、 用户从本地选择一个文件(点击上传框(按钮))
3、 用户点击上传:文件会通过物联网传输到服务器上
4、 服务器操作系统会将文件保存到临时目录:是以临时文件格式保存(windows下tmp)
5、 服务器脚本开始工作:判断文件有效
6、 服务器脚本将有效文件从临时目录移动到指定的目录下(完成)
原理图解:
表单的制作
必需要满足这三个条件
-
method属性:表单提交方式必须为POST
-
enctype属性:form表单属性,主要是规范表单数据的编码方式
-
上传表单:file表单
$_FILES变量详解
在PHP中,有一个预定义变量$_FILES是专门用来存储用户上传的文件的
从这里可以看到,post并没有记录上传文件的信息,文件的信息是储存在$_FILES变量里的
1)name:文件在用户(浏览器端)电脑上实际存在的名字(实际用来保留后缀)
2)tmp_name:文件上传到服务器后操作系统保存的临时路径
(实际用来给PHP后期使用)
3)type:MIME(多功能互联网邮件扩展)类型,用来在计算机中客户端识别文件类型(确定软件)
4)error:文件上传的代号,用来告知应用软件(PHP)文件接收过程中出现了什么问题(PHP后期根据代码进行文件判断)可以去手册里看看
5)size:文件大小(PHP根据实际需求来确定是否该保留)
文件的保存
上传了文件,怎么保存到服务器里?因为之前我们并没有对上传的文件进行筛选保存,所以php运行结束后就会删除这个临时文件,所以我们就要赶在他删除这个文件之前把符合条件的文件移动到我们的服务器里面
涉及到两个函数一个是is_upload_file()
参数是临时文件(.tmp)的位置
另一个函数move_uploaded_file()
第一个参数是临时文件(.tmp)的位置,第二个参数的是想移动到的位置(需要要加上文件名)
所以我们php可以这样写(路径可以写相对路径)
<?php
$file=$_FILES['img'];
if (is_uploaded_file($file['tmp_name'])){
echo("已识别到文件");
if (move_uploaded_file($file['tmp_name'],'D:\phpstudy_pro\Extensions\Apache2.4.39\htdocs\uploads/'.$file['name'])){
echo("上传成功");
}
}
多文件上传
当商品需要上传多个图片进行展示的时候:那么需要使用多文件上传
针对一个内容但是不同文件说明:同名表单
像复选框一样
同名表单:将表单名字形成一个数组,而且同时将文件对应的五个要素:name
Tmp_name、size、type、error都形成对应数量的数组,每个文件上传对应数组元素的下标都是一样的:name[0] 和type[0]是属于同一个文件
当商品需要进行多个维度图片说明的时候:需要使用多文件上传
针对是不同内容所以表单名字不一样:批量解决问题
不同名表单:每个文件都会形成一个属于自己独立的5个元素的数组
对多文件信息的遍历读取和处理
不同名多文件上传处理方式:
按照表单名字从$_FILES
中取出来就可以直接使用(明确知道表单中有多少个文件上传);如果不确定表单中有多少个文件上传,不适合挨个去取(效率不高),可以通过遍历$_FILES
数组,挨个取出来实现文件上传
同名多文件上传:想办法得到一个文件对应的五个元素数组。从$_FILES中把对应的name\tmp_name\size\error\type挨个取出来,然后存放到不同的数组中。