2013-02-27 41 views
0

我面臨刪除正確文件的問題。我正在顯示按上傳時間排序的用戶上傳的文件列表(上次上傳)。如果有3-4個文件的列表,無論我點擊哪個文件刪除,列表中的第一個文件被刪除,最後上傳的文件就是。這是我的頁面顯示特定用戶上傳的文件。不刪除正確的文件在PHP

<?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(); 
} 
?> 

誰能告訴我在哪裏,我錯了,這樣我可以讓我的問題解決嗎?

How my DB looks like

Screenshot of My Uploads page displaying files uploaded by the user

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – 2013-02-27 15:23:47

+0

我想你應該改變'$ uid = $ faculty_data ['faculty_id'];'爲'$ uid = $ _ REQUEST ['faculty_id'];' – fedorqui 2013-02-27 15:24:51

+0

@fedorqui:試過了。不起作用。這與表單或查詢有關。 – trollster 2013-02-27 15:27:21

回答

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 

?> 

這應該做的伎倆;)

+0

存在同樣的問題。我試圖刪除第二個文件,第一個被刪除。 – trollster 2013-02-27 15:43:14

+0

我認爲你的問題是不好的......先做一個選擇,然後比較....比較失敗 – Hackerman 2013-02-27 16:15:01

+0

你能幫助你做到這一點嗎? – trollster 2013-02-27 16:15:47

0

添加存儲文件ID的另一個隱藏的輸入,並在您刪除腳本獲取並使用它

0

您創建的每個可用文件單獨POST形式,但這些都不形式包含有關它們指的是什麼文件的任何信息。我猜$_POST只包含一個delete密鑰,其值爲Delete File

在你刪除頁面,你看從一個變量不存在數據:

$uid=$faculty_data['faculty_id'] 

...然後您檢索數據庫中的所有文件他們的ID對$uid比較。我想你ID是零時刪除所有行。

要做到:

  1. 啓用完整的錯誤報告。這是你在進一步研究之前需要解決的問題;沒有錯誤消息的幫助,編碼是不可能的。這是brief explanation

  2. 將隱藏字段添加到具有相應ID的表單中。

  3. $_POST中讀取表格數據,而不是從任意變量中讀取。

  4. 學習一些基本的SQL,如WHERE條款,所以你可以這樣做:

    DELETE FROM uploads 
    WHERE faculty_id=333 
    
  5. 瞭解SQL注入。使用提供準備好的語句的庫。