目录 表单传值 为什么要表单传值? 表单传值的方式 GET传值 POST传值 GET和POST两种传参方式的不同: PHP接受数据的三种方式 PHP处理复选框数据 复选框表单的命名方式 复选框数据的接受形式 复选框数据的常见处理 复选框细
目录
表单传值:浏览器通过表单元素将用户的选择或者输入的数据交给后台服务器
动态网站(WEB2.0)的特点就是后台根据用户的需求定制数据,所谓的“需求”就是用户通过当前的选择或者输入的数据信息,表单就是这些数据的承载者
fORM表单
a标签
location对象的href属性
location对象的assign()方法
POST表单方式的基本设定
表单元素
这三种都是超全局(没有范围限制)预定义数组,表单元素的“name”属性的值作为数组的下面,而value属性对应的值就是数组的元素值
$_GET方式:接受GET方式提交的数据
$_POST方式:接受POST方式提交的数据
$_REQUEST方式:接受POST或者GET提交的所有数据
(1)$_REQUEST所存储的数据的内容:将GET和POST传入的数据合并存储到一个数组
(2)&_REQUEST和POST与_GET的联系:如果GET和POST中有着同名的数组元素(下标),POST会覆盖GET(PHP中数组元素下面具有唯一性),这个可以在PHP.ini只进行配置
';var_dump($_GET);// GET方式提交的数据echo '
';var_dump($_POST);// POST方式提交的数据echo '
';var_dump($_REQUEST); // 两种方式提交的数据?>
可以尝试在URL出直接传值:
证明在REQUEST中POST会覆盖GET:
在浏览器中运行结果:
复选框:通常将一类内容相同(同名)的形式传递给后台,数据库存储通常是一个字段存储。
在浏览器端,checkboc的name属性的值不伦什么都会被浏览器毫无保留的提交
在PHP中����/POST/_GET都会对同名name属性进行覆盖
解决方案:浏览器不识别[](浏览器不认为有特殊性),但是PHP认为[]有特殊性;系统自动认为该符号是数组的形式,所以PHP就会自动的但是带有[]的元素组合到一起形成一个数组
PHP会自动组合同名元素的为数组
html代码:
php接收代码:
';print_r($_POST);?>
单选按钮的数据处理
可以出现多个选择项,但是只能选择其中一个
男 女
PHP拿到数据以后,组织sql直接存储到数据表即可;
多选按钮数据处理
PHP需要将数组转换为指定格式的字符串:使用分隔符每一个元素并且形成字符串:
implode(‘分隔符’,‘字符串’)
';$hobby=$_POST['hobby'];// print_r($hobby);// 数组转换为有格式的字符串$hobby_string=implode($hobby,'|');echo $hobby_string;?>
PHP组织SQL直接存储到数据库
取出来复选框数据显示:
(1)、如果是反过来操作,那么取出数据之后使用explode把字符串变成数组
explode(‘分隔符’,‘字符串’)
';$hobby=$_POST['hobby'];$hobby_string=implode($hobby,'|'); var_dump(explode('|',$hobby_string));?>
(2)在HTML显示当中,通过判断复选框元素是否在数组中存在,来选定复选框checkbox是否有checked="checked"属性
in_array()
(3)其他常规的同名表单项的处理
除了radio button 和checkbox付窜狂,很少会出现同名的复选框,如果非要使用同名的来进行管理,那么可以采用checkboc方式进行操作
如果复选框没有选中,那么浏览器就不会提交,因此在PHP接收使用复选框(单选框)数据的时候,应该先判断是否存在该数据
文件上传:文件从用户本地电脑通过传输方式(Web表单)保存到服务器所在电脑指定的目录下
增加文件上传表单:浏览器请求一个服务器HTML脚本(包含文件上传表单)
用户从本地选择一个文件(点击上传框/按钮)
用户点击上传:文件会通过互联网传输到服务器上、
服务器操作系统会将文件保存到临时目录:是以临时文件格式保存的(windows下是temp)
服务器脚本开始工作:判断文件有效
服务器脚本会将有效文件从临时目录移动到指定目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgTOCIN6-1688114838130)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230630132059443.png)]
(1)method属性:表单提交方式必须为POST
(2)enctypr属性:form表单属性,主要规范表单数据的编码方式
尝试制作一个form上传表单:
在PP中,有一个预定义变量$_FILE文件用于存放用户上传的文件
';var_dump($_POST);var_dump($_FILES);?>
name:文件在用户(浏览器)电脑上实际存在的名字(实际用来保存后缀)
tmp_name:文件上传到服务器后操作系统保存的临时路径(实际用来给PHP后期使用)
type_MIME(多功能互联网邮件扩展)类型:用来在计算机中客户端识别文件类型(确定软件)
error:文件上传的代号,用来告知应用软件文件上传处于什么状态(PHP后期根据代码进行文件判断)
size:文件上传的数据大小(后期PHP根据实际需求确定是否该保留)
文件上传之后会保存到������中,那么访问文件信息的形式就是FIILES中,那么访问文件信息的形式就是_FILRS[表单 name 属性值][元素信息]
(1)判断是否为上传文件:is_upload_file()
(2)移动文件:move_upload_file()
当商品需要上传多个图片进行展示的时候,那么需要使用多文件上传
针对一个内容但是不同文件说明:同名表单
当商品需要进行多个维度图片说明的时候,需要使用多文件上传
针对是不同内容所以表单名不一样:批量解决问题
多文件上传的$_FILES变量的数据结构形式
批量上传:同名表单:将表单名字形成一个数组,而且同时将文件对应的五个要素:name tmp_name size type error都形成对应数量的数组,每个文件上传对应数组元素的下标都是一样的:name[0]和type[0]是属于一个文件的属性
批量上传:不同命表单:每个文件都会形成一个属于自己独立的5个元素的数组
![在这里插入图片描述](https://img-blog.csdnimg.cn/6b8f257ba1f4445085a0857de06114ac.png)#### 对多文件上传信息的遍历读取和处理1、不同名多文件上传处理方式:按照表单名字从$_FILES中取出来就可以直接使用(明确知道表单中有多少文件上传);如果不确定表单中有多少个文件上传,不适合挨个去取(效率低),可以通过遍历$FILES数组,挨个取出实现文件上传```php';// 不同命文件遍历处理方式foreach($_FILES as $file){ // $file就是一个完整的上传文件信息;找到临时路径,指定存放路径 if(is_uploaded_file($file['tmp_name'])) { move_uploaded_file($file['tmp_name'],'upload/' . $file['name']); }}?>
同名多文件上传:想办法得到一个文件对应的五个元素数组。从$_FILES中把对应的name tmp_name size error type 挨个取出来,然后存放到不同的数组中
';// 同名文件遍历处理方式if(isset($_FILES['image']['name']) && is_array($_FILES['image']['name'])){ // 遍历构造数组元素 $images=array(); foreach($_FILES['image']['name'] as $k => $file) { $images[]=array( 'name'=>$file , 'tmp_name'=>$_FILES['image']['type'][$k] , 'type'=> $_FILES['image']['tmp_name'][$k], 'error' => $_FILES['image']['error'][$k], 'size' => $_FILES['image']['size'][$k], ); }}print_r($images);?>
实现上传功能代码的重复利用:封装文件上传函数
功能:上传文件
条件:条件判断
文件类型是否合适?外部指定MIME类型
文件存储到什么位置?外部指定
文件格式限制(文件后缀)?外部指定
文件大小限制?
结果:实现文件上传
成功:结果能够在以后看到:需要将文件的路径和文件名字返回(存储到数据库)
失败:返回false,指定错误原因(引用参数)
(1)封装出一个上传函数
(2)判断文件是否有效
//判断文件是否有效if(is_array($file) || !isset($file['error'])){ //文件无效 $error='这不是一个有效的文件' return false;}
(3)判断文件存储路径是否有效
if(!is_dir($path)){ // 路径不存在 $error='文件路径不存在'; return false;}
(4)判断文件本身上传的过程中是否有错误
switch ($file['error']){} case 1: case 2: $error='文件超出服务器允许大小'; return false; case 3: $error='文件上传过程中出现了问题,只上传了一部分'; case 4: $error ='用户没有选中要上传的文件'; return false; case 6: case 7 : $error ='文件保存失败'; return false;}
(5)文件类型的处理
// 判断MIME类型if(in_array($file['type'],$allow_type)){ $error='当前文件类型不允许上传'; return false;}
(6)文件格式的处理
// 判断后缀是否允许// 取出后缀$ext = ltrim(strrchr($file['name'],'.'),'.');if(!empty($allow_format)&&!in_array($ext,$allow_format)){ //不允许 $error='当前文件的格式不允许上传';}
(7)文件大小的处理
// 判断当前文件大小是否满足当前需求if($file['size']> $max_size){ $error='当前上传的文件超出大小,最大允许大小为' . $max_size .'字节'; return false;}
(8)移动到指定目录
//移动到指定目录//构造文件名字if(is_uploaded_file($file['tmp_name'])){ $error='错误,不是上传文件'; return false;}if(move_uploaded_file($file['tmp_name'],$path . '/' . 文件名字)){ return 文件名字;}else{ $error='文件上传失败';}
(8)重名的处理:上传同名文件?中文名字怎么修改为正确格式?
//构造文件名字:类型:年月日+随机字符串.$ext$fullname=strstr($file('type','/',TRUE)) . date('Ymd');//产生随机字符for($i=0;$i<4;$i++){ $fullname .= chr(mt_rand(65,90));}// 拼凑后缀$fullname .+ '.' . $ext; if(is_uploaded_file($file['tmp_name'])){ $error='错误,不是上传文件'; return false;}if(move_uploaded_file($file['tmp_name'],$path . '/' . $fullname)){ return $fullname;}else{ $error='文件上传失败';}
(9)提供数据
// 提供数据$file=$_FILES['image'];$path='uploads';$allow_type=array('image/jpg','image/gif');$allow_format=array('jpg','gif','jpeg');$max_size='8000000';if($filename=upload_single($file,$allow_type,$path,$allow_format,$max_size)){echo $filename;}else { echo $error;}?>
来源地址:https://blog.csdn.net/qq_68163788/article/details/131480201
--结束END--
本文标题: PHP表单传值和文件上传:深入解析数据交互与文件处理技术
本文链接: https://www.lsjlt.com/news/390438.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0