2009-08-12 75 views
7

我正在使用php/mysql和protype.js從表中刪除記錄。問題是數據庫中的記錄沒有被刪除。從Ajax請求中刪除數據庫中的記錄

的index.php:

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

Script是

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

 <?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);工作正常,但之後的代碼是沒有的。

+1

+1即使簡單,很好地解釋。 ;-) – Shoban 2009-08-12 07:03:28

回答

9

您使用的是GET請求,從JS:

{method:'get'} 

而且你的PHP代碼使用,他認爲數據到達的POST:

$ID = $_POST['id']; 

你應該用同樣的方法在兩側。

(當你正在修改/刪除數據,你應該使用POST)


一點題外話,你應該definitly逃脫/保護/檢查正在使用的SQL查詢的數據,以避免SQL注入,例如使用intval,因爲您正在使用整數;如果您使用字符串,則會使用mysql_real_escape_string

另一種方法是停止使用舊mysql延伸,並開始使用mysliPDO,這意味着你可以使用預處理語句(mysqlipdo)評論後


編輯:你也,現在請求是在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.RequestAjax options :-)

+0

好親愛的我已經完成{方法:'post'} 和php文件$ ID = $ _POST ['id']; 但無法正常工作 – 2009-08-12 07:16:16

+0

您還需要更改傳遞參數的方式:如果您現在使用POST,則不應在URL中傳遞該參數,而應使用「參數」選項;請參閱http://www.prototypejs.org/api/ajax/request和http://www.prototypejs.org/api/ajax/options以獲取更多信息 – 2009-08-12 07:23:50

+0

好了,現在可以刪除記錄但我需要刷新頁面,看到變化。那麼我如何編碼從當前頁面中刪除該記錄?服務器響應將是bool,以便我們可以確定該記錄是否被刪除。你能幫我開發這個嗎? – 2009-08-12 10:00:23

0

看起來您的ajax請求正在使用GET,但您的刪除腳本正試圖通過POST檢索該ID。嘗試將{method:'get'}設置爲{method:'post'}

+0

好吧親愛的我已經{方法:'後'} {方法:'後'}。 但沒有結果 – 2009-08-12 07:14:20

0

更改刪除。PHP的是這樣的:

<?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'; } 
    ?> 

或者您冷加工使用$ _REQUEST而不是$ _GET(或$ _ POST在第一個例子),因爲它聚集$ _GET和$ _POST數組。

+0

Ok哥,現在記錄可以刪除但我需要刷新頁面,才能看到更改。那麼我如何編碼從當前頁面中刪除該記錄?服務器響應將是bool,以便我們可以確定該記錄是否被刪除。你能幫我開發這個嗎? – 2009-08-12 10:30:03