0

我在删除正确的文件时遇到问题。我正在显示按上传时间排序的用户上传的文件列表(最后一次上传)。如果有3-4个文件的列表,无论我点击哪个文件删除,列表中的第一个文件都会被删除,最后上传的文件就是。这是我的页面,显示特定用户上传的文件。

<?php
$uid=$faculty_data['faculty_id']; //Assigns logged in id to a variable
$query="SELECT * FROM uploads ORDER BY datetime DESC"; //Sorts by date time
$result=mysql_query($query);
while($row=mysql_fetch_assoc($result))
{
if($uid==$row['faculty_id']) //Checks if the logged in id matches with id in DB
{
echo '<form action="delete.php" method="POST">';
echo "<strong>File: </strong>";
$url=$row['link'];  
$new="http://tofsis.com/fileshare/".$url; 
echo "<a href='$new'>$new</a><br/>";
echo "<strong>On: </strong>".$row['datetime'];
echo '<br><input type="submit" name="delete" class="btn btn" value="Delete File"/>';
echo '<hr>';
echo '</form>';
}
}
?>

这是我的删除页面:

<?php
$uid=$faculty_data['faculty_id'];
$query="SELECT * FROM uploads ORDER BY datetime DESC";
$result=mysql_query($query);
if(isset($_POST['delete']))
{
 while($row=mysql_fetch_assoc($result))
{
if($uid==$row['faculty_id'])
{
 $url=$row['link'];
 $new="http://tofsis.com/fileshare/".$url; 
 $query="DELETE FROM uploads WHERE link = '$url'";
 $result=mysql_query($query);
 unlink($url);
}
}
 header('Location: my_uploads.php');
 exit();
 }
 else {
 echo '<script type="text/javascript">alert("Oops something went wrong!")</script>';
 header('Location: my_uploads.php');
 exit();
 }
?>

谁能告诉我哪里出错了,以便我可以解决我的问题?

我的数据库是什么样的

“我的上传”页面的屏幕截图,显示用户上传的文件

4

3 回答 3

2

应该进行一些更改:

 <?php
        $uid=$faculty_data['faculty_id']; //Assigns logged in id to a variable
        $query="SELECT * FROM uploads ORDER BY datetime DESC"; //Sorts by date time
        $result=mysql_query($query);
        while($row=mysql_fetch_assoc($result))
        {
        if($uid==$row['faculty_id']) //Checks if the logged in id matches with id in DB
        { 
        $file_id = $row['id'];
        echo '<form action="delete.php" method="POST">';
        echo "<strong>File: </strong>";
        $url=$row['link'];  
        $new="http://tofsis.com/fileshare/".$url; 
        echo "<a href='$new'>$new</a><br/>";
        echo "<input type='hidden' value='$url' id='file_path' name='file_path' />";
        echo "<input type='hidden' value='$file_id' id='id_file' name='id_file' />"; // new line
        echo "<strong>On: </strong>".$row['datetime'];
        echo '<br><input type="submit" name="delete" class="btn btn" value="Delete File"/>';
        echo '<hr>';
        echo '</form>';
        }
        }
?>

在删除页面上,这是:

 <?php

         $file_id=$_POST['id_file'];
         $file_path = $_POST['file_path'];

         $query="DELETE FROM uploads WHERE id = $file_id";
         $result=mysql_query($query);
         unlink($file_path); //this should works on deleting the file

?>

这应该够了吧 ;)

于 2013-02-27T15:38:19.270 回答
0

添加另一个隐藏的输入来存储文件 ID 并在您的删除脚本中获取并使用它

于 2013-02-27T15:32:20.850 回答
0

您为每个可用文件创建一个单独的 POST 表单,但这些表单都不包含有关它们引用的文件的任何信息。我猜它只$_POST包含一个作为值的delete键。Delete File

在您的删除页面中,您从一个不存在的变量中读取数据:

$uid=$faculty_data['faculty_id']

...然后您从数据库中检索所有文件以将它们的 ID 与$uid. 我猜你在 ID 为零时删除了所有行。

去做:

  1. 启用完整的错误报告。这是您在更进一步之前需要解决的问题;没有错误消息的帮助是不可能编码的。这是一个简短的解释

  2. 将隐藏字段添加到具有相应 ID 的表单中。

  3. 从 中读取表单数据$_POST,而不是从任意变量中读取。

  4. 学习一些基本的 SQL,例如WHERE从句,因此您可以执行以下操作:

    DELETE FROM uploads
    WHERE faculty_id=333
    
  5. 了解 SQL 注入。使用提供准备好的语句的库。

于 2013-02-27T15:42:43.753 回答