用 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