Newsgroup: it.comp.www.php
Titolo: aggiornamento database in realtime

Salve a tutti! ho un nuovo problema (tosto mi sa, questa volta..):
nella intranet della mia azienda ho creato degli script in PHP che mi
presentano una pagina di modifica di articoli suddivisa in 3 frames
orizzontali; il primo contiene la chiave di ricerca;
il secondo contiene la lista dei risultati;il terzo mi funge da barra di
stato e mi permette di lanciare codice javascript che creo  mediante PHP. i
risultati del secondo frame sono in una tabella che si può modificare (non è
altro che una grossa form con, poniamo, una colonna di textfield per i
codici articolo trovati, una colonna per le descrizioni, i settori
merceologici e così via)
tutto il discorso serve per permette la modifica anagrafica degli articoli;
solo che a differenza di quanto avviene normalmente, appena modifico il
valore di uno dei text field
c'è una routine javascript che mi lancia uno script PHP contenente una query
di aggiornamento del database.
il problema mio è il seguente:
la query ci mette un po' di tempo ad essere eseguita (il browser deve
collegarsi, fare la richiesta, il server deve eseguire lo script ecc.) Se
l'operatore mi modifica più campi alla volta velocemente, il  server riesce
ad eseguire più script o si rischia che l'esecuzione dello script corrente
venga interrotta al sopraggiungere della nuova richiesta, o addirittura che
il browser non faccia tempo a collegarsi e a spedire la richiesta al server?
se si, come posso bloccare la digitazione da parte dell'utente finchè:
1- il browser si connetta al server;
2- il server interpreti la richiesta;
3- il server esegua con successo lo script
4- il browser riceva dal server il risultato HTML dello script confermante
l'avvenuta modifica?
qualcuno ha delle soluzioni, o delle idee alternative?
grazie a tutti in anticipo!!
--
<+#DarKStaR#+>

 se si, come posso bloccare la digitazione da parte dell'utente finchč:


 Perchè generare un'enorme form? E' proprio necessario?


Per un lavoro similare ho operato in questo modo 
1) l'utente crea una lista di manutenzione filtrando i dati in base ad
un certo criterio.
2) nella visualizzazione della lista (table) inserisco dei link agli
script di manutenzione
3) lo script di manutenzione fa il lavoro che deve fare "in silenzio",
quindi con un location (....) torna alla lista di manutenzione
es. una riga della lista :
<TR> <TD>ITALIA</td> <TD>ABCDEFGHI</TD>
   <TD><A HREF=cdeletebuste.php?id=503>Elimina</A>.......etc. etc.
lo script cdeletebuste.php
effettua il lavoro e invia al browser solo gli eventuali messaggi di
errore, altrimenti , in fondo con 
  header ("Location: 
http://kemica.iis/php/cmanut.php
"); 
torna alla pagina di manutenzione
spero di esserti stato utile
ciao
 

il browser non faccia tempo a collegarsi e a spedire la richiesta al server?
Quest'ultima cosa dipende dal browser. Comunque, io risolsi usando un
FastCGI. Lo script richiesto mandava solo una roba del tipo
	?DB=prezzi&TBL=parti&OID=1828737&FLD=prezzo&VAL=19900&CHK=df04e7bc
e ritornava un PNG di 1x1 pixels :-)
Il FastCGI poi si preoccupava di accodare le varie richieste, anzi mi
ricordo che in seguito aggiunsi il "coalescing" - e cioe' se in stack
avevo
	UPDATE prezzi.parti SET prezzo=19900 WHERE oid=1828737;
	UPDATE prezzi.parti SET prezzo=20000 WHERE oid=1828737;
facevo saltare la prima query, se avevo
	UPDATE prezzi.parti SET prezzo=19900 WHERE oid=1828737;
	UPDATE prezzi.parti SET descrizione='Pippo' WHERE oid=1828737;
trasformavo in ... SET prezzo=19900, descrizione='Pippo' WHERE ..., e
se avevo 
	UPDATE prezzi.parti SET prezzo=19900 WHERE oid=1828737;
	UPDATE prezzi.parti SET prezzo=20000 WHERE oid=1828738;
avevo scoperto che si guadagnava un 40% di tempo (PostgreSQL) dando
	UPDATE parti SET prezzo = CASE 
		WHEN oid=1828737 THEN 19900
		WHEN oid=1828738 THEN 20000
		...
	END WHERE oid IN ( 
		1828737, 
		1828738,
		...
	);
Leonardo
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.