forget and forget

能吃能睡是福;能忘是大福......

posts - 39, comments - 26, trackbacks - 0, articles - 10
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

php上传多个文件

Posted on 2006-06-08 22:31 橘子 阅读(2558) 评论(1)  编辑  收藏 所属分类: WEB开发

前面提到了上传单个文件的方法,上传多个文件的思想类似
1、在表单页面动态生成多个文件提交框,这里注意一下,多个文件提交框的名字要设置为数组,否则只有一个文件会上传。
此时在$_FILES数组构造方式是这样:$_FILES["files"][xxxxfileProperty][xxxcount]; 比如说我要知道第一个文件的error值:$_FILES["userfiles"]["error"][0] ,第一个文件客户端名字:$_FILES["userfiles"]["name"][0]等等。
2、接收端接收,操作和单个的是一样,只是需要做个循环,有多少个文件做多少次循环,以便所有的文件都能正确发送。
示例代码:
表单页面
<form enctype="multipart/form-data" action="post.php" method="post">
&nbsp;&nbsp;文章标题:&nbsp;&nbsp;<input name="title" type="text"/>&nbsp;标题不能为空!
<br />&nbsp;&nbsp;淘吧名字:&nbsp;&nbsp;<input name="bar_name" type="text"/>
<?php
echo "请选择一个!\t(";
for ($i=0; $i<count($name); $i++ ){
 echo mb_convert_encoding($name[$i]["name"],"UTF-8","GB2312");
 echo "  ";
}
echo ")";
?>
<br />
<textarea name="text" cols="90" rows="20"></textarea>
<?php
for ($i=0;$i<3;$i++){
 echo "<input name=\"userfile[]\" type=\"file\"/>";
}
echo "<input name=\"i\" type=\"hidden\" value=\"$i\" />";
?>
</td></tr>
</table>
<table align="center" cellpadding="0" cellspacing="0"><tr><td>
<input name="submit" type="submit" value="确定提交"/>&nbsp;&nbsp;
<input name="reset" type="reset" value="重新来过"/>
</form>
处理页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>提交</title>
</head>

<body>
<?php
$title=$_POST["title"];
$text=$_POST["text"];
$name=$_POST["name"];
$count=$_POST["i"];
include_once("数据库连接文件");
if (empty($title)||empty($text)||empty($bar_name)){
 echo "标题或内容不能空
 die("<br /><a href=\"index.php\">重新来过</a>");
}

/*这里是数据查询语言取出要用的数据*/

if(in_array("0", $_FILES['userfile']['error'])){//上传文件开始
 $uploaddir= 'attfile/';//设置上传的文件夹地址
 $FILES_EXT=array('.gif','.jpg','.mp3','.3gp');//设置允许上传文件的类型
 $MAX_SIZE = 20000000;//设置文件上传限制20000000byte=2M
 for ($i=0;$i<$count;$i++){
  $FILES_NAME=$_FILES['userfile']['name'][$i];//客户端文件名
  //取出文件后缀名,strrpos()从标记开始前字节个数(不算标记),substr()显示从第strrpos()之后的字符
  $file_ext=substr($FILES_NAME,strrpos($FILES_NAME,"."));
  //检查文件大小
  if($_FILES['userfile']['size'][$i]>$MAX_SIZE){
   echo "文件大小超程序允许范围!";
   exit;
  }
  //检查文件类型
  if(in_array($file_ext, $FILES_EXT)){
   $_FILES['userfile']['name'][$i]=date("YmdHis").rand(10000,1000000).$file_ext;
   //echo $_FILES['userfile']['name'][$i];
   $uploadfile = $uploaddir.$_FILES['userfile']['name'][$i];//上传后文件的路径及文件名
   //echo $uploadfile;
   //用move函数生成临时文件名,并按照 $_FILES['userfile']['name']上传到$uploaddir下
   if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $uploadfile)) {
    //将上传后的路径写入到数据库中
    $post_id=(int)$post_id;
    $uploadfile="attfile/".$_FILES['userfile']['name'][$i];
    $sql=插入语句
    $stmt=$db->prepare($sql);
    $stmt->execute();
    print "<br />文件\n{$FILES_NAME}\n上传成功!";
   } else {
    print "上传错误!  以下是上传的信息:\n";
    print_r($_FILES);
   }
  }
  else{
   echo "{$FILES_NAME}\n不是允许上传的文件类型!";
   exit;
  }
 }
}

?>
</body>
</html>


评论

# re: php上传多个文件  回复  更多评论   

2009-06-01 17:58 by 小吴~!
专家好啊~!
看了您写的这边代码,首先太兴奋了!不但能上传,其他信息也都被保存到了数据库下。但有一个问题,就是我的怎么同时插入三条记录到数据库啊!就是一张图片一条记录,三张就是三条记录,其他的信息都一样的,标题、内容等等。
能不能修改成用三个字段来分别保存三张图片的路径和地址,这样只是一条记录的啊?真的好期待专家帮我解决,我的email:wuzhongru@yahoo.cn QQ:89587096 期待~~~~~~~~佳音!在此感谢啊!

只有注册用户登录后才能发表评论。


网站导航: