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

时间:2009-08-12 06:51:01

标签: php ajax prototypejs

我使用php / mysql和protype.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);工作正常,但之后的代码不是。

3 个答案:

答案 0 :(得分:9)

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

{method:'get'}

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

$ID = $_POST['id'];

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

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


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

另一种方法是停止使用旧的mysql扩展程序,并开始使用mysliPDO,这意味着您可以使用预准备语句(mysqli,{{ 3}})


在评论后编辑:您现在已经在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
  });

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

有关更多信息,请查看pdoAjax.Request: - )

答案 1 :(得分:0)

您的ajax请求似乎正在使用GET,但您的删除脚本正在尝试通过POST检索ID。尝试将{method:'get'}设置为{method:'post'}

答案 2 :(得分: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数组。