htmlspecialchars - это нужно, а strip_tags зачем? Вы ведь ожидаете разные форматы данных, а при этом банально вырезаете теги, которых по условию формат просто не может содержать, совсем не проверяя данные. Более того, опасаясь вставки тегов, которые как раз нивелирует htmlspecialchars, подставляете данные в запрос как есть, тем самым создаете предпосылку для
sql инъекции.
<?php foreach ($post as $users): ?> - откуда $post? Можно конечно и кучу форм иметь, отправляя каждую отдельно, но можно иметь и одну форму, в которой одноименные поля будут иметь ключ, в вашем случае это $users['id']. То есть именовать поля будут так: name="delivery_time[<?=$users['id']?>]" и сервер получит массив, в котором под первичными ключами равными ID будут содержаться соответствующие поля. А далее в цикле производится обновление ранее
подготовленным запросом. Можно обновить и одним запросом, используя не UPDATE, а INSERT с многострочной вставкой и ON DUPLICATE KEY UPDATE.
Но одной ли формой, несколькими ли, входные данные обязательно нужно проверять, тем более что они у вас разного формата. Сделать это можно по разному, но в РНР уже есть целое расширение -
фильтры. Если какое либо значение ну будет пройдено фильтром, значит клиенту возвращается ошибка. Данные в базу нужно записывать только если они соответствуют ожидаемым условиям.
Указанные разделы изучить, тестовым скриптом выполняя запросы, а уж отправлять ajax запросом форму/формы, это пустяк, который легок для усвоения.