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