Я проверил многочисленные вопросы, чтобы найти решение. Я знаю, что я близко, но я все еще не получаю ничего с моим 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
<?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 не стреляет (так сказать)
Прежде всего, я бы использовал POST вместо GET для удаления.
Затем вам нужно отправить правильные данные в ваш PHP-скрипт. Теперь у вас есть просто строка, без пар ключ-значение, чего вы ожидаете от бэкэнда.
Самый простой способ отправить ваши данные — использовать что-то вроде (при условии, что у вас есть форма):
data: $('form').serialize(),
но вы также можете отправить массив, подобный тому, который вы строите:
data: ids,
Преимущество первого метода заключается в том, что значения автоматически экранируются / кодируются (очевидно, не имеет значения только с целыми числами …).
В бэкэнде вам нужно было бы предотвратить проблему внедрения SQL, которая у вас есть сейчас. Вы можете сделать это, используя подготовленный оператор со связанными параметрами или в случае числовых идентификаторов вы можете привести их к целым числам.
Редактировать: Как отмечено в комментариях @ Fred-ii-, дополнительные пробелы в строке приведут к тому, что ваше условие не будет выполнено. Я бы порекомендовал подготовленное утверждение, но если вы решили привести к int и использовать его, просто удалите кавычки.
Также обратите внимание, что процедурный mysqli_*
функции принимают ссылку на базу данных в качестве первого параметра, который применяется как к запросу, так и к обработке ошибок.
Других решений пока нет …