2014-12-04 75 views
0

我有一个非常基本的文件上传页面。 如果您已经登录,您会看到一个页面(myFiles.php),其中有一个由登录的用户上传的文件的表格+每行的删除按钮。从服务器和数据库中删除文件(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>"; 
} 

我需要知道我怎么能删除按钮连接到某行:我从我的数据库,在那里我有这个代码表上传(文件名,扩展名,filemtime,用户名)获取用户文件以及如何将参数(文件名和扩展名)传递到从数据库和我的服务器(页面delete_check.php)中删除文件的页面。目前

delete_check.php看起来是这样的(这是行不通的,因为我无法通过从delete.php参数):我建议你到一个独特的自动增量ID添加到每一行

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"); 
+1

把文件名作为一个输入隐藏字段在HTML中,值=文件名:) – 2014-12-04 12:55:53

回答

0

在你的数据库中。这样的结构看起来像这样:

id| filename| filemtime| username ... 
1 | *  | *  | * 
2 | *  | *  | * 
... 

现在ü可以选择用下面的SQL语句

$query = "SELECT id, filename, filemtime, username FROM Uploads WHERE username='".$active."' ORDER BY filemtime"; // 

现在DATAS的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 Statement看起来像这样

$sql = "DELETE FROM Uploads WHERE id=".$id; 

但保重!如果您不希望用户可以删除未分配给他们的附件,还应该检查给定的ID是否附加到当前用户。您可以扩展删除sql语句,如下所示:

$sql = "DELETE FROM Uploads WHERE id=".$id." AND WHERE username LIKE '".$active."'"; 
+0

终于得到它的工作,使用隐藏的输入也通过文件名和扩展名从服务器上删除文件。谢谢 – e4n 2014-12-04 14:44:19

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']}'";