2009-08-12 7 views
7

php/mysql 및 protype.js를 사용하여 테이블에서 레코드를 삭제합니다. 문제는 데이터베이스의 레코드가 삭제되지 않는다는 것입니다.Ajax 요청으로 데이터베이스에서 레코드 삭제

의 index.php :

 <a href="javascript: deleteId('<?php echo $studentVo->id?>')">Delete</a></td> 

스크립트

 <?php 
     /* Database connection */ 
     include('configuration.php'); 
     echo "hello,..."; 
     if(isset($_POST['id'])){ 
      $ID = $_POST['id']; 
      $sql = 'DELETE FROM student where id="'.$ID.'"'; 
      mysql_query($sql); 
     } 
     else { echo '0'; } 
    ?> 

alert("ID : "+id);이 제대로 작동

function deleteId(id) 
    { 
     alert("ID : "+id); 
     new Ajax.Request('delete.php?action=Delete&id='+id,{method:'post'}); 
     $(id).remove(); // because <tr id='".$row[id]."'> :) 

    } 

delete.php에게하지만 그 이후 코드는 없습니다.

+1

+1 비록 간단하지만, 잘 설명했다. ;-) – Shoban

답변

9

당신은 JS에서 GET 요청을 사용하고 있습니다 :

{method:'get'} 

을 그리고 당신의 PHP 코드는 자신이 생각하는 데이터를 사용은 POST로 도착 :

$ID = $_POST['id']; 

당신은 양쪽에 같은 방법을 사용해야합니다.

(데이터를 삭제/수정할 때, 당신은 아마 POST를 사용한다) (!) 참고로


, 당신은 definitly는 SQL 쿼리에 사용하는 데이터를 확인/보호/탈출해야한다,에 예를 들어 정수로 작업 할 때 intval을 사용하여 SQL 주입을 피하십시오. 문자열로 작업하는 경우 mysql_real_escape_string을 사용합니다.

또 다른 방법은 준비된 문 (mysqli, pdo) 주석 후


편집을 사용할 수 있습니다 즉, 이전 mysql 확장 사용을 중지하고, mysli 또는 PDO 사용을 시작하는 것입니다 : 당신은 또한 POST에서 요청이 이루어지면 매개 변수가 전달되는 방식을 변경해야합니다. 더 이상 URL에 전달되어서는 안됩니다.

var myAjax = new Ajax.Request(
    'delete.php', 
    { 
    method: 'post', 
    parameters: {action: id} 
    }); 

또는 당신은 또한 매개 변수 문자열을 직접 구축,이 같은 것을 사용할 수 있습니다 :

나는이 같은 일을해야한다고 가정하면 수도 있으므로,

var myAjax = new Ajax.Request(
    'delete.php', 
    { 
    method: 'post', 
    parameters: 'action=' + id 
    }); 

이 (테스트되지 않음을 몇 가지를 바꿔야합니다 ;-))

자세한 내용은 Ajax.Request 및 012를 참조하십시오.:-)

+0

괜찮아요. {method : 'post'} 과 PHP 파일 $ ID = $ _POST [ 'id']; 하지만 작동하지 않습니다 –

+0

매개 변수가 전달되는 방식을 변경해야합니다. POST를 사용하고 있으면 매개 변수를 URL에 전달하지 말고 'parameters'옵션을 사용하십시오. 자세한 내용은 http://www.prototypejs.org/api/ajax/request 및 http://www.prototypejs.org/api/ajax/options를 참조하십시오. –

+0

이제 레코드를 삭제할 수 있지만 페이지를 새로 고침해야합니다. 변경 사항을 확인하십시오. 그렇다면 현재 페이지에서 해당 레코드를 제거하는 코드를 어떻게 만들 수 있습니까? 레코드가 h 제된 것으로 판별 할 수 있도록 서버 응답이 bool이됩니다. 이걸 개발하도록 도와 주시겠습니까 ?? –

0

AJAX 요청이 GET을 사용하고 있지만 삭제 스크립트가 POST를 통해 ID를 검색하려고하는 것 같습니다. {method:'get'}{method:'post'}으로 설정하십시오.

+0

괜찮아요. {method : 'post'}를 {method : 'post'}로 바꿨습니다. 하지만 결과가 없습니다 –

0

변경 삭제

<?php 
     /* Database connection */ 
     include('configuration.php'); 
     echo "hello,..."; 
     if(isset($_GET['id'])){ 
      $ID = $_GET['id']; 
      $sql = 'DELETE FROM student where id="'.$ID.'"'; 
      mysql_query($sql); 
     } 
     else { echo '0'; } 
    ?> 

을 또는 대안 당신은 $ _GET과 $ _POST 배열을 집계으로 $ _GET (또는 첫 번째 예제에서 $ _POST) 대신 $ _REQUEST를 사용 콜드이 방법으로 PHP.

+0

오빠, 이제 레코드를 삭제할 수 있지만 변경 사항을 보려면 페이지를 새로 고쳐야합니다. 그렇다면 현재 페이지에서 해당 레코드를 제거하는 코드를 어떻게 만들 수 있습니까? 레코드가 h 제된 것으로 판별 할 수 있도록 서버 응답이 bool이됩니다. 이걸 개발하도록 도와 주시겠습니까 ?? –