Независимо от способа реализации сценарий приложения с < автодополнения на стороне сервера самый прямолинейный - < ставляет собой единственный поток исполнения, выполняю! начала и до конца. Он не содержит ни функций, ни методов, внимание, что поскольку речь идет о странице РНР, весь мый в этом разделе программный код должен заключаться в (<?php ... ?>).
С самого начала сценарий устанавливает тип содержимого вь данных как text/plain, указывая тем самым, что это будет текстовый файл, который не должен интерпретироваться кажзвое. Кодировка символов может быть и другой, но она должна быть совместима с Unicode (скажем, UTF-8), т. к. любые символы Unicode считаются допустимыми в JavaScript. Следующая строка определяет [ содержимого выходных данных:
header( "Content-Type:- text/plain; charset=UTF-8");
Далее подключается библиотека JSON-PHP и создается новый экземп¬ляр класса JSON:
Krequtre^onceC"JSON php"), Kt$0JSQN = new JSONO,
Когда данные передаются сценарию РНР, для их извлечения обычно применяются массивы $_GET, $_P0ST или $_REQUEST. Однако в данном случае данные передаются не в традиционной форме имя/значение, а в формате JSON, не поддерживаемом РНР. Поэтому приходится из¬влечь тело запроса и преобразовать его вручную. Тело любого запроса в РНР доступно через переменную $HTTP_RAW_POST_DATA, содержащую оригинальную строку данных, переданную методом POST. Строка JSON не проходила операцию кодирования URL, поэтому ее сразу же можно передать методу decode(), чтобы воссоздать объект oData:
SoOata = $oJS0N->decode($HTTP RAW POST DATA);
Кроме всего прочего, нам потребуется массив для хранения подсказок:
l^-SaSuggestions = arrayO;
Если в базе данных не отыщется ни одной подсказки, то клиенту будет передан пустой массив ([ ]).
Прежде чем обращаться к базе данных, необходимо убедиться, что в текстовом поле ввода действительно содержится некоторый текст. Дело в том, что подсказки запрашиваются даже тогда, когда пользова¬тель нажимает клавишу Delete или Backspace, поэтому в результате оче¬редного нажатия на одну из этих клавиш поле ввода вполне может опустеть. Поэтому сначала необходимо удостовериться, что длина тек¬ста, полученного сценарием, больше 0. Если это так, то можно дви¬гаться дальше и выполнить запрос к базе данных.
Строка запроса к базе данных строится на основе данных, полученных от клиента. Имя таблицы, значение для оператора LIKE и количество результатов встраиваются в текст SQL-запроса. Следующий фрагмент кода открывает соединение с базой данных, исполняет запрос и пере¬носит результаты запроса в массив SaSuggestions:
if (strlen($oData->text) > 0) { // создать строку SQL-запроса
SsQuery = "Select Name from ".$oData->requesting. " where Name like "'. $oData->text. "%' order by Name ASC limit 0,".$oData->limit;
// открыть соединение с базой данных,
$oLink = mysql_connect($sDBServer,$sDBUsername,$sDBPassword); @roysql_select_db($sDBName) or die(
"Невозможно открыть соединение с базой да
if($oResult = mysql_query($sOuery)) {
while ($aValues - mysql_fetch_array($oResult,MYSQL_ASSOC)) { array_push($aSuggestions, $aValues['Name']);
mysql_free_result($oResult);
mysql_close($oLink); . -
В этом фрагменте вам все знакомо, поскольку здесь применен тот мый алгоритм доступа к базе данных MySQL, с которым вы уже чались ранее в этой книге. (Вы должны записать корректные зна в переменные $sDBServer, SsDBUsername и $sDBPassword, отражающие метры доступа к вашей базе данных.) Единственное новшество з это сохранение результатов запроса в массиве, что потом облегчит образование данных в строку формата JSON для передачи их кли
Собственно преобразование массива в формат JSON и передача клиенту выполняются в самой последней строке сценария:
echo($oJSON->encode($aSuggestions)); Теперь клиенту осталось только корректно разобрать код JSON.