台灣最大程式設計社群網站
線上人數
627
 
會員總數:244808
討論主題:188842
歡迎您免費加入會員
討論區列表 >> PHP >> 多張圖片(檔案)上傳 該如何寫入資料庫呢
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
多張圖片(檔案)上傳 該如何寫入資料庫呢
價值 : 100 QP  點閱數:2235 回應數:13

樓主

Chia-chi Chen
門外漢
0 1
26 6
發送站內信


請各位幫幫忙 小妹是美工出身的,應老闆要求 學php
現在在做客戶的案子,卡在多圖片上傳~下周就要結案了
請各位高手幫幫忙 上網爬文了幾天還是沒有解決

前端是這樣寫的:
上傳照片:(限JPG、JPEG、GIF、PNG圖檔 最多可選5張 請直接滑鼠複選 每張限制2mb以下)
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<input name="prfile[]" type="file" accept="image/jpeg,image/jpg,image/gif,image/png" multiple>
後端:
//上傳多張照片
$i=count($_FILES["prfile"]["name"]);
for ($j=0 ; $j<$i; $j++)
{
$prpicm = date("YmdHis")."_".$j;
$file_Sname = substr($_FILES['prfile']['name'][$j], strrpos($_FILES['prfile']['name'][$j] , ".")+1);
$prname=$prpicm . "." . $file_Sname;
$prpath = "upfiles/produce/";
$flag = copy($_FILES['prfile']['tmp_name'][$j], $prpath.$prname);
if(flag){echo "<img src='".$prpath.$prname."' width='20%' ><br>"; } else { echo "機械照片上傳失敗!<br>";}
}

後端主要是把檔名自取為當下的日期時間秒數,跟副檔名結合,圖片上傳到伺服器ok了!檔名也ok
若上傳5個圖檔
檔名大概是
20170706181506_0.jpg
20170706181506_1.jpg
20170706181506_2.jpg
20170706181506_3.jpg
20170706181506_4.JPG
上傳後會變成

可是資料庫有五個欄位 picname01 picname02 picname03 picname04 picname05
想要如果客戶上傳三個圖片 就把檔名 $prname存到 picname01 picname02 picname03欄位 上傳一個就存到 picname01

目前有測試這樣寫↓但圖片完全沒存進去(其它欄位是其它功能)
$sql ="INSERT INTO produce(lang,category,number,title,word,description,writetime,pdfpic,home,features,mytable,pdf,$picname01)VALUE ('$la','$category','$number','$title','$word','$description','$writetime','$pdfpic','$home','$features','$mytable','$pdf','$prname')";
$result = mysqli_query($link, $sql);

小妹對陣例寫法比較不懂,求大師幫幫忙,有爬過文了 qq


搜尋相關Tags的文章: [ file ] , [ 多圖片上傳 ] ,
本篇文章發表於2017-07-07 09:32
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
首先為什麼欄位名稱會有$picname01
欄位名稱必須是英文開頭,而且這樣的寫法PHP也會把它當成變數自動替換掉

既然是五個圖可先宣告一個大小為5的陣列用來存檔名,先將值都設為空白
跑迴圈後有上傳的就會寫入新值,沒上傳圖則會維持空白
然後再去串新增的字串
本篇文章回覆於2017-07-07 10:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Chia-chi Chen
檢舉此回應
不好意思,打錯字了,後來已更正。

既然是五個圖可先宣告一個大小為5的陣列用來存檔名,先將值都設為空白
跑迴圈後有上傳的就會寫入新值,沒上傳圖則會維持空白
然後再去串新增的字串

還是看不懂,因為我只學PHP1-2個月 就要寫會員系統、最新消息、商品上架後台(目前都OK,卡在多圖片上傳檔名寫入資料庫)
有寫法可以看嗎QQ。
本篇文章回覆於2017-07-07 10:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

彩虹
檢舉此回應
這時候我覺得你應該開另外一張資料表來存圖片路徑
而不是用同一張表來放圖片路徑,如果突然客戶需要上10張圖片,你不就要再多開5個欄位了嗎?

所以你可以再上傳圖片的同時,請先撈取該produce的id
然後再上傳圖片的迴圈裡,同時加上insert into produce_image 的指令
把produce_id、picname_src存起來


另外開的表如下
資料表:produce_image
id(流水號) produce_id(produce的流水號) picname_src(圖片路徑)
1 2 20170706181506_0.jpg
2 2 20170706181506_1.jpg
3 2 20170706181506_2.jpg
4 2 20170706181506_3.jpg
5 3 20170706201545_0.jpg
6 3 20170706210587_1.jpg
7 4 20170721330608_0.jpg


