Во-первых нужно выбрасывать из кода cellpadding="0" cellspacing="0" border="0" .... и т.п., есть CSS.
Во-вторых <input type="checkbox" name="'.$reg_list['id'].'"
form="form1"> - вполне можно обойтись без этого, вся таблица может быть помещена с успехом в форму, вряд ли это скажется на дизайне. Но если по данным от клиента динамически строить таблицу, и иметь форму за ее приделами, то можно. Но заголовок таблицы будет постоянен насколько я понял, а меняться будут только данные TBODY, то такой подход ну только лишние N-байт на строку в коде, не более. )
Самое плачевное это в серверном коде.
1) mysqli фактически не используется, да и лучше бы переходить на PDO.
2) or die ("Could not connect to mysql!"); - такой подход не пойдет в режиме асинхронного обмена данными с клиентом в оговоренном формате.
3) Запрос в базу, это выборка по условию class LIKE '9%'. А если нужно иной класс тогда что? Видимо клиент должен иметь возможность выбрать например из списка нужный класс или нет? И почему LIKE '9%'? Классы это такие же записи как данные по нему, и каждый класс удобно содержать также под уникальным идентификатором, а не под "9А", это имя, псевдоним класса, но не удобен как идентификатор, переименуют его в в "9А-бис" и что тогда?
4) Функция mysqli_fetch_array() без второго параметра возвращает два идентичных набора данных - один как индексный массив, второй как ассоциативный, вы используете только ассоциативные данные, то есть попусту тратите и время и ресурсы.
5) action="include/delete.php" - вообще-то делается так: подключаемые файлы, это закрытая для прямого доступа папка, но можно и иметь открытую, но только в ней не должно быть файлов конфигураций и прочего. И почему delete.php, а если не удалять, а редактировать надо, тогда что порождать edit.php?
6) <input type="checkbox" name="'.
$reg_list['id'].'" form="form1">. Флажок не выбранный на клиенте не передается на сервер, это особенность такого поля. Выбранный и переданный на сервер флажок будет иметь значение "on". Но в данном случае это не удобно, да и имя как цифру (надеюсь, что $reg_list['id'], это цифра, уникальный идентификатор), это не хорошо. Корректней было бы так <input type="checkbox" name="field_name['.$reg_list['id'].']" form="form1">, и на сервере будет массив field_name, индексы которого, это идентификаторы. Но в данном случае проще и удобнее так - <input type="checkbox" name="field_name[]" value="'.$reg_list['id'].'">. В этом случае сервер получит массив содержащий значения ID тех записей, которые нужно удалить.
Для того чтобы это выполнялось асинхронными запросами удобно данные полученные из базы отдать клиенту в формате json. А так как таблица фиксированная по столбцам, то достаточно отдать клиенте только значения, без ключей:
while ($reg_list=mysqli_fetch_row($query)) { //получаем только индексный массив
//здесь строки 25-32 кода выбрасываем и заменяем их этим
$reg_list['overnight_period'] = $reg_list['overnight_period'] ?: "-";
$reg_list['number_of_overnight'] = $reg_list['number_of_overnight'] ?: "-";
//хотя такую замену можно было сделать в рамках запроса к базе
//далее формируем массив данных, который будет отдан клиенту на запрос
$out[] = $reg_list;
}
//Отдаем данные клиенту как json, и по уму, один скрипт должен редактировать,
//а это уметь добавлять, обновлять, изменять и удалять данные, а не иметь на все эти случаи кучу скриптов
//значит возможны условия, поэтому отдать данные клиенту и выход
exit(json_encode($out));
При этом в запросе к базе нужно перечислить выбираемые поля в том порядке, в каком они перечислены в шапке таблицы, то есть не SELECT *, а SELECT region, school, ....
При запросе клиентом этой страницы ему отдается только шапка таблицы <thead> с ее строкой, а <tbody> пустое, и список для выбора класса. Данные запрашиваемого класса возвращается как показано выше.
На клиенте:
$(function() {
$('form').submit(function() { //один обработчик для двух форм, хотя список выбора класса не обязательно формой, это просто для примера
$.ajax(
{
type:"POST",
url: this.action, //можно задать через action, но выбор класса и обработка по его данным, это должен быть один скрипт обработчик
data: $(this).serialize(), //сервер будет определять форму источник по ключу данных
dataType: 'json',
success: function(o) {
//здесь по имени свойства возвращенного объекта определяет адрес ответа сервера:
//o.error - ошибки
//o.data - данные по классу
//o.message - сообщение о результатах удаления
//если пришли данные по классу, то их вывод в таблицу с предварительной очисткой TBODY
if(!!o.data) {
//вывод в таблицу
var tb = $('#example tbody').empty(), t, n;
while(t = o.data.pop()) {
n = t.pop();
tb.prepend('<tr><td>' + t.join('</td><td>') + '<input type="checkbox" name="del[]" value="'+n+'"></td></tr>');
}
}
}
});
return false;
})
});
На сервере, если пришел ключ запроса класса, для примера "choice", то сервер делает запрос и возвращает данные по классу, если ключ "del", то удаляет запрашиваемые, но ни в коем случае как было представлено кодом, это и дыра, и неэффективно. Удалить:
if($_POST['del'] && is_array($_POST['del']) && $del = implode(',', array_diff(array_map('intval', $_POST['del']), [0]))) {
$out = mysqli_query($connect, "DELETE FROM registration_page WHERE id IN(" . $del . ")") ? ['message' => 'Ok'] : ['error' => 'No'];
exit(json_encode($out));
}