2010-05-28 8 views
0

제가 작업하고있는 개인 웹 애플리케이션이 있습니다. 클릭하면 데이터베이스에서 해당 정보를 삭제해야하는 php에 대해 ajax 호출을해야한다는 링크가 있습니다. 알 수없는 이유로 데이터베이스에서 실제로 행을 삭제하지 않습니다. 나는 내가 아는 모든 것을 시도했지만, 여전히 아무것도하지 않았다. 믿을 수 없을 정도로 쉬운 일이라고 확신합니다 ... 관련 스크립트가 있습니다.jQuery 아약스 삭제 스크립트가 실제로 삭제되지 않습니다.

데이터베이스 출력 :

$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 주입에 대해 들어 본 적이 있습니까? –

+0

SQL은 무엇입니까? 그냥 놀림 :) 아직 개발 단계에서는 로컬 호스트에 있습니다. 나는 그것이 움직일 때 나는 십자가를 점을 찍을 것이다. – 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] : xxxx/includes/delete의 '/var/run/mysqld/mysqld.sock'(2) 소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다. 라인 (20) 바보 미디어 사원에에 .php. – werm

+0

아마도 http://kb.mediatemple.net/questions/4/Why+can%27t+I+connect+to+my+MySQL+database+from+PHP%3F 연결에 도움이 될 수 있습니까? 설치 방법에 따라 몇 가지 코드 샘플이 있습니다. – Alistair

0

DB 쿼리 후 리다이렉트하지 않도록 삭제 스크립트를 수정할 수 있습니다. 이 AJAX를 통해 호출 된 이후로, 그것은 적어도 자바 스크립트에 성공/오류 코드를 반환 있습니다

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

그것은 성공 데이터베이스 호출을 가정하는 나쁜 관행입니다.

관련 문제