這樣子就代表
produce 2 有4張圖片
produce 3 有2張圖片
produce 4 有1張圖片


本篇文章回覆於2017-07-07 11:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

haoaho
檢舉此回應


樓主其實只差在陣列的部分不太懂
不能用原本那樣的寫法去存多筆圖片檔名
要用陣列
可以去了解一下陣列是什麼和要怎麼用
然後思考一下為什麼原本的用法不行
(上面原碼沒實測過,只是大概把意思寫出來)
本篇文章回覆於2017-07-07 11:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Chia-chi Chen
檢舉此回應
謝謝大大,我會照你的建議修改資料庫
可是我還是不會寫檔名 怎麼用陣列加到資料庫

$sql ="INSERT INTO produce(picname01)VALUE ('$prname')";
mysqli_query($link, $sql);

這樣子的寫法 他是最後一張的值 跑到 第一欄位

當初學的時候只是看書學(陣列我都有點跳過的看 Orz)
有沒有人可以幫幫我 qq
本篇文章回覆於2017-07-07 11:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Chia-chi Chen
檢舉此回應
謝謝4樓大大,救星xxd!! 我會好好研究的,真的感謝你的幫助!!!也謝謝其它樓
本篇文章回覆於2017-07-07 11:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
1.下次請記得用程式標簽。

@迷路:
其實他不是故意這樣用。他只是將前後端程式混在一起用了,簡單來說就是還不了解。

@彩虹
你完全誤會他的東西了。說這樣子他看不懂啦~~~

基本上#4完全不理會你的程式,將正確的做法給你參考。
你的程式內的用法寫法要注意以下幾點

1.請不要把後端語言當前端使用。你會被搞死的。
2.請使用程式標簽。
3.你要真的了解#4的程式寫法用意,而不要只是copy。
本篇文章回覆於2017-07-07 12:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

可樂快跑
檢舉此回應
我比較好奇,應老問要求學php……那你老闆有沒有給你二份薪水?
還是說,你老闆仍然只付你美工的薪水,卻要你做二人份的工作?
本篇文章回覆於2017-07-07 12:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Chia-chi Chen
檢舉此回應
我第一次發文 不知道怎麼用程式標簽 sorry

前端跟後端是二個php檔案的 只是檔案程式碼 太大了 所以只截取部份
嗯 正在了解陣例中~~

還有老闆沒給我2份薪水,薪水2萬多..因為公司生意差 幾個月才接到一個case
本篇文章回覆於2017-07-07 13:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

Chia-chi Chen
檢舉此回應
已經成功了,只是之後要做修改圖片比較麻煩,所以我是會去了解,才知道怎麼修改圖片

$flag = copy($_FILES['prfile']['tmp_name'][$j], $prpath.$prname);

我後來有改成 $flag = copy($_FILES['prfile']['tmp_name'][$j], $prpath.$prname[$j]);
這樣子檔案就能成功上傳
本篇文章回覆於2017-07-07 13:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

可樂快跑
檢舉此回應
那你怎麼還會待在公司?
走出去說不定路更寬廣。
本篇文章回覆於2017-07-07 13:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

Chia-chi Chen
檢舉此回應
因為是兼職 每天上7小時 周休六日,2萬多
我本職是做網拍的(自己創業的) 賺的比網頁的還多
而且我很忙,晚上早上都要起來包貨
常遲到請假(找一般公司很難配合我網拍工作)(這間是以前待很久了 認識很久,也有跟老闆說明情況 也在家附近..)
以前有想過外包接case
但會 photoshop 跟依拉 平面設計 名片等等(美觀設計的還不錯的 自認為美感不錯 走商業風格 作品30個網站以上)
+css+html5等前端 就算會這些 接案也是只能接形象網站(以前有認識會php的,基本的會員系統 就開2萬元)
跟本沒法接案
而且外包網殺價 還要比稿,學生被壓詐後 就沒外包了,反而覺得待公司老闆都會處理接案 只負責做還比較輕鬆
因公司也無法再多請員工
所以我就當學習程式 、也有順便學一些新的..rwd、jqmobile 等等
本篇文章回覆於2017-07-07 18:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

淺水員
檢舉此回應
補充建議:
MAX_FILE_SIZE 不要由前端指定,因為很好被竄改
既然是固定的值,寫在後端就可以
本篇文章回覆於2017-07-09 10:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.