我有一个非常基本的文件上传页面。 如果您已登录,则会看到一个页面(myFiles.php),其中我有一个用户上传的文件表,每个行都有一个删除按钮。我从我的数据库中获取用户文件,其中我有一个表格上传(文件名,扩展名,文件时间,用户名),代码如下:
if ($_SESSION['active'] == true) {
echo "<table class='table'>
<tr>
<th>File name</th>
<th>Added</th>
<th></th>
</tr>";
$query = "SELECT filename, filemtime, username FROM Uploads WHERE username='".$active."' ORDER BY filemtime"; //
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$timestamp = strtotime($row["filemtime"]);
echo "<tr><td>" . $row["filename"]. "</td><td>" . date("d.m.Y",$timestamp). "</td>";
echo "<td><form role='form' action='delete_check.php' method='post' enctype='multipart/form-data'>";
echo "<button type='submit' class='btn btn-default'>Delete</button></form></td>";
echo "</tr>";
}
echo "</table>";
}
我需要知道如何将删除按钮连接到该行以及如何将参数(文件名和扩展名)传递到我从数据库和服务器删除文件的页面(页面delete_check.php)。
delete_check.php目前看起来像这样(这不起作用,因为我无法从delete.php传递参数):
session_start();
$active = $_SESSION['active'];
$con = mysql_connect("database","user","pw");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("database", $con);
$file = "upload/".$filename.".".$extension;
unlink($filename);
$query = "DELETE FROM Uploads WHERE filename='".$filename."'";
$delete = MYSQL_QUERY($query);
if ($delete === true ) {
echo "Deleted from database ".$filename." extension: " . $extension;
} else {
echo "Not deleted ".$filename." extension: " . $extension;
}
//header("Location: index.php");
答案 0 :(得分:0)
我建议您为数据库中的每一行添加一个唯一的自动增量ID。所以结构看起来像那样:
id| filename| filemtime| username ...
1 | * | * | *
2 | * | * | *
...
现在您可以使用以下SQL语句
选择数据 $query = "SELECT id, filename, filemtime, username FROM Uploads WHERE username='".$active."' ORDER BY filemtime"; //
现在将id添加到删除表单中,如下所示:
echo "<td><form role='form' action='delete_check.php' method='post' enctype='multipart/form-data'><input type=\"hidden\" name=\"id\" value=\"".$row["id"]."\">;
echo "<button type='submit' class='btn btn-default'>Delete</button></form></td>";
在您的delete_check.php中,您现在可以按$id = $_POST['id']
选择ID。 SQL语句看起来像这样
$sql = "DELETE FROM Uploads WHERE id=".$id;
但要小心!如果您不希望用户删除未分配给他们的附件,您还应检查给定ID是否附加到当前用户。您可以使用以下内容扩展delete sql语句:
$sql = "DELETE FROM Uploads WHERE id=".$id." AND WHERE username LIKE '".$active."'";
答案 1 :(得分:0)
这是另一种方法。
使用JavaScript,在传递文件名时将每个按钮重定向到delete_check.php
(假设它是唯一标识符;我更喜欢在我的表中使用一个名为id的列作为唯一标识符。)
echo "<button type=\"submit\" class=\"btn btn-default\" onclick=\"window.location='delete_check.php?filename=$filename'\">Delete</button></form></td>";
位于delete_check.php
的顶部,
$filename = isset($_GET['filename']) ? $_GET['filename'] : null;
就像你在第一部分中所做的那样,你用一个额外的条件来查询行。您需要这样做,否则任何用户都可以删除任何文件。
$query = "SELECT * FROM Uploads WHERE username='$active' AND filename='$filename'";
$row = mysql_fetch_assoc($query);
然后从表中删除文件和行。
unlink("upload/{$row['filename']}.{$row['extension']}");
$query = "DELETE FROM Uploads WHERE username='$active' AND filename='{$row['filename']}'";