2010-05-28 64 views
0

我有一個小小的個人web應用程序,我正在努力。我有一個鏈接,點擊後,應該對應該從數據庫中刪除該信息的php進行ajax調用。由於某些未知的原因,它實際上不會從數據庫中刪除該行。我已經嘗試了我所知道的一切,但還是一無所獲。我相信這是一件非常簡單的事情......以下是涉及的腳本。jQuery ajax刪除腳本沒有實際刪除

數據庫輸出:

$sql = "SELECT * FROM bookmark_app"; 
    foreach ($dbh->query($sql) as $row) 
{ 
echo '<div class="box" id="',$row['id'],'"><img src="images/avatar.jpg" width="75" height="75" border="0" class="avatar"/> 
    <div class="text"><a href="',$row['url'],'">',$row['title'],'</a><br/> 
    </div> 
      /*** Click to delete ***/ 
    <a href="?delete=',$row['id'],'" class="delete">x</a></div> 
    <div class="clear"></div>'; 
     } 

    $dbh = null; 

阿賈克斯腳本:

$(document).ready(function() { 
$("a.delete").click(function(){ 

var element = $(this); 

var noteid = element.attr("id"); 

var info = 'id=' + noteid; 

    $.ajax({ 
    type: "GET", 
    url: "includes/delete.php", 
    data: info, 
    success: function(){ 
    element.parent().eq(0).fadeOut("slow"); 
    } 
    }); 
return false; 
}); 
}); 

刪除代碼:

include('connect.php'); 

//delete.php?id=IdOfPost 
if($_GET['id']){ 

$id = $_GET['id']; 

//Delete the record of the post 
$delete = mysql_query("DELETE FROM `db` WHERE `id` = '$id'"); 

//Redirect the user 
header("Location:xxxx.php"); 

} 
+1

$ id = intval($ _ GET ['id']);曾聽說過SQL注入? – 2010-05-28 13:03:40

+0

SQL現在怎麼樣?只是在開玩笑:)它仍然在開發階段的本地主機上。當它開始運行時,我會點擊我的&cross。 – werm 2010-05-28 13:16:51

回答

3

啊剛發現你的錯誤,在href你產生你不設置id屬性。它應該是這樣的:

<a href="..." id="'. $row['id'] . '" class="delete">x</a> 

當然,這只是一個直接的例子,你必須逃脫這些事情,但是這應該讓你在jQuery的訪問項目。

+3

不要忘記,'破壞性'的請求應通過POST完成,否則只需瀏覽到'錯誤'的URL可能會導致記錄被刪除。 – Alistair 2010-05-28 13:15:41

+0

嗯,它的工作,直到我把它移到我的網絡服務器。現在FireBug告訴我「警告:mysql_query()[function.mysql-query]:無法通過套接字'/var/run/mysqld/mysqld.sock'連接到本地MySQL服務器(2)在xxxx/includes/delete .php on line 20. Stupid Media Temple。 – werm 2010-05-28 13:31:39

+0

也許http://kb.mediatemple.net/questions/4/Why+can%27t+I+connect+to+my+MySQL+database+from+PHP%3F可能會幫助你連接?根據你的設置,他們有一些代碼示例。 – Alistair 2010-05-28 13:36:40

0

您可能希望修改您的刪除腳本,使其不僅在數據庫查詢後重定向。因爲它是通過被稱爲AJAX,有它至少返回一個成功/錯誤代碼的javascript:

// can't return $delete unconditionally, since *_query() returns an object 
if ($delete) { 
    return(json_encode(array('code' => 1, 'msg' => 'Delete succeeded'))); 
} else { 
    return(json_encode(array('code' => 0, 'msg' => 'Delete failed: ' . mysql_error())); 
} 

這是不好的做法,假設一個數據庫調用成功。