用 PHP 上傳多個檔案
-
在 PHP 中使用
multiple
標籤,表單中input
屬性的name
標籤中的陣列和move_uploaded_file()
函式上傳多個檔案 - PHP 使用 PDO 上傳資料庫中的多個檔案
我們將通過將 input
標籤的 name
屬性指定為陣列並使用 multiple
屬性來介紹一種在 PHP 中上傳多個檔案的方法。form
標籤的 enctype
屬性值是 multipart/form-data
。此方法使用 mysqli
進行資料庫連線。
我們還將介紹另一種使用 PDO 在 PHP 中上傳多個檔案的方法。我們將上傳資料夾中的檔案,然後將它們上傳到資料庫。這種方法在實現上類似於第一種方法。
在 PHP 中使用 multiple
標籤,表單中 input
屬性的 name
標籤中的陣列和 move_uploaded_file()
函式上傳多個檔案
我們可以將 input
標籤的 name
屬性指定為一個陣列來上傳多個檔案。input
標籤使用 multiple
關鍵字,讓我們在上傳時選擇多個檔案。我們可以為 enctype
屬性編寫編碼 multipart/form-data
,以指定在提交表單時應如何編碼表單資料。我們可以使用 mysqli
連線到資料庫。move_uploaded_file()
函式將上傳的檔案從伺服器的臨時位置移動到所需位置。我們可以使用 INSERT
SQL 語句將選定的檔案上傳到資料庫。
例如,設定與 mysqli
物件的資料庫連線並將值分配給 $db
變數。使用 POST
方法和編碼型別為 multipart/form-data
建立一個 HTML 表單以上傳檔案。將 input
標籤的 type
屬性指定為 file
,將 name
屬性指定為 file[]
。不要忘記在關閉 input
標籤之前寫入屬性 multiple
。編寫 input
標籤以提交表單。
檢查表單是否已使用 isset()
函式提交。使用 count
函式計算上傳檔案的數量。將 $_FILES['file']['name']
作為 count
函式的引數並將其分配給變數 $countfiles
。使用 for 迴圈遍歷上傳的檔案。在迴圈內,建立一個變數 $filename
並將其分配為 $_FILES['file']['name'][$i]
。在根目錄中建立一個名為 upload
的資料夾。使用 move_upload_file()
函式移動檔案。使用 $_FILES['file']['tmp_name'][$i]
作為第一個引數,它是具有臨時名稱的檔案。使用'upload/'.$filename
作為第二個引數,它是檔名和儲存上傳檔案的位置。
執行 SQL INSERT
查詢以將檔案插入資料庫。將變數 $filename
作為 id
和 name
插入到資料庫的 fileup
表中。使用 $db
變數呼叫 query()
函式,並以 $sql
變數為引數來執行查詢。
示例程式碼:
# php 7.*
<?php
if(isset($_POST['submit'])){
$countfiles = count($_FILES['file']['name']);
for($i=0;$i<$countfiles;$i++){
$filename = $_FILES['file']['name'][$i];
$sql = "INSERT INTO fileup(id,name) VALUES ('$filename','$filename')";
$db->query($sql);
move_uploaded_file($_FILES['file']['tmp_name'][$i],'upload/'.$filename);
}
}
?>
<form method='post' action='' enctype='multipart/form-data'>
<input type="file" name="file[]" id="file" multiple>
<input type='submit' name='submit' value='Upload'>
</form>
?>
輸出:
SELECT * FROM `fileup`
id name
1 cfc.jpg
2 hills.jpg
PHP 使用 PDO 上傳資料庫中的多個檔案
我們可以使用 PDO 在 PHP 中上傳多個檔案。我們可以使用 PDO 物件來建立到資料庫的連線。我們使用準備好的語句將檔案插入到資料庫中。此方法與第一種方法僅在資料庫連線方面有所不同。我們也可以對這種方法使用確切的 HTML 表單。我們通過在資料夾和資料庫中上傳兩個 jpg 檔案來演示此方法。
例如,使用 new
關鍵字建立 PDO 資料庫連線並將其分配給 $conn
變數。檢查表單是否已使用 isset()
函式提交。使用上面的 count
函式對檔案進行計數。然後,對 $query
變數編寫查詢以插入 id
和 name
。寫佔位符 ?
對於查詢中的值。使用 prepare()
函式準備查詢並在 $statement
變數中賦值。使用 move_uploaded_file()
函式將每個檔案移動到 uplaod
資料夾。使用 execute()
函式執行查詢。提供一個帶有 $filename
和 $target_file
作為函式引數的陣列。
在下面的示例中,使用者上傳了兩個 jpg 檔案。首先,檔案被上傳到 upload
資料夾,然後它被上傳到資料庫。資料庫包含表 fileup
,它具有列 id
和 name
。要了解有關 move_uploaded_files()
函式的更多資訊,請參閱 PHP 手冊。
示例程式碼:
#php 7.x
<?php
$conn = new PDO("mysql:host=$server;dbname=$dbname","$username","$password");
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
if(isset($_POST['submit'])){
$countfiles = count($_FILES['file']['name']);
$query = "INSERT INTO fileup (id, name) VALUES(?,?)";
$statement = $conn->prepare($query);
for($i=0;$i<$countfiles;$i++){
$filename = $_FILES['file']['name'][$i];
$target_file = 'upload/'.$filename;
move_uploaded_file($_FILES['file']['tmp_name'][$i],$target_file);
$statement->execute(array($filename,$target_file));
}
}
?>
輸出:
SELECT * FROM `fileup`
id name
1 upload/cfc.jpg
2+ upload/count.jpg
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn