выбивает ошибку ... без <?php ob_start();?>
почему информация выводиться на страницу когда ob_start размещен в хедере страницы
по этому я думаю 2 ajax от фронтаВернуть все можно 1 пачкой, но запросов к бд нужно 2.
Что помешает вместо г.Барнаул написать, что-то плохое и отправить в базу?Если у вас в базе хранятся текстовые имена городов - у меня для вас плохие новости. Должен передаваться идентификатор. И да, его надо проверять на существование.
вдруг есть какие-то способы стандартныеЕсть конечно. Создается сущность из идентификатора, и если она не пустая - все ок. В некоторых случаях (на самом деле довольно часто) нужно проверять разрешено ли модифицировать данную сущность данным пользователем.
Если id не отличаются, то имена тоже будут одинаковые.Хм, нифига подобного. Имена вполне себе могут быть повторяющимися и по ним тоже будет группировка. Есть смысл делать группировку по уникальному числовому полю, а не по тексту.