удалить проверенные строки таблицы с помощью ajax

Я проверил многочисленные вопросы, чтобы найти решение. Я знаю, что я близко, но я все еще не получаю ничего с моим deleteData.php после подтверждения удаления.

Статус:

Тестирование массива дает успешный результат.
Пример: Я проверил строки 1, 2 & 31 … затем нажмите #btn_del.
Сначала я получаю подтверждение «Ты уверен …?»
Далее я вижу правильное предупреждение (массив) 1,2,31
Следующий шаг … предполагается, что ajax отправит данные этого массива в deleteData.php для обработки.

скрипт

$('a#btn_del').click(function(e) {
e.preventDefault();
page    = $(this).attr("href");
ids     = new Array()
a       = 0;

$(".chk:checked").each(function(){
ids[a] = $(this).val();
a++;
})
//  alert(ids);

if (confirm("Are you sure you want to delete these courses?")) {

$.ajax({
url         :   'deleteData.php',
data        :   ids,
type        :   "POST",
//dataType  :   'json',
success     :   function(res) {
if ( res == 1 ) {
$(".chk:checked").each(function() {
$(this).parent().parent().remove();
}) // end if then remove table row
} // end success response function
} // end ajax
}) // end confirmed
}
return false;
}); // end button click function
}); // end doc ready

deleteData.php

<?php
require_once('config.php');                             // Connect to the database

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
or die ('Error connecting to MySQL server.'.$dbc);

foreach     ($_POST['ids']
as          $id) {
$sql = "DELETE FROM unit_genData
WHERE unit_id='" . $id . "'";
$result = mysqli_query($sql)
or die(mysqli_error($dbc));

}                                           // end echo result countmysqli_close($dbc);                                     // close MySQL

echo json_encode(1);
?>

Отредактировано:

Обновлен GET to POST.
Обновлены данные: «идентификаторы» к данным: идентификаторы

Проверено:

а) В php … echo $ _POST [‘ids’];
БЕЗРЕЗУЛЬТАТНО
б) В JS … прокомментировал (если подтвердите …)
БЕЗРЕЗУЛЬТАТНО

Статус:

Похоже, AJAX не стреляет (так сказать)

2

Решение

Прежде всего, я бы использовал POST вместо GET для удаления.

Затем вам нужно отправить правильные данные в ваш PHP-скрипт. Теперь у вас есть просто строка, без пар ключ-значение, чего вы ожидаете от бэкэнда.

Самый простой способ отправить ваши данные — использовать что-то вроде (при условии, что у вас есть форма):

data: $('form').serialize(),

но вы также можете отправить массив, подобный тому, который вы строите:

data: ids,

Преимущество первого метода заключается в том, что значения автоматически экранируются / кодируются (очевидно, не имеет значения только с целыми числами …).

В бэкэнде вам нужно было бы предотвратить проблему внедрения SQL, которая у вас есть сейчас. Вы можете сделать это, используя подготовленный оператор со связанными параметрами или в случае числовых идентификаторов вы можете привести их к целым числам.

Редактировать: Как отмечено в комментариях @ Fred-ii-, дополнительные пробелы в строке приведут к тому, что ваше условие не будет выполнено. Я бы порекомендовал подготовленное утверждение, но если вы решили привести к int и использовать его, просто удалите кавычки.

Также обратите внимание, что процедурный mysqli_* функции принимают ссылку на базу данных в качестве первого параметра, который применяется как к запросу, так и к обработке ошибок.

1

Другие решения

Других решений пока нет …