Как вызвать исходные данные MySQL для автозаполнения jQuery? - PullRequest
1 голос
/ 20 ноября 2011

Я использую автозаполнение jQuery и хочу иметь отдельный PHP-файл для хранения данных вместо создания переменной (то есть var availableTags = ["Red", "Orange", "Yellow", "Green," Blue"]).

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

Есть идеи?

Javascript:

$(document).ready(function() {

    $( ".autocomplete" ).autocomplete({
            source: "../../db/autocomplete_list.php"
    });

});

autocomplete_list.php

require_once('../includes/connect.php');
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE);

$colors = '[';

$sth = $dbh->query ("SELECT * FROM constants 
                     WHERE category='Colors' 
                     ORDER BY display");

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

    $colors.= '"'.$row[value].'", '; 

}

$colors = rtrim($colors, ', ');

$colors .= ']';

print $colors;

выполнение autocomplete_list.php

["Красный", "Оранжевый", "Желтый""," Зеленый, "Синий"]

РЕДАКТИРОВАТЬ:

Обновил мой файл autocomplete_list.php до следующего.Однако, теперь автозаполнение не отображает мои значения.Если я проверяю ответ в FireBug, он правильно показывает результаты, просто кажется, что они не передаются автозаполнению.

require_once('../includes/connect.php');
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE);

if(isset($_GET['term'])) {
    $mysearchString = $_GET['term'];
}

$sth = $dbh->query("SELECT category, value, display FROM constants 
                    WHERE category = 'COLORS' AND value LIKE '$mysearchString%'
                    ORDER BY display");

while ($row = $sth->fetch ()) { 
    print $row['display']."\n";         
}

Ответы [ 3 ]

1 голос
/ 20 ноября 2011

лучший способ - уменьшить количество возможных вариантов на стороне сервера:

$sth = $dbh->query ("SELECT * FROM constants 
                     WHERE category='Colors' and value like '.".$_GET['term']."%'
                     ORDER BY display");

(с заменой $ _GET ['term'] на строку, проверенную на SQL-инъекции ..)

см .: http://docs.jquery.com/UI/Autocomplete

1 голос
/ 21 ноября 2011

Нашел решение здесь:

http://www.jensbits.com/2010/03/29/jquery-ui-autocomplete-widget-with-php-and-mysql/

require_once('../includes/connect.php');
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE);

$return_arr = array();

if(isset($_GET['term'])) {
    $mysearchString = $_GET['term'];
}

$sth = $dbh->query("SELECT category, value, display FROM constants 
                    WHERE category = 'COLORS' AND value LIKE '$mysearchString%'
                    ORDER BY display");

while ($row = $sth->fetch PDO::FETCH_ASSOC()) { 

     $row_array = $row['display'];

     array_push($return_arr,$row_array);

}

echo json_encode($return_arr);
0 голосов
/ 20 ноября 2011

source правильно ожидать массива значений, а не строки.Попробуйте перенести содержимое файла «autocomplete_list.php» непосредственно в скрипт, что-то вроде этого:

source: <?php include "../../db/autocomplete_list.php"; ?>

Это будет работать.

...