2010-05-28 2 views
0

У меня есть небольшой персональный webapp, над которым я работаю. У меня есть ссылка, которая при щелчке должна сделать вызов ajax для php, который должен удалить эту информацию из базы данных. По какой-то неизвестной причине он фактически не удалит строку из базы данных. Я пробовал все, что знаю, но все равно ничего. Я уверен, что это невероятно просто ... Вот сценарии.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; 

Ajax скрипт:

$(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-инъекции? –

+0

SQL что теперь? Просто шучу :) Это все еще на локальном хосте в Dev-этапе. Я разберусь с крестом, когда он пойдет вживую. – werm

ответ

3

Ах только пятнистый ваша ошибка, в HREF вы генерируете вы не устанавливая атрибут id. Это должно быть что-то вроде:

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

Конечно, это только непосредственный пример, вы должны избежать такого рода вещей, но это должно позволить вам получить доступ к элементу в JQuery.

+3

Не забывайте, что «деструктивные» запросы должны выполняться через POST, поскольку в противном случае просто просмотр «неправильного» URL-адреса может привести к удалению записей. – Alistair

+0

Ну, это сработало ... пока я не переместил его на свой веб-сервер. Теперь FireBug сообщает мне: «Предупреждение: mysql_query() [function.mysql-query]: Не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2) в xxxx/includes/delete .php в строке 20. Stupid Media Temple. – werm

+0

Возможно http://kb.mediatemple.net/questions/4/Why+can%27t+I+connect+to+my+MySQL+database+from+PHP%3F может помочь вам подключиться? У них есть примеры кода в зависимости от того, как вы настраиваетесь. – Alistair

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

Это плохая практика, чтобы взять на себя вызов базы данных удалось.

Смежные вопросы