今天在工做中遇到了一个需求:一个表单实现多个上传图片,相似于QQ空间上传照片的模式。即:能够一次性上传多个图片,可是封面图片只有一个。php
最早,最重要的事,在服务器上对文件进行读写操做的时候,必定要看权限,若是没有权限,全是虾扯蛋,为何这样说,由于全是泪。html
首先,前端页面:index.html前端
<html>
<head><title>多个文件上传表单</title></head>
<body>
<style>
form{
margin: 20px;
padding: 10px;
}
#picInput>input{
display: block;
margin: 10px;
}
</style>
<form action="pic.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<div id="picInput">
上传图片:<input type="file" name='myfile[]'>
</div>
<input id="addBtn" type="button" onclick="addPic1()" value="继续添加图片"><br/><br/>
<input type="submit" value="上传文件">
</form>
<script>
function addPic1(){
var addBtn = document.getElementById('addBtn');
var input = document.createElement("input");
input.type = 'file';
input.name = 'myfile[]';
var picInut = document.getElementById('picInput');
picInut.appendChild(input);
if(picInut.children.length == 3){
addBtn.disabled = 'disabled';
}
}
</script>
</body>
</html>mysql
知识点:sql
1.经过JS动态添加input结点和设置属性,当大于3个上传图片的时候就再也不给予上传图片的机会了。数据库
2.这里最主要的是input输入框的name值,经过动态的添加数组元素,将全部上传的图片动态添加到数组当中。后端
后端处理功能数组
Connection.php服务器
1.读取和存储都须要用到链接数据库,因此能够把它封住一下,养成良好的习惯app
<?php
//建立对象并打开链接,最后一个参数是选择的数据库名称
$mysqli = new mysqli('localhost','root','','test');
//检查链接是否成功
if (mysqli_connect_errno()){
//注意mysqli_connect_error()新特性
die('Unable to connect!'). mysqli_connect_error();
}
pic.php处理功能
<?php
require_once 'connection.php';
$file = $_FILES['myfile']; //获得传输的数据,以数组的形式
$name = $file['name']; //获得文件名称,以数组的形式
$upload_path = "zhouqi666.cn/test/images/"; //上传文件的存放路径
//当前位置
foreach ($name as $k=>$names){
$type = strtolower(substr($names,strrpos($names,'.')+1));//获得文件类型,而且都转化成小写
$allow_type = array('jpg','jpeg','gif','png'); //定义容许上传的类型
//把非法格式的图片去除
if (!in_array($type,$allow_type)){
unset($name[$k]);
}
}
$str = '';
foreach ($name as $k=>$item){
$type = strtolower(substr($item,strrpos($item,'.')+1));//获得文件类型,而且都转化成小写
if (move_uploaded_file($file['tmp_name'][$k],$upload_path.time().$name[$k])){
//$str .= ','.$upload_path.time().$name[$k];
echo 'success';
}else{
echo 'failed';
}
}
//向指定id插入图片地址(虽然是插入,可是是更新字段,不要迷糊了)
$uid = 1;
$str = substr($str,1);
$sql = "UPDATE upload set pic = '".$str."' WHERE id = ".$uid;
$result = $mysqli->query($sql);
这里我有不少的判断没有写,主要是实现一下功能,好比文件夹要先创建好,你也能够本身判断,不存在就建立一个文件夹,还有一些其余判断等等。
最关键的地方是,当你不熟悉的时候,要走一步调试一步,看获得的结果是什么。
图片现实功能
<?php
require_once 'connection.php';
$uid = 1;
$sql = "SELECT pic FROM upload WHERE id =".$uid;
$result = $mysqli->query($sql);
//取出第一个图片的地址
$picpath = '';
while ($row = $result->fetch_array()){
$picpath = $row[0];
}
$picpath = explode(',',$picpath)[0];
echo "<img src='".$picpath."'>";
?>