实例说明
上传图片到服务器,是程序开发过程中必不可少的一个功能,它不但可以达到图片共享的目的,而且可以提高网站的访问量,丰富网站的内容,在本实例中,讲解如何通过POST方式实现多图片上传.
关键技术
多文件上传的关键是如何定义上传文件元素的名称及如何判断上传文件的数量,在本实例中,以数组的形式定义上传文件的名称,上传文件的名称是“files[]”,为了达到可以上传任意数量图片,4个图片以内的目的,在对上传文件进行处理的过程中应用array_filter()函数和回调函数去除数组中的空元素.
array_filter()函数,用回调函数过滤数组中的单元,语法如下:
array array_filter(array input[,callback callback])
array_filter()函数依次将input数组中的每个值传递到callback函数,如果callback函数返回TRUE,则input数组的当前值会被包含在返回的结果数组中,并且数组的键名保留不变.
说明:在回调函数中不要对数组进行修改操作,例如,增加或者删除数组中的元素,如果一旦数组改变,那么此函数的运用也就没有意义了,如果没有提供callback()函数,array_filter()将删除input中本实例中定义的回调函数是check(),用于验证数组中的元素值是否为空,其语法如下:
- function check($var){
- return($var!="");
- }
说明:通过POST方法实现多图片上传,在创建form表单时,必须指定enctype="multipart/form-data"属性,如果要通过隐藏域MAX_FILE_SIZE的值对上传文件的大小进行控制,那么必须将隐藏放置在上传文件的文件域之前,否则是不会起作用的.
设计过程
(1)创建index.php文件,添加表单,设置文件域、提交按钮,使用POST方法,设置enctype="multipart/form-data",将数据提交到index_ok.php页,完成多个文件的上传操作,其关键代码如下:
- <table width="750"border="0"cellspacing="0"cellpadding="0">
- <form action="index_ok.html"method="post"enctype="multipart/form-data"name="form1">
- <tr>
- <td width="100"height="25"align="right"class="STYLE1">内容1:</td>
- <td width="150"align="center"><input name="files[]"type="text"id="files[]"size="15"></td>
- <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>
- </tr>
- <tr>
- <td height="25"align="right"class="STYLE1">内容2:</td>
- <td width="center"><input name="files[]"type="text"id="files[]"size="15"></td>
- <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>
- </tr>
- <tr>
- <td colspan="3"align="center">
- <input type="image"name="imageField"src="images/bg_09.jpg">
- <input type="image"name="imgeField2"src="images/bg_11.jpg"></td>
- </tr>
- </form>
- </table>
(2)在index.php文件中,连接数据库,读取数据库中存储的数据,实现上传文件的分页输出,代码请参考相关内容.
(3)创建index.php文件获取表单中提交的数据,将多个文件存储到服务器中,将文件的名称和存储路径存储到数据库中,其代码如下:
- <?php
- header("Content-type:text/html;charset=UTF-8");
- include"conn/conn.php";
- if($_POST[files]!=""){
- if(! is_dir("./upfile")){
- mkdir("./upfile");
- }
- $data=date("Y-m-d H:m:s");
- function check($var){
- return($var!="");
- }
- $files=array_filter($_POST["files"],"check");
- $array=array_filter($_FILES["picture"]["name"],"check");
- foreach=($aarray as $key=>value){
- $path='upfile/'.time().$key.strtolower(strstr($value,"."));
- move_uploaded_file($_FILES["picture"]["tmp_name"][$key],$path);
- $query="insert into tb_up_file(file_test,data,file_name)values('$path','$data''$files[$key]')";
- $result=mysql_query($query);
- }
- echo"<script>
- alert('图片上传成功');window.location.href='index.html';</script>";
- }
- ?>
|