php - 多个文件上传问题(简单的php/html)

标签 php file-upload

以下代码的唯一问题 - 如果未选择图像,它会创建一条记录。如果没有选择一张图像,则不应继续执行代码。此方法适用于单一类型的图像形式。

if(!empty($_FILES['gallery']['name'])) {
            for ($i=0; $i < count($_FILES['gallery']['tmp_name']); $i++) { 
            $gallery_tmp = $_FILES['gallery']['tmp_name'][$i];
            $gallery = time().$_FILES['gallery']['name'][$i];
            move_uploaded_file($gallery_tmp, "../uploads/$gallery");
            $sql = mysqli_query($database->connection, "INSERT INTO gallery (img) VALUES ('$gallery')");
            }
        }

HTML 代码如下:

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="gallery[]" class="form-control" multiple="multiple">
<input type="submit" name="submit" value="Update" class="">
</form>

最佳答案

即使您不发送任何图像,您的 $_FILES['gallery']['name'] 也不为空,它也会包含 1 个名称为空的元素。

你可以通过检查第一个元素是否不为空来进行肮脏的黑客攻击:

if(!empty($_FILES['gallery']['name'][0])) {

但是你应该真正检查循环内是否为空。

也不要通过这样做来信任用户输入

$gallery = time().$_FILES['gallery']['name'][$i];
move_uploaded_file($gallery_tmp, "../uploads/$gallery");

有人可以将文件命名为 test.php 并上传您的代码,或者设置名称“../../index.php 并覆盖您的index.php :)

关于php - 多个文件上传问题(简单的php/html),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49706150/

相关文章:

php - Opencart的 $this->config->get ('module_var_name' )

php - Elasticsearch批量数据插入-JsonParseException [意外字符-使用PHP

c# - .NET Core 2.0 MVC 文件上传进度

php - 使用php上传文件时如何设置特定路径

ASP.NET 在 FileUpload 控件中禁用 "C:\fakepath"

http - 使用 NodeJS,解析不一定结束的文件上传的最佳方法是什么?

php - 如何将 FLV 视频剪切成几个小块?

php - 使用 Laravel 读取文件内容

php - 将命名参数与 PDO 一起用于 LIKE

javascript - 基本 Javascript + PHP Ajax 文件上传