2015-12-27 123 views
0

我無法從服務器文件夾取消鏈接文件。從文件夾取消鏈接文件

錯誤警告:

mysql_fetch_array() expects parameter 1 to be resource, boolean given on line 4.

PHP代碼:

<?php 
if($_GET['action'] = "deletelink" && !empty($_GET['id']) && is_numeric($_GET['id'])) { 

    $result = mysql_query("DELETE FROM books WHERE id='".mysql_real_escape_string($_GET['id'])."' "); 
    while ($a_row = mysql_fetch_array ($result)) 
    { 
    unlink("/home/me/public_html/upload/image/$a_row[image]"); 
    } 
    mysql_query("DELETE FROM 1 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 
    mysql_query("DELETE FROM 2 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 
    mysql_query("DELETE FROM 3 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 
    mysql_query("DELETE FROM 4 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 

} 
+0

檢查是否'$ result'不是'null'然後迭代它 –

+0

檢查錯誤。 – Jens

+2

我不認爲刪除查詢會退回數組以獲取數據。 – Matt

回答

1

有幾個與你的代碼問題:

  1. 你不從數據庫中獲取第一
  2. 任何使用過時的mysql_功能
  3. 使用多個DELETE問題(他們能以某種方式結合起來?)
  4. 比較$_GET['action'] = 'deletelink'根本不是一個比較(並且總是如此,因爲它是一個任務)。

關於您的問題,您必須首先選擇數據,像這樣:

<?php 
if($_GET['action'] == "deletelink" && !empty($_GET['id']) && is_numeric($_GET['id'])) { 
    // you need to fetch the result first! 
    $result = mysql_query("SELECT * FROM books WHERE id='".intval($_GET['id']); 

    while ($row = mysql_fetch_array ($result)) 
     unlink("/home/me/public_html/upload/image/{$row['image']}"); 
    // here come your delete statements 
} 
+0

是的,它的工作原理!謝謝 爲什麼在這裏使用括號{$ row ['image']}? –

+0

另外你說刪除查詢組合成一個怎麼可以? –

+0

@amarullzamarullzz括號用於雙引號,關於你的第二個問題,這裏有一個答案在SO:http://stackoverflow.com/questions/3331992/how-to-delete-from-multiple-tables-in- mysql – Jan

0

簡單的打印是否得到數據庫中的記錄,也如果你的記錄,你得到的文件路徑...請參閱下面的打印代碼=======>

<?php 

if($_GET['action'] = "deletelink" && !empty($_GET['id']) && is_numeric($_GET['id'])) { 

    $result = mysql_query("DELETE FROM books WHERE id='".mysql_real_escape_string($_GET['id'])."' "); 


//=======>print to check if records are returned by database otherwise while loop won't be executed below 
echo mysql_num_rows($result); 

while ($a_row = mysql_fetch_array ($result)) 
{ 

//=======>print this path and check if file exists on this path 
echo "/home/me/public_html/upload/image/$a_row[image]"; 

unlink("/home/me/public_html/upload/image/$a_row[image]"); 
} 
       mysql_query("DELETE FROM 1 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 
       mysql_query("DELETE FROM 2 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 
       mysql_query("DELETE FROM 3 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 
       mysql_query("DELETE FROM 4 WHERE fid='".mysql_real_escape_string($_GET['id'])."' "); 

     } 
+0

不幸的是,這不起作用。你有沒有從DELETE語句中得到回覆?此外,還有一些其他代碼問題。 – Jan