Ajax + PHP + MySQL Suggest

0

Witam.

Mam problem z Suggest'em w ajax'ie
Nie wiem czemu ale nie chce działać, a mianowicie program tylko na niektóre litery ale nie wyświetla wyników z bazy. Firebug po wpisaniu literki "f" zwraca "funkfunkcjeempty" (funk i funkcje to są wartości z bazy) a suggest wyświetla wartości "fu" oraz "kfu". Gdy natomiast wpiszę inną literę to firebug wyświetla "empty" a suggest nic.

Korzystam z VertrigoServ.

Proszę o pomoc.
Pozdrawiam!

0

Prostujemy:

$zapytanie = "select title from suggest where title LIKE '%$search%' LIMIT 10";

Nie zapisuj zmiennych niejawnie w stringu. Tu nawet nie chodzi o optymalizowanie jakiekolwiek, w takim zapisie gdzie wszystko jest wrzucone do jednego wora łatwo się pogubić. Koloryzatory składni mają problemy z kolorowaniem takich zmiennych no i najczęściej jest to jakaś furtka XSS.

$zapytanie = 'select title from suggest where title LIKE \'%' . $search . '%\' LIMIT 10';

Dwa:
Ty jesteś świadom tego co robisz? W skrypcie suggest.js masz:

var str = text.responseText.split("n");

Przecież to jest splitowanie według literki "n", tym samym wywalając ją ze stringa. Użyj JSON.

//...
$zapytanie = "select title from suggest where title LIKE '%$search%' LIMIT 10";
        $wynik = $db->query($zapytanie);
        $ile_znalezionych = $wynik->num_rows;

        //tworzymy tablicę $wyniki
        $wyniki = array();
       
        for ($i=0; $i <$ile_znalezionych; $i++)
                {
                                $wiersz = $wynik->fetch_assoc();
                                $wyniki[] = (string)$wiersz['title']; //zapisujemy wynik do tablicy
                }
                //$str .= "empty"; - tego nie potrzebujemy

        echo json_encode($wyniki); // http://php.net/json_encode - konwertujemy na format rozumiany przez JavaScript żeby łatwiej tego użyć.
}    
//...

I potem tylko w suggest.js:

response = eval(text.responseText); //ewaluujemy kod, jeśli chcesz wiedzieć dokładnie dlaczego wykonujemy wynik przeczytaj czym jest JSON, ważne.

I "response" stanie się JavaScriptową tablicą dzięki użyciu konwersji wyniku do JSON w PHP. Resztę kodu (wybieranie danych z tej tablicy) napisz sam :)

Trzy: Znak wieloznaczności (%) na samym początku LIKE to zło! Nie zoptymalizuje tego żaden indeks, przez co za każdym wyszukiwaniem będzie leciała pętla po wszystkich wynikach. To bardzo nieoptymalne, lepiej zrezygnować z podpowiadania między wyrazami na rzecz dopowiadania po prostu końcówki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1