Как реализовать подтверждение удаления категории меню?

Есть код, который запрашивает подтверждение удаления выбранной категории меню. В случае положительного ответа, на сервер отправляется идентификатор категории для проверка наличия у данной категории подкатегорий в базе. Если подкатегорий нет - возвращается false, если есть - true. Ну и соответственно на клиенте обрабатывается ответ, в зависимости от которого переходит или не переходит по ссылке на удаление. Проблема в том, что при ответе true у меня выскакивает alert с предупреждением, а вот return false почему-то не срабатывает и все равно происходит переход по ссылке:
Клиент:

$('.sidebar').on('click', 'a', function() {
			var deleteCategory = confirm('Вы действительно хотите удалить выбранную категорию?');
			if (deleteCategory) {
				var deleteCategoryId = $(this).data('id');
				$.get(
					'/includes/admin.php',
					{'deleteCategoryId': deleteCategoryId},
					function(check) {
						if (check) {
							alert('Сначала удалите все блюда и подкатегории выбранной категории');
							return false;
						} else {
							return true;
						}
					}
				);
			} else {
				return false;
			}
		});


Сервер:

// Проверяет, есть ли у категории дети
	function checkChildrenCategory($categoryId, $database)
	{
		$sql = 'SELECT id FROM menu WHERE parent_id = ' . $categoryId;
		if ($result = mysqli_query($database, $sql)) {
			if (mysqli_num_rows($result) > 0) {
				return true;
			} else {
				return false;
			}
		}
	}

// Собственно сама проверка на наличие детей
        if (isset($_GET['deleteCategoryId'])) {
		echo checkChildrenCategory($_GET['deleteCategoryId'], $database);
	}
  • Вопрос задан
  • 3585 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё очень просто. Обработчик $('.sidebar').on у Вас завершается сразу после отправки запроса в $.get. Callback-функция внутри $.get вызывается асинхронно после получения ответа и её результат нигде не используется.
Вам надо либо в основном обработчике всегда возвращать false и добавить необходимые действия непосредственно в callback, либо использовать вызов .ajax с async: false (что крайне не рекомендуется).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
Немного не по теме, но тут нельзя промолчать.

Сходу CSRF уязвимость. Посылайте не GET, а POST запрос. Желательно, с проверкой токена, по возможности.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Что характерно, вся эта истерия с заменой mysql ext на mysqli никак не мешает говнокодить по-старинке, со всеми вытекающими инъекциями.

И ведь подавляющее большинство пользователей пехапешечки искренне верит, что добавление буковки i к их творениям сразу делает их безопасными
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы