Ciao Manuel
Quello che chiedi e' una cosa poco inerente PHP e fortemente inerente javascript. Non e' una cosa semplicissima da implementare se non l'hai mai fatto: ti do' i paletti entro i quali muoverti. Per fare cio' che chiedi e' necessario utilizzare cio' che oggi va sotto il nome tanto di moda di "AJAX". Sostanzialmente si tratta di:
A) Mentre l'utente digita, provvedere ad inoltrare una richiesta HTTP asincrona verso il server inviando il testo fino a quel momento digitato, utilizzando l'oggetto javascript XMLHttpRequest. Questo oggetto permette di mandare una richiesta HTTP in javascript verso il dominio della pagina nella quale ti trovi; normalmente manderai tale richiesta a una pagina opportuna di tua scelta che provveda ad effettuare delle elaborazioni necessarie e a restituirne i risultati in qualche formato.
B) Decidere un formato per la risposta dello script in questione: normalmente la cosa migliore e' XML oppure un formato testuale semplice, in caso di risultati pochi campi.
C) Implementare in javascript un parser della risposta: in caso di XML hai gia' tutto pronto, mentre per gli altri casi stara' a te implementare cio' che c'e' da implementare per capire la risposta.
D) Via manipolazione del DOM, dovrai visualizzare in qualche modo i dati restituiti o una loro interpretazione.
La tecnica non e' semplicissima perche' richiede la conoscenza di varie teniche: un minimo di HTTP, i problemi dell'oggetto XMLHttpRequest, quasi sempre si passa via XML e in ogni caso bisogna avere una base discreta per sapere come manipolare il DOM, altrimenti non sai come visualizzare il feedback verso l'utente. Peraltro, i singoli componenti sono piuttosto semplici da imparare a usare.
Per quanto riguarda XMLHttpRequest, ci sono fin troppi tutorial in giro: scegline uno a tuo piacimento. L'unico consiglio che mi sento di darti e' di implementare il tutto utilizzando dei timeout piuttosto che un onkeyup/onkeydown semplice, in quanto e' molto facile causare un flooding di richieste. Siccome ad ogni richiesta spesso corrisponde una query SQL piu' o meno complessa, e' consigliabile evitare di fare partire la query in questione troppo spesso. Il caso tipico e' quello in cui l'utente tiene premuto un tasto "per provare", e il server viene bombardato di richieste. Se invece sei scaltro a sufficienza e metti un timeout che fa partire la richiesta al massimo ogni 300ms, 500ms o un valore a tua scelta, riesci a contenere il carico del server entro limiti ragionevoli e noti.