Удаление записей из базы данных с помощью 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 ответа:
Вы используете 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.