使用Ajax请求从数据库中删除记录

7
我正在使用php/mysql和prototype.js从表中删除记录。问题是数据库中的记录未被删除。

index.php:

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

脚本是

   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
即使简单,解释得很清楚,还是要点个赞。;-) - Shoban
3个回答

9

您正在使用JS发出GET请求:

{method:'get'}

您的PHP代码使用他认为以POST方式到达的数据:

$ID = $_POST['id'];

你应该在两侧使用相同的方法。
(由于您正在修改/删除数据,您可能应该使用POST)
此外,您应该绝对转义/保护/检查您在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选项 :-)


好的亲爱的,我已经完成了 {method:'post'} 和 PHP 文件 $ID = $_POST['id']; 但它们没有起作用。 - Ashvin Ranpariya
您还需要更改传递参数的方式:如果您现在使用POST,则不应将参数传递到URL中,而是使用“参数”选项。请参阅http://www.prototypejs.org/api/ajax/request和http://www.prototypejs.org/api/ajax/options获取更多信息。 - Pascal MARTIN
现在可以删除记录,但我需要刷新页面才能看到更改。那么我该如何编写代码从当前页面中删除该记录?服务器响应将是布尔值,以便我们可以确定记录是否已删除。你能帮我开发这个吗? - Ashvin Ranpariya
嗨,这是一个非常不同的问题(你可能想实际提出另一个问题); 你至少有两种可能性:在 Ajax 调用完成后,在纯 JS 中从 DOM 中删除某个东西(对应于一个学生的行);或者修改你的 PHP 脚本,使其返回一堆 HTML,你将使用它来更新页面的某个部分(比如学生列表),在 Ajax 调用结束时——你选择哪个取决于你的页面的复杂程度;例如,你可能想考虑分页之类的事情... - Pascal MARTIN

0

将 delete.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 数组。

好的兄弟,现在记录可以被删除,但我需要刷新页面才能看到更改。那么我该如何编写代码从当前页面中删除该记录?服务器响应将是布尔值,以便我们可以确定记录是否已删除。你能帮我开发这个吗? - Ashvin Ranpariya

0

看起来你的ajax请求使用GET,但是你的删除脚本尝试通过POST检索id。尝试将{method: 'get'}设置为{method: 'post'}


好的亲爱的,我已经使用 {method:'post'} 向 {method:'post'} 发送请求了。 但是没有结果。 - Ashvin Ranpariya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接