2009-08-12 165 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