我已经在PHP中使用了上载和显示功能,但是如果有人在我的视图部分中按下“重命名”按钮,它将打开一个对话框,其中显示了现有文件名,可以由用户更改并存储新名称由用户输入(不仅在SQL中,而且在存储目录中更改了文件名)。 文件路径存储在MySQL中,文件存储在define文件夹中。
我试图在Internet上查找,但是大多数情况是在上载时更改了名称,或者更改了预定义名称,而不是由用户更改
这是我的文件上传代码:
$db=connection
if(isset($_POST['submit']))
{
$filename=$_FILES["pdf"]["name"];
$tempname=$_FILES["pdf"]["tmp_name"];
$folder="files/".$filename;
move_uploaded_file($tempname,$folder);
$abc="INSERT INTO tables (pdf) VALUES ('$folder')";
$res=mysqli_query($db,$abc);
if($res)
{
echo "save";
}
}
&这是我的观点:
<?php
$acb = "SELECT * FROM tables";
$ress = mysqli_query($db, $acb);
while ($test = mysqli_fetch_array($ress)) {
$id = $test['id'];
echo "<tr alian='center'>";
$path = "/files";
$file2 = basename($path, ".php");
echo "<td>".$test['id']."</td>";
echo "<td>".basename($test['pdf'])."</td>";
echo "<td><a href='ren.php?id=$id'>Rename</a></td>";
echo "<td><a href='del.php?id=$id'>Delete</a>
</td>";
}
我知道这是简单的代码,并且没有用于重命名的任何相关代码,但是我已经尝试了很多次了。
答案 0 :(得分:1)
您可能想在这里采取其他方法:也许上传文件,并在上传后将它们重命名为方便的名称,例如:表行的ID,并将文件名存储在MySQL表中(添加文件名列),用户可以更改。
然后,当用户下载文件时,使用Content-disposition
标头发送存储在数据库中的名称。
上传时:
$filename = mysqli_real_escape_string($db, basename($_FILES["pdf"]["name"]));
if (mysqli_query($db, "INSERT INTO tables (pdf) VALUES ('$filename')")) {
$id = mysqli_insert_id($db);
$folder = "files/" . $id;
move_uploaded_file($_FILES["pdf"]["tmp_name"], $folder);
}
更新文件名时,您将执行以下操作:
UPDATE tables SET pdf = '$newName' WHERE id = $id
(不要忘记转义输入并清理文件名)
向用户提供文件时(用户下载文件)
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . $row["filename"] . '"');
readfile('files/' . $row["id"]);