2017-08-21 71 views
0

你好,我准备创建一个Web应用程序,让用户上传多文件。PHP多文件上传显示每个文件的名称

这是我的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, 

任何想法??感谢

+0

你需要使用“文件名。=”追加到文件名 –

+0

也不要忘记追加之前,首先声明变量 – Akintunde007

回答

1

包括内部查询每个循环

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();} 
0

我想你想(请注意,=代替=),然后呼应外循环

foreach($_FILES['filesname']['tmp_name'] as $key => $tmp_name) 
{ 
    $file_name .= $_FILES['filesname']['name'][$key] . ","; 
} 
echo "$file_name" 
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注入。推荐使用准备与占位语句来代替像波纹管

<?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); 
} 
?>