我正在处理文件上传应用程序。每个文件都被上载到网站的/files/
目录中,而不是直接上载到数据库中。我一直在尝试用图像。
事实是,我还想使用数据库显示上传的每张图片,以及更多信息...,并检查是否已经存在同名文件。
用户需要执行的操作:使用file
输入类型选择要上传的文件。
应用程序的作用:首先,它在数据库中检查文件名是否已被使用。如果不是,则继续使用$_FILES
上传图片,并使用/files/
功能将其移动到move_uploaded_file()
文件夹中。然后,它在数据库表中创建一行,其中包含文件的类别(fcategory
->“图片”),文件名(fname
),其字体超赞图标({{1} }),基于ficon
的描述(fdesc
)和链接(flink
)。
这是我的表格:
/files/$_FILES['name']
这是PHP代码:
<form action="#" method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" class="btn" name="btn">
</form>
我决定不提供指向我网站的链接。这就是为什么我将其替换为<?php
if (isset($_POST['btn']))
{
$file = $_FILES['file'];
$stmt = $conn->prepare("SELECT * FROM files WHERE fname = ?");
$stmt->bind_param("s", $file['name']);
$stmt->execute();
$res = $stmt->get_result();
$num = $res->num_rows;
if ($num == 0) {
move_uploaded_file($file['tmp_name'], "files/".$file['name']);
echo "<br><br>Image was uploaded.";
$stmt2 = $conn->prepare("INSERT INTO files (fcategory, fname, ficon, fdesc, flink) VALUES (?, ?, ?, ?, ?)");
$name = $file['name'];
$link = "https://LINKTOWEBSITE.COM/files/".$name;
$stmt2->bind_param("sssss", "Imagine", $name, "fa-image", "No description.", $link);
$stmt2->execute();
$stmt2->close();
$stmt->close();
}
else
{
echo "<br><br>Choose another name for the image.";
$stmt->close();
}
}
?>
问题是,数据没有插入数据库中,但是文件插入了LINKTOWEBSITE.COM
文件夹中。
可能是因为我使用了两个准备好的语句,一个嵌套在另一个语句中?第一条语句(用于检查已存在的文件)可以完美地工作。我该怎么办?
如果您需要更多信息,请发表评论,我会尽快编辑问题。非常感谢!