Newsgroup: it.comp.java
Titolo: Autocompletamento Form per inserimento dati

Salve a tutti,
in un sito utilizzo un menu a tendina per inserire un determinato valore
utilizzando la nota sintassi HTML :
<TD>
<SELECT name="select_artista">
<OPTION value=96>Adderley Julian Cannonball</OPTION>
<OPTION value=97>Adderley Nat</OPTION>
</SELECT>
</TD>
dove la form e' costruita dinamicamente andando ad interrogare un database
MySQL.
Il problema e' che il risultato della SELECT, e quindi il numero delle
istanze nella form, supera gia' i cinquecento risultati.
Quello che vorrei realizzare e' quindi una sorta di autocompletamento : se
l'utente scrive "a" automaticamente vengono visualizzati nella form solo e
soltanto i risultati della SELECT che iniziano per A, se ancora scrive "d"
vengono visualizzati solo e soltanto i risultati della SELECT che iniziano
per AD e cosi' via.
Tenendo conto che l'utente dovrebbe scrivere "AD" ma se poi sceglie di
inserire "Adderley Julian Cannonball" nell'insert mysql ci va il value (in
questo caso 96).
Chiedo scusa, ammetto di non conoscere se non minimamente questo linguaggio
ma dato che in PHP, il linguaggio che sto utilizzando per tutta la gestione
del sito, la cosa nn sembra realizzabile,volevo sapere se qualcuno sapeva
rimandarmi ad una soluzione realizzata in java.
Vi ringrazio e, se ho detto una castroneria, chiedo scusa
danilo

 rimandarmi ad una soluzione realizzata in java.
Il problema non e' PHP o java. Il problema sta nel fatto che tu stai 
parlando di una applicazione web.
Sul client gira il browser che richiede le pagine al server sul quale 
gira un'applicazione (in questo caso java) che genera delle pagine HTML 
che vengono inviate al client.
Se ad ogni pressione di un tasto tu richiedessi una nuova pagina al 
server non miglioreresti di certo le prestazioni dell'applicazione (e 
neanche la sua usabilità).
Le soluzioni sono due:
1) diminuisci l'interattività. Invece che ad ogni tasto premuto l'elenco 
viene filtrato solo dopo il click su un pulsante (o almeno dopo che il 
campo a perso il focus, quindi dopo un tab) che non fa altro che 
richiedere una nuova pagina al server.
2) utilizzi del codice javascript per ottenere la tua funzionalità. La 
differenza fra javascript e java e'... Beh, partiamo da cosa hanno in 
comune: il nome e basta. Sono due linguaggi diversi.
Questa soluzione va bene se comunque le dimensioni in gioco non sono 
enormi perché quando generi la pagina devi includere (non 
necessariamente visualizzare) tutti i dati, in modo da permettere al 
javascript di decidere quali visualizzare e quali no.
Se si tratta di svariate migliaia di record diventa un problema.
Javascript viene eseguito dal browser una volta che il server gli invia 
la pagina che invece e' stata creata con java.
Per il javascript ti consiglio di chiedere sul relativo newsgroup 
(it.comp.lang.javascript). Se chiedi qui' a volte qualcuno si offende un 
po' ;-)
Andrea
PS
Tutto il discorso che ho fatto rimane valido se a java sostituisci PHP, 
anche in quel caso il codice PHP viene eseguito solo sul server.

 parlando di una applicazione web.
Andrea,
innanzi tutto grazie.
So, purtoppo, che la pagina cosi' costruita risulterebbe pesante.
Il fatto e' che devo dare la possibilita' di inserire una fra n voci, dove n
e' un numero decisamente grande (quello che sta realizzando e' un database
on line dei dischi jazz) e vorrei che l'utente potesse inserire solo una fra
le voci possibili (immagina come potrebbe venire storpiato il cognome di
Armstrong che pure e' uno dei piu' famosi) anche per rispettare il modello
relazionale del database.
Purtroppo se c'e' da inserire un nuovo disco, devo mostrare tutte le
possibilita', ovvero tutti gli artisti. E nel campo del jazz nn sono pochi.
Quindi o carico in un array tutti gli artisti, o faccio scrivere a manina
all'utente e controllo poi che abbia inserito i dati giusti (ma nel caso di
Niels-Henning Ørsted Pederses la vedo dura...) o trovo una soluzione
alternativa.
Quindi avevo pensato o a Javascript o a Java : io preferisco lavorare solo
server side (ho avuti come utente problemi di compatibilita' di JVM per
applicazioni piuttosto pesanti), ma in PHP la cosa sembra proprio
impossibile (anche per i limiti di configurazione del mio host).
In qualche modo la devo risolvere :-)
grazie
danilo

...


 
Il problema che hai e' se usare un menu a tendina o un campo input.
La soluzione: il menu a tendina non puoi usarlo se eccede un numero 
ragionevole di dati.
Quindi? campo di interrogazione sul database che consente di effettuare 
una ricerca anche sbagliando alcune parti del nome (si dice normalizzare 
un database). Quindi se scrivo Müller o Muller il database mi deve 
restituire tutti e due i nomi. Soluzione sofisticata ma ottimale.

 restituire tutti e due i nomi. Soluzione sofisticata ma ottimale.
Beh, veramente, quando si parla di normalizzazione di un database si
intende ben altro (prima/seconda/terza forma normale, forma nomale di
Boyce-Codd, ecc.).
Al massimo si potrà parlare di ricerca normalizzata o ricerca per
valore normalizzato.
A proposito di ricerche "approssimate" so di strumenti che cercano di
trovare le parole che possono essere pronunciate in modo simile.
Conosco un solo prodotto che utilizza una cosa del genere per
l'anagrafica di un ospedale: mi sa che ha un po' piu' record
dell'elenco degli autori jazz ;-).
Andrea