Привет, Тостер!
Делаю выпадашку-подсказку адреса (по базе ФИАСа).
Добился того, что вводим название объекта, и выпадают варианты совпадения, вместе с родителями. Но стоит написать что-то лишнее(даже пробел) и происходит ошибка.
В базе не хранится в одной ячейке Новочеркасский пр-кт, а хранится он - в одной ячейке: Новочеркасский, в другой: пр-кт . Это я их склеивал при выводе, а вот при вводе, мой код ищет только по одному полю, т.е. если допишем при вводе "пр-кт" тоже будет ошибка.
Я думаю надо 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. Тоже не могу понять как сокращать их кол-во по мере написания перед улицей города или региона.
Вообщем я пока слабоват в программировании, и хочется услышать любые ваши мысли. Хочу добить эту штуку.