Select und Input vereinigen

Sasser

Erfahrenes Mitglied
Hallo Leute!

Ich füge zur Zeit alle User aus einer Datenbank über:

PHP:
$result = mysql_query("Select * FROM user WHERE user != '$user' ORDER BY user", $db);
while($row=mysql_fetch_assoc($result))
{
echo "<option value='$row[user]'>$row[user]
}

in ein Selectfeld ein. Nun habe ich schon öfters gesehen, dass man den Namen in ein Inpufeld einträgt und bei Treffern in der Datenbank aus dem Inputfeld eine Art Pulldown wird!

Wie kann man sowas realisieren, dass man nicht alle User abruft, sondern nur nach Eingabe jedes Buchstabens die Suche immer weiter eingrenzt? Ich weiss leider nicht mehr wo ich das gesehen habe!?

Grund ist einfach nur, dass wenn man 2000 User in der Datenbank hat und dort einen User in dem Pulldown sucht dass ersten lange Ladezeiten hat und zweitens man lange suchen kann.
 
Eh Du nun wieder zu völlig überzogenen Frameworks greifst , ich kann sie eh nicht leiden müsstest Dir nur selber überlegen was man brauch und wenn Du damit durch bist, bist wieder ein Stückchen schlauer.

1. Eingabe Feld
2. Ajax Request an den Server senden
3. wäre es unsinnig bei jeder Eingabe einen neuen Request zu senden , sondern einen Request zu senden und dann die Rückgabe Werte in einen Puffer abzulegen.

Meine Vorgehensweise war so:

Inputfeld bekommt einen Event Handler, wenn die Länge der Eingabe >= 3 (größer für schnelltipper) sendet man einmalig einen AjaxRequest los mit der Eingabe , ich selber habe nur die ersten 3 zeichen gesendet immer.

Damit es nicht erneut gesendet wird musst lediglich prüfen ob bereits eine Ergebnissmenge vorliegt oder ein Request eben läuft.

Die gesammte Ergebnissmenge habe ich mir im JSON Format ausliefern lassen und in einen Array abgelegt der 1. Puffer.

Geben wir nun einen weiteren Buchstaben also den 4. im optimalsten Fall legen wir uns einen 2. Puffer an. In diesen Puffer speichern wir uns alle Treffer die im ersten Buffer sind und geben diese dann aus.

Nächster Schritt wäre das man bei weiteren Eingaben immer nur noch den 2. Puffer durchsucht da dieser wesentlich kürzer wird mit der Zeit und diesen halt dauernd aktualisiert.

Sollte man einen Schritt zurück gehen muss man da allerdings wieder den 1. Puffer durchsuchen.

Geht die Eingabe Länge wieder auf 2 zurück musst nur noch die Puffer alle löschen und bei einer erneuten Eingabe >= 3 einen erneuten Request senden.

Dann wurde die Ausgabe Liste aufgebaut und angezeigt.

Das wäre so die Grundstruktur einer Autosuggest und das wird wohl wesentlich kleiner als das Scriptaculous ;).
 
Zuletzt bearbeitet:
Ist mir nen bissel zu aufwändig!

Ich glaube ich belasse es dabei, dass man dann in dem Inputfeld einen User aussuchen kann! Habt ihr eine Alternative für mich?
 
Na die Alternative zum nicht selber machen ist schon das Autocomplete von Scriptaculous bzw google mal nach Autosuggest , Autocomplete bekommst auch einige Treffer.
 

Neue Beiträge

Zurück