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

Ash*_*iya 7 php ajax prototypejs

我正在使用php/mysql和protype.js从表中删除记录.问题是数据库中的记录不会被删除.

index.php文件:

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

脚本是

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

   }
Run Code Online (Sandbox Code Playgroud)

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'; }
     ?>
Run Code Online (Sandbox Code Playgroud)

alert("ID : "+id); 工作正常,但之后的代码不是.

Pas*_*TIN 9

您正在使用来自JS的GET请求:

{method:'get'}
Run Code Online (Sandbox Code Playgroud)

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

$ID = $_POST['id'];
Run Code Online (Sandbox Code Playgroud)

你应该在两边使用相同的方法.

(在修改/删除数据时,您应该使用POST)


作为旁注,您应该在SQL查询中明确地转义/保护/检查您正在使用的数据,以避免SQL注入,例如,在使用整数时使用intval ; 如果使用字符串,则使用mysql_real_escape_string.

另一种方法是停止使用旧的mysql扩展,并开始使用mysliPDO,这意味着你可以使用准备语句(mysqli,pdo)


在评论之后编辑:你现在请求在POST中进行,需要更改参数的传递方式:它们不应再在URL中传递.

我想这样的事情应该有效:

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

或者你也可以使用这样的东西,自己构建参数字符串:

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

(未经测试,因此您可能需要更改一些内容;-))

有关更多信息,请查看Ajax.RequestAjax选项 :-)