Newsgroup: it.comp.www.php
Titolo: estrarre dati da un db e visualizzarli senza ricaricare tutta la pagina

buongiorno a tutti.
sto lavorando ad un progetto per costruire distinte che vanno nei
libretti uso e manutenzione dell'azienda in cui lavoro.
oggi si lavora con word, pero' anche se per anni tutto e' andato bene
oggi comincia a dare problemi di flessibilita' e comodita'; inoltre
avrei piacere che i clienti registrati ed i rivenditori potessero
consultare online gli esplosi e le liste dei componenti, per cui sto
esaminando se ci sia un modo per spostare tutto il sistema su web.
avrei bisogno di realizzare alcune pagine che funzionino in questo
modo:
- l'utente scrive un codice in una casella (input type=text)
- quando lascia la casella del codice, la descrizione di quel codice
viene scritta automaticamente nella casella a fianco.
ad esempio l'utente digita "10501" e quando preme <tab> il sistema
scrive "Flangia" nella casella a fianco.
i codici disponibili sono un'enormita' --oltre 15.000-- e le
descrizioni sono in 7 lingue --presto saranno 8--, per cui la
possibilita' di inglobare nella pagina tutte le combinazioni
codice-descrizione-lingua e' da escludere.
in un caso simile con poche voci --qualche decina--, avevo usato delle
caselle a discesa in cui selezionando una voce compariva una stringa
in un'altra casella di testo, ma con la quantita' di dati che ho in
quest'occasione il sistema non sarebbe funzionale.
voglio evitare che ad ogni "compilazione" di una descrizione la pagina
debba essere interamente ricaricata perche':
- per l'utente che ci sta lavorando e' spiacevole --perde tempo e se
si e' sbagliato col codice ne perde ancora di piu'--
- crea un sacco di traffico in rete
- carica inutilmente il server
- avverrebbe troppe volte --alcune distinte contengono anche 60/70
parti--.
la mia idea era di utilizzare l'evento che segnala l'uscita dalla text
box per chiamare una funzione in javascript che fa il lavoro, pero'
non so come implementare questa funzione.
avevo trovato in rete un demo di come, utilizzando un inline frame,
uno potesse aggiornare una parte di una pagina web senza ricaricarla
tutta, quindi mi era venuto in mente di utilizzare questo sistema.
pero' se ho, per ipotesi, 80 caselle per il codice, otterrei 80 inline
frame. la cosa appesantirebbe in modo indecente il browser ed il
sistema?
un'alternativa potrebbe essere usare un solo inline frame "di lavoro",
nel quale carico una pagina scritta in php che, con 2 istruzioni
javascript, mi sbatte la descrizione estratta dal database in una
textbox nella pagina principale: potrebbe funzionare?
prima di spendere un tot di ore su questa cosa volevo raccogliere
qualche parere e qualche idea, perche' magari non ho pensato alla
soluzione piu' semplice per il mio problema.
grazie in anticipo.
-- 
Gianni Rondinini
Icem s.r.l. - 
http://www.icem.it
Tel: 
+39 0545 78036
Fax: 
+39 0545 78727


non hai ancora ben compreso la programmazione web, in particolare la 
differenza fondamentale tra client side e server side.
L'unico modo che c'è per fare quello che dici, se vuoi eliminare il traffico 
in rete, è un applicativo stand alone, che dovrai realizzare e consegnare ai 
clienti.

 consegnare ai clienti.
non credo  che il suo problema sia veramente il traffico in rete (soprattutto in rete locale).
senza preoccuparsi del traffico si puo' fare senza dover fare niente di stand alone.
Poi sul fatto che fare qualcosa di misto o farlo solo in php ci siano notevoli 
differenze di complessita' e quindi di tempi di sviluppo posso solo essere d'accordo.

un'alternativa potrebbe essere usare un solo inline frame "di lavoro", [...]
La soluzione piu' semplice e' di usare XML HTTP Request Object da
Javascript per "leggere" i dati ritornati dal tuo script PHP e poi
inserirli nella tua pagina HTML.
Alcuni link con delle informazioni:
http://jibbering.com/2002/4/httprequest.html
http://kb.mozillazine.org/Dev_:_Extensions_:_Example_Code_:_Using_XMLHttpRequest
http://www.phppatterns.com/index.php/article/articleview/82/1/2/
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjxmlhttprequest.asp
'bye

  XML HTTP Request Object
da quando esiste ?
non conoscevo questo oggetto e mi sembra molto interessante... 
grazie

parti--.
Anche usando XML HTTP Request object, resta il problema. 

grazie
Prego.

differenza fondamentale tra client side e server side.
l'ho capito perfettamente, solo che sto cercando un'escamotage per
cambiare un pochino il modello.
un'applicazione da distribuire e' fuori concorso perche' richiederebbe
troppo codice --il motore sarebbe circa lo stesso pero' usando il web
mi risparmio tutta l'interfaccia utente--.
sono arrivato ad una soluzione che concettualmente mi piace molto,
anche se rischia di farsi un po' incasinata da implementare:
- nella pagina "principale" scrivo il codice nella mia textbox; questa
pagina include un iframe "di lavoro"
- quando esco lancio una funzione javascript che carica nell'iframe
una pagina php che estrae la descrizione che mi interessa e, anziche'
visualizzarla al suo interno, chiama una funzione javascript che
scrive in "paginaprincipale.textbox" (modo sbagliato di indicare la
text box, ma era per capirci).
cosi' facendo ho il minimo traffico in rete: gira, di fatto, un
pochino di texto per ogni descrizione. se ad ogni digitazione del
codice dovessi ricaricare tutta la pagina rischierei di trasferire 55
codici, 55 quantita', 55 descrizioni, 55 posizioni (numero ordinale
all'interno della distinta), 220 textbox, tutto il css e via dicendo;
inoltre i tempi morti per l'utente sarebbero molto alti. mentre uno
"aspetta" che arrivi la descrizione, vede comunque il resto della
distinta, puo' inserire la quantita' e via dicendo. alla fine della
fiera, probabilmente, i tempi si assomigliano, pero' visivamente per
l'utente e' differente.
saluti.


differenze di complessita' e quindi di tempi di sviluppo posso solo essere d'accordo.
lo sviluppo in php o stand alone e' sicuramente differente, ma non
sono sicuro che a farlo in php ci voglia piu' tempo. anzi, devo dire
che da quando ho iniziato a fare le cose in php ci metto anche meno di
quando facevo tutto in vb+ado+odbc.
ringrazio anche te per la risposta.
saluti.


La soluzione piu' semplice e' di usare XML HTTP Request Object da
ottimo: approfondisco subito.
ti ringrazio di cuore.
saluti.


cavolo ho fatto un progetto... suddividendo l'interfaccia  in frame con dei 
frame "nascosti" per caricare le cose e passare i dati via post al php.
facendo scrivere al php cose del genere:
[...]
<script>
<!--
function Init()
{
    InsUnit    (1,'pippo',1,1);
    InsUnit    (2,'pippo',2,1);
        [...]
    InsCliente (7,'pippo',"","",15);
        [...]
    InsProdotto(27,'pippo',"","",24);
        [...]
    InsCommessa(30,'pippo','pippo',9);
        [...]
[...]
:-) non si finisce mai, appena ci si distrae sfugge qualche cosa...

 ringrazio anche te per la risposta.
e di che :-)


Appunto, è solo una questione "visiva".
Se cercavi solo una soluzione visiva, bastava evidenziarlo chiaramente nel 
tuo primo post. 

la seconda e' sicuramente piu laboriosa...
ah, scusa :)
beh, tutto in php non saprei come farlo. ovvero, lo saprei ma ad ogni
"giro" dovrei ricaricare tutta la pagina. con javascript mi pare di
riuscire a scorporare le cose.
domattina vedo un po' che ottengo: se in 30 minuti arrivo a qualche
cosa di vagamente funzionante procedo, altrimenti pazienza :)


Se cercavi solo una soluzione visiva, bastava evidenziarlo chiaramente nel 
io immagino che la cosa possa essere simile come tempi di risposta, ma
non lo so. sulla carta ricevere solo una stringa e linkare solo una
pagina di qualche centinaio di bytes e' differente dal ricaricare
un'immagine che forse verra' sui 20kbyte --compresi css, tabella,
campi del form e via dicendo--. *forse* la differenza non sara'
percettibile, ma le possibilita' ci sono anche che lo sia. e non di
poco.
uno se sceglie di perdere 2 minuti per il caffe' lo fa per scelta
propria e non e' un problema. pero' aspettare qualche secondo per una
pagina che tarda a ricaricarsi perche' probabilmente la lista dei
codici inseriti fino a quel momento potrebbe essere di 70 voci e'


 saluti.
L'architettura client-server significa attesa in qualche modo e traffico di 
rete.
Che puoi essere poco (lan) oppure (relativamente) maggiore (internet).
La puoi ottimizzare come vuoi, ma non puoi eliminarla.
Se vuoi evitare l'attesa, non ti resta che il sistema stand alone. 

ho risolto nel modo che avevo in testa e sul quale abbiamo ragionato e
sono contento del risultato: tempi di risposta molto contenuti e pochi
dati che girano per la rete --e quindi risposta veloce anche su
connessioni 56k o isdn 1 canale--.
sfortunatamente, anche se ho la lan a 100mbit e se a casa mi hanno
finalmente portato una adsl, connessioni ad alta velocita' non sono
disponibili dappertutto --e questa soluzione genera, per ogni
richiesta, traffico dell'ordine delle centinaia di bytes--.
l'idea e' questa:
- una serie di caselle di testo: sono input type=text. sull'onblur
chiamo una funzione javascript
- la funzione di cui sopra che "vede" quale casella codice sia stata
compilata e in un iframe carica una pagina php passandole il codice
che ho scritto nella casella di testo
- la pagina php ha un output vuoto nell'iframe, ma scrive nella
corrispondente casella descrizione della pagina contenitore i dati
estratti dal db.
pulito, lineare e semplice. pero' meno semplice di quanto mi
aspettassi, da implementare. l'importante e' che sia funzionale quanto
speravo. ora bisogna "solo" ripulire il codice e farlo andare bene
anche con internet exploder --con firefox va alla grande, ma ie si
arrabbia a causa del dom differente--.
se a qualcuno interessa posso pubblicare quanto ho scritto.
grazie per le idee ed i suggerimenti.
buona giornata.
