【问题标题】:PHP Multiple File Upload show each file namePHP多文件上传显示每个文件名
【发布时间】:2017-08-21 03:03:48
【问题描述】:

您好,我准备创建一个 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'.','); ";

但它只是更新数据库中的第一个文件名。

A.jpg,

有什么想法吗?谢谢

【问题讨论】:

  • 你需要使用"filename .="追加到文件名
  • 另外别忘了在追加之前先声明变量

标签: php


【解决方案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();}

【讨论】:

    【解决方案2】:

    我认为你想要(注意 .= 而不是 =)然后在循环外回显

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

    【讨论】:

      【解决方案3】:

      一种解决方案是将文件名存储在一个数组中,然后使用 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 注入的影响。建议使用带有占位符的 prepare 语句,而不是像下面这样

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-25
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        • 2013-09-07
        相关资源
        最近更新 更多