#php #mysql #rename #file-rename
#php #mysql #переименовать #файл-переименовать
Вопрос:
Я уже использую функцию загрузки и отображения в PHP, но если кто-то нажмет кнопку «Переименовать» в разделе «Мой просмотр», откроется диалоговое окно, в котором отображается существующее имя файла, оно может быть изменено пользователем, а также сохранить новое имя, которое вводится пользователем (не только в SQL, но иизменено имя файла, который хранится в каталоге). путь к файлу хранится в MySQL, файлы хранятся в папке define.
Я пытался найти в Интернете, но большая часть его меняет имя при загрузке или изменяет предварительно определенные имена, а не изменяется пользователем
Вот мой код загрузки файла:
$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>";
}
Я понимаю, что это простой код и не имеет никакого связанного кода для переименования, но я уже много раз пытался проверить.
Комментарии:
1. Пожалуйста, предоставьте существующий код для вашей
move_uploaded_file()
процедуры. Это нормально, что он не работает. Нам просто нужно посмотреть, что вы пытаетесь сделать.2. Предупреждение: вы широко открыты для SQL-инъекций и должны действительно использовать параметризованные подготовленные операторы вместо того, чтобы вручную создавать свои запросы. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким входным данным, особенно тем, которые поступают со стороны клиента. Даже если ваши запросы выполняются только доверенными пользователями, вы все равно рискуете повредить свои данные .
3. Обычно можно использовать —
rename($src,$dest)
— php.net/manual/en/function.rename.php — и тогда, вероятно, вам понадобитсяdirename($file)
, а затем и обновление базы данных.
Ответ №1:
Возможно, вы захотите использовать здесь другой подход: возможно, загрузите файлы и переименуйте их во что-то удобное после загрузки, например: идентификатор строки таблицы и сохраните имя файла в вашей таблице MySQL (добавьте столбец filename), который пользователь может изменить. Затем, когда пользователь загружает файл, отправьте имя, хранящееся в базе данных, с 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"]);