Sto impazzendo per una chat.
In pratica ho tre frames: il frame inferiore invia il testo del messaggio e lo inserisce nel database; il frame centrale, nascosto, si aggiorna ogni 8 secondi recuperando tutti i messaggi con ID maggiore dell'ultimo ID recuperato la volta precedente (memorizzato in una variabile di sessione) e trascrivendoli con document.write nel frame superiore.


Problema n° 1: Volendo simulare una chat affollattissima, ho fatto una prova da sforzo della chat, facendo si che la pagina di invio messaggi inviasse messaggi in continuazione, a velocità assai maggiore di quella che potrebbe fare anche uno smanettone... e la chat impazzisce, nel senso che mi riscrive più volte le stesse righe, già richiamate
In pratica è come se spesso non tenesse conto della riassegnazione della variabile dell'ultimo ID trascritto.
Posso ovviare alla cosa in qualche maniera?

Problema n° 2: Sostituendo innerhtml al posto di document.write, è come se l'avanzamento della chat scattasse, in particolare mi sembra che ricarichi ogni volta le immagini al lato della riga. Che faccio?

Posto la parte essenziale del codice, togliendo gli elementi accessori che possono distrarre dal problema vero e proprio:

Frame centrale:

Codice PHP:
<?
session_start
();
if (isset(
$_SESSION['username'])) {

//connessione al database
include('config.php');


// legge le righe dalla chat 
$query "SELECT * FROM chat WHERE ID > '".$_SESSION['lastchat']."'";

$maxid=mysql_query("SELECT max(ID) FROM chat"); 
$_SESSION['lastchat']=mysql_result($maxid00); 

$risultato mysql_query($query);


while (
$riga mysql_fetch_assoc($risultato)) {

$riga['Testo']=htmlentities($riga['Testo']);

if (
$riga["Tipo"]==0)    {            

$format="<FONT FACE='Verdana, Arial' COLOR='#606060' SIZE=1>[size="1"]".date("H:i:s",$riga["Ora"])."[/size]</FONT> [img]".$phpbb_root_path.$riga["ImgUno"]."[/img] [B]<FONT SIZE=2 color='#000000'> <span onclick='javascript:parent.middle.invio.msg.value=&quot;@".$riga["Mittente"]."@&quot;;parent.middle.invio.msg.focus();';>".$riga["Mittente"]."</span> [img]".$phpbb_root_path.$riga["ImgDue"]."[/img]</FONT>[/B]<FONT SIZE=2 color='#000000'>     ".$riga["Testo"]." </FONT>
"
;
   }

elseif (
$riga["Tipo"]==1)    {            

$format="<FONT FACE='Verdana, Arial' SIZE=1 COLOR='#606060'>[size="1"]".date("H:i:s",$riga["Ora"])."[/size]</FONT> [B]<FONT COLOR='#FF6500'>[size="1"]".$riga["Mittente"]." ".$riga["Testo"]."[/size] </FONT> [/B]
"
;

   }


//accoda la riga da scrivere in chat e chiude il ciclo while
$immetti=$immetti.$riga['ID']." ".$format."\\n"


$immetti=$riga['ID']." ".$format

$immetti="<div>".$immetti."</div>";

}  

if (isset(
$immetti))  {
echo 
" <script> parent.sopra.document.write("."\"".$immetti."\"".");";
echo 
'parent.sopra.scrollTo(0, parent.sopra.document.height ? parent.sopra.document.height : parent.sopra.document.body.scrollHeight) </script>';

}  

/* nel caso dell'innerhtml uso questo al posto del document.write:
echo " <script> parent.sopra.document.body.innerHTML+="."\"".$immetti."\"".";";
*/

}


?>