2014-12-04 99 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']}'";