PHP Multiple File Upload显示每个文件名

时间:2017-08-21 03:03:49

标签: php

您好我准备创建一个Web应用程序,以便用户上传多个文件。

这是我的HTML代码。

<input type="file" name="filesname[]"  multiple/>

但我想在页面中显示文件名,并将文件名上传到数据库。 例如用户将上传“A.jpg”,“B.png”和“C.txt”;

我使用这个PHP代码是有效的。它正在努力展示多个文件。

foreach($_FILES['filesname']['tmp_name'] as $key => $tmp_name ){
    $file_name =  $key.$_FILES['filesname']['name'][$key];
    echo "$file_name".",";}

上传成功后,html页面显示

result A.jpg,B.png,C.txt,

但我想在数据库中上传文件名。

显示我使用了此代码

$sql="INSERT into file_name_table (filename) VALUES('$file_name'.','); ";

但它只是更新数据库中的第一个file_name。

A.jpg,

任何想法?感谢

3 个答案:

答案 0 :(得分:1)

在for each循环中包含您的查询

EX。

foreach($_FILES['filesname']['tmp_name'] as $key => $tmp_name ){
$file_name =  $key.$_FILES['filesname']['name'][$key];
$sql="INSERT into file_name_table (filename) VALUES('$file_name'.',');";$sql->execute();}

答案 1 :(得分:0)

我想你想要(注意。=而不是=)然后在循环外回声

foreach($_FILES['filesname']['tmp_name'] as $key => $tmp_name )
{
    $file_name .=  $_FILES['filesname']['name'][$key] . ",";
}
echo "$file_name"

答案 2 :(得分:0)

一种解决方案是将文件名存储在数组中,然后将其转换为带有implode的字符串。这就像

<?php
        $_user = 'root';
        $_password= 'root';
        $_db = 'localtest';
        $_host = 'localhost';
        $_port = 3306;
$con = new mysqli($_host, $_user, $_password, $_db);
if(isset($_POST['btnSubmit']))
{
$file_name = array();
foreach($_FILES['filesname']['tmp_name'] as $key => $tmp_name ){
    array_push($file_name, $key.$_FILES['filesname']['name'][$key]);
}
$files_name = implode(', ', $file_name);
echo $files_name;
$sql="INSERT into file_name_table (filename) VALUES('$files_name'); ";
mysqli_query($con,$sql);
mysqli_close($con);
}
?>

测试上面的代码,它将输出。数据库将使用相同的字符串进行更新。

0001.pdf, 1201.pdf, 2747_8.pdf

注意:建议不要使用上述查询,因为它们容易受到sql注入攻击。建议使用带有占位符的准备语句,而不是像bellow

<?php
        $_user = 'root';
        $_password= 'root';
        $_db = 'localtest';
        $_host = 'localhost';
        $_port = 3306;
$con = new mysqli($_host, $_user, $_password, $_db);
if(isset($_POST['btnSubmit']))
{
$file_name = array();
foreach($_FILES['filesname']['tmp_name'] as $key => $tmp_name ){
    array_push($file_name, $key.$_FILES['filesname']['name'][$key]);
}
$files_name = implode(', ', $file_name);
echo $files_name;
$sql="INSERT into file_name_table (filename) VALUES(?); ";
$stmt = $con-> prepare($sql);
$stmt -> bind_param("s", $files_name);
$stmt -> execute();
mysqli_close($con);
}
?>