這幾天整理做過的php項目,感覺這個經(jīng)常會用到凹炸,傳上來共享一下咯
首先戏阅,前端界面
1、表單的首行需要加上enctype="multipart/form-data"啤它,需要上傳的圖片必須設置 type="file"表示選擇文件
<form id="img_form" method="post" class="form-horizontal" role="form" enctype="multipart/form-data">
<label class="col-sm-3 control-label" for="image">圖片:</label>
<div class="col-sm-9 require">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">//文件最大尺寸
<input type="file" class="form-control" name="image" id="image">
</div>
</div>
</form>
2奕筐、為表單添加事件,我用的是ajax
因為圖片在是二進制傳輸变骡,所以需要用new FormData(this)獲取表單非文本類的數(shù)據(jù)(注包括文本類)离赫,純文本類數(shù)據(jù)可用$(this).serialize();
$('#form1').submit(function (e) {
e.preventDefault();
var data=new FormData(this);//獲取非文本類的數(shù)據(jù)
$.ajax({
url:"php/add.php",//處理頁面的路徑
data:data,//通過json格式將一組數(shù)據(jù)傳過去
type:"post",//數(shù)據(jù)的提交和傳遞方式塌碌,最好用POST
dataType:"json",//頁面返回值的類型渊胸,共有三種:TEXT,JSON,XML可選
cache:false,
contentType:false,
processData:false,
success:function(res){//回調(diào)函數(shù):如果ajax調(diào)用成功,就執(zhí)行這個success后面的函數(shù)台妆,(data)當做參數(shù)返回過來
if (res.flag===1){
alert('上傳成功蹬刷!');
} else if(res.flag===2){
alert('網(wǎng)絡或其他未知錯誤瓢捉,請重試!')
}else{
alert('圖片格式錯誤办成,請重試泡态!')
}
},
error: function () {
alert("error")
}
});
});
3、編寫php文件
connect.php
數(shù)據(jù)庫連接文件
<?php
$link=new PDO("mysql:host=localhost;port=3306;dbname=db","root","");
$link->query("set names utf8");
add.php
extract($_POST):批量獲取前端post方式傳過來的數(shù)據(jù)迂卢,使用參數(shù)時參數(shù)名為前端傳過來的初始名某弦。
in_array(search,array,type):搜索數(shù)組中是否存在指定的值,即元素是否存在與數(shù)組而克,返回true或false靶壮。
search,必需员萍,規(guī)定要在數(shù)組搜索的值腾降。array,必需碎绎,規(guī)定要搜索的數(shù)組螃壤。type,可選筋帖,如果設置該參數(shù)為 true奸晴,則檢查搜索的數(shù)據(jù)與數(shù)組的值的類型是否相同。count():獲取數(shù)組元素個數(shù)
-
$_FILES['image']['name']:'image'為前端圖片定義的name日麸,后面的'name'不可變
file_exists():檢查圖片是否存在文件夾寄啼,存在返回ture,否則false
-upload:是我圖片上傳目標文件
<?php
extract($_POST);
$date = date('Y-m-d');
$file_name = $_FILES['image']['name'];//獲取緩存區(qū)圖片,格式不能變
$type = array("jpg", "gif", 'png', 'bmp');//允許選擇的圖片類型
$ext = explode(".", $file_name);//拆分獲取圖片名
$ext = $ext[count($ext) - 1];//取圖片的后綴名
if (in_array($ext,$type)){
do{
$new_name = get_file_name(6).'.'.$ext;
$path='upload/'.$new_name;//upload為目標文件夾
}while (file_exists("../" . $path));//檢查圖片是否存在文件夾,存在返回ture,否則false
$temp_file=$_FILES['image']['tmp_name'];//獲取服務器里圖片
include_once ('connect.php');//連接數(shù)據(jù)庫
$result = $link->exec("INSERT INTO `news`(`title`,`author`, `content`, `src`,`time`) VALUES ('$title','$author','$content','$path','$date')");
if ($result){
move_uploaded_file($temp_file,"../" .$path);//移動臨時文件到目標路徑
$arr['flag']=1;
$arr['detail']=[$title,$author,$content,$path];
}else{
$arr['flag']=2;
}
}else{
$arr['flag']=3;
}
function get_file_name($len)//獲取一串隨機數(shù)字代箭,用于做上傳到數(shù)據(jù)庫中文件的名字
{
$new_file_name = 'A_';
$chars = "1234567890qwertyuiopasdfghjklzxcvbnm";//隨機生成圖片名
for ($i = 0; $i < $len; $i++) {
$new_file_name .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $new_file_name;
}
echo json_encode($arr);