Удаление записей из базы данных с помощью Ajax-запроса


Я использую php / mysql и protype.js для удаления записи из таблицы. Проблема в том, что запись в базе данных не удаляется.

Индекс.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]."'> :)

   }

Удалить.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 7

3 ответа:

Вы используете GET-запрос из JS:

{method:'get'}

И ваш PHP-код использует данные, которые, по его мнению, поступают как POST:

$ID = $_POST['id'];

Вы должны использовать один и тот же метод с обеих сторон.

(Поскольку вы изменяете / удаляете данные, вы, вероятно, должны использовать POST)


В качестве дополнительной заметки вы должны определенно экранировать / защищать / проверять данные, которые вы используете в SQL-запросе, чтобы избежать SQL-инъекций, используя, например, intval , когда вы работаете с целым числом ; вы бы использовали mysql_real_escape_string, если бы работали со строкой.

Другим способом было бы прекратить использование старого расширения mysql и начать использовать mysli или PDO , что означает, что вы можете использовать готовые операторы (mysqli, pdo )


EDIT after the comment : теперь, когда запрос сделан в POST, вам также нужно изменить способ передачи параметров : они больше не должны передаваться в URL.

I предположим, что нечто подобное должно работать:

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.Request и параметры Ajax :-)

Похоже, что ваш запрос ajax использует GET, но ваш скрипт delete пытается получить идентификатор через POST. Попробуйте установить {method:'get'} в {method:'post'}.

Изменить удалить.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.