2016-10-06 2 views
1

У меня естьPHP json_encode автозаполнения

<form action='' method='post'> 
    City name <br /><br /> 
    <input type='text' name='search' value='' class='auto'> 
</form> 

и

<script type="text/javascript"> 
    $(function() { 

    //autocomplete 
    $(".auto").autocomplete({ 
     source: "search.php", 
     minLength: 1 
    }); 

    }); 
</script> 

Это автозаполнения. А теперь я получаю поле из MySQL базы в search.php файл:

if(isset($_GET['term'])) 
    { 
     $city = array(); 
     $airport = array(); 
     $citysearchsql = mysqli_query(db(),"SELECT * FROM citycode WHERE cityname LIKE '%".$_GET['term']."%' "); 
     while($citysearchresult = mysqli_fetch_array($citysearchsql)) 
     { 



      $airnamesql = mysqli_query(db(),"SELECT * FROM airports WHERE citycode='".$citysearchresult['citycode']."' "); 
      while($airnameresult = mysqli_fetch_array($airnamesql)) 
      { 
       $airport[] = $airnameresult['airportname']; 
      } 
      $city[] = $citysearchresult['cityname']; 
     } 




     echo json_encode($city); 

    } 

Основания имеет две таблицы citycode и airports. Когда пользователь пишет название города, нужно, чтобы показать название города и под название города шоу названия аэропорта, как здесь

http://joxi.ru/krD8oY1u0Nb0kr

Я не могу сделать это с json_encode.

какие-либо идеи, кто-нибудь может мне помочь

ответ

0

Оптимизированный быть только один запрос:

if (isset($_GET['term'])) { 
     $city = array(); 
     $citysearchsql = mysqli_query(db(),"SELECT a.airportname, c.cityname FROM citycode c INNER JOIN airports a ON c.citycode = a.citycode WHERE c.cityname LIKE '%".$_GET['term']."%' ORDER BY c.citycode ASC"); 
     while($citysearchresult = mysqli_fetch_array($citysearchsql)) 
     { 
      if (!in_array($citysearchresult['cityname'], $city)) { 
       $city[] = $citysearchresult['cityname']; 
      } 
      $city[] = $citysearchresult['airportname']; 
     } 
     echo json_encode($city); 
} 
+0

Благодарим Вас за решение работают, но мне нужно, чтобы стилизовать его как-то, как здесь: http://joxi.ru/krD8oY1u0Nb0kr Я уже пытался использовать HTML-теги, например, & nbsp, но он не работает. – Pokrowsky

0

Да, вы можете ... просто объединить таблицы

echo json_encode(array_merge($city, $airport)); 
2

Получить все необходимые элементы массив, то вы можете использовать свои собственные форматы данных в интерфейсе и дисплеях, просто переопределив фокус по умолчанию и выберите действия.

$("#autocomplete").autocomplete() 
.data("autocomplete")._renderItem = function(ul, item) { 
    return $("<li></li>") 
     .data("item.autocomplete", item) 
     .append(item.label) 
     .appendTo(ul); 
}; 

Check this link for demo example