Задать вопрос
leni_m
@leni_m
ЧупаКобрус

Как допилить выпадашку-подсказку адреса?

Привет, Тостер!
Делаю выпадашку-подсказку адреса (по базе ФИАСа).
819a0d7611624893a1600f28c2894e06.png
Добился того, что вводим название объекта, и выпадают варианты совпадения, вместе с родителями. Но стоит написать что-то лишнее(даже пробел) и происходит ошибка.
В базе не хранится в одной ячейке Новочеркасский пр-кт, а хранится он - в одной ячейке: Новочеркасский, в другой: пр-кт . Это я их склеивал при выводе, а вот при вводе, мой код ищет только по одному полю, т.е. если допишем при вводе "пр-кт" тоже будет ошибка.
Я думаю надо input как-то на js обрабатывать, только вот не могу понять как?
Может есть у кого куски кода или свои функции для подобных решений?
Вот мой php код:
public static function search($search) {  // $search - значение из input-a
        $db = Db::getFias(); // соединение с бд

        $sql = "SELECT * FROM d_fias_addrobj WHERE formalname LIKE '".$search."%' AND actstatus=1 ORDER BY areacode ASC LIMIT 10";

        $result = $db->prepare($sql);
        $result->execute();
        $result->setFetchMode(PDO::FETCH_ASSOC);

        $i=0;
        $j=0;

        $searches = "";

        while ($row = $result->fetch()) {

            $row['parents'] = [];

            $parent_id = $row['parentguid'];

            // Тут я собираю родителей, parentguid - id родителя, у регионов он пустой

            while (!empty($parent_id)) {
                $query = $db->prepare('SELECT * FROM d_fias_addrobj WHERE aoguid = :id AND actstatus=1 LIMIT 1');
                $query->bindParam(':id', $parent_id);
                $query->execute();
                $parent = $query->fetch();
                $row['parents'][] = $parent;
                $parent_id = $parent['parentguid'];
            }

            $searches[$i]['formalname'] = $row['formalname'];
            $searches[$i]['shortname'] = $row['shortname'];
            $searches[$i]['parents'] = $row['parents'];
            $searches[$i]['regioncode'] = $row['regioncode'];
            // Если Питер или Москва переставляем вначало
            if ($searches[$i]['regioncode'] == 78 || $searches[$i]['regioncode'] == 77) {
                list($searches[$i], $searches[$j]) = array($searches[$j], $searches[$i]);
                $j++;
            }
            $i++;
        }
        return $searches;
    }

И есть еще одна проблема - если ввести например "марата", то выведет 10(т.к. запрос LIMIT 10), а их 24. Тоже не могу понять как сокращать их кол-во по мере написания перед улицей города или региона.
Вообщем я пока слабоват в программировании, и хочется услышать любые ваши мысли. Хочу добить эту штуку.
  • Вопрос задан
  • 167 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы