這幾天整理作過的php項目,感受這個常常會用到,傳上來共享一下咯
首先,前端界面
一、表單的首行須要加上enctype="multipart/form-data",須要上傳的圖片必須設置 type="file"表示選擇文件javascript
<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>
二、爲表單添加事件,我用的是ajax
由於圖片在是二進制傳輸,因此須要用new FormData(this)獲取表單非文本類的數據(注包括文本類),純文本類數據可用$(this).serialize();php
$('#form1').submit(function (e) { e.preventDefault(); var data=new FormData(this);//獲取非文本類的數據 $.ajax({ url:"php/add.php",//處理頁面的路徑 data:data,//經過json格式將一組數據傳過去 type:"post",//數據的提交和傳遞方式,最好用POST dataType:"json",//頁面返回值的類型,共有三種:TEXT,JSON,XML可選 cache:false, contentType:false, processData:false, success:function(res){//回調函數:若是ajax調用成功,就執行這個success後面的函數,(data)當作參數返回過來 if (res.flag===1){ alert('上傳成功!'); } else if(res.flag===2){ alert('網絡或其餘未知錯誤,請重試!') }else{ alert('圖片格式錯誤,請重試!') } }, error: function () { alert("error") } }); });
三、編寫php文件
connect.php
數據庫鏈接文件前端
<?php $link=new PDO("mysql:host=localhost;port=3306;dbname=db","root",""); $link->query("set names utf8");
add.phpjava
$_FILES['image']['name']:'image'爲前端圖片定義的name,後面的'name'不可變 mysql
file_exists():檢查圖片是否存在文件夾,存在返回ture,不然false
-upload:是我圖片上傳目標文件ajax
<?php extract($_POST); $date = date('Y-m-d'); $file_name = $_FILES['image']['name'];//獲取緩存區圖片,格式不能變 $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');//鏈接數據庫 $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)//獲取一串隨機數字,用於作上傳到數據庫中文件的名字 { $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);