Ciao ho un problem con la mia chat, a volte inviato il messaggio esso non compare nella pagina e quindi sia a me che anche agli altri siamo costretti a riscrivere il messaggio.
Alcuni utenti del forum mi hanno indicato una soluzione di nome flock() che avrebbe fatto in modo che un messaggio non inviato fosse ritornato sulla text area senza dovere ridigitare tutto il messaggio, ma purtroppo questo non avviene.
Altra cosa si pensava che il messaggio non inviato avesse come causa che due utenti scrivono e inviano nello stesso momento perciò la chat non avendo database e basandosi su foglio di testo non riuscisse a immagazzinare i messaggi che quindi vengono persi.
Io voglio sapere se c'è un modo per ovviare a questo problema: inoltre vi posto i due codici delle due pagine chat e insert che sono quelli che dovrebbero essere i file da modificare, spernado in una risposta:
ecco i codici:
chat.php
Codice PHP:
<html>
<head>
<title>Happy Chat</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language = "JavaScript">
function textCounter(field, countfield, maxlimit) {
if(field.value.length > maxlimit){
field.value = field.value.substring(0, maxlimit);
}
else{
countfield.value = maxlimit - field.value.length;
}
}
</script>
<script language="javascript">
function aggiungi(y)
{
espressione=document.form_ins.messaggio.value;
new_espressione=espressione + y;
document.form_ins.messaggio.value=new_espressione;
}
</script>
<style>
.stile {
background:#FFFFFF;
font-family:verdana;
font-size:8pt;
SCROLLBAR-BASE-COLOR: #0099CC;
SCROLLBAR-ARROW-COLOR: #FFFFFF;
}
</style>
</head>
<body bgcolor="#FBBEAA">
<?
include("config.php");
$nick=$_GET['nick'];
$nick=strtolower($nick);
$nick=stripslashes($nick);
$password=$_GET['password'];
$password=strtolower($password);
$password_cr=crypt($password,$nick);
$password_cr=str_replace("|","*",$password_cr);
$messaggio=$_GET['messaggio']; //recupera il messaggio in caso di errore flock
if (!(file_exists($file_reg)))
{fopen($file_reg,"w");}
$utente=$nick."|".$password;
$utente_ok=0;
$ut_regist=file($file_reg);
$dim_reg=count($ut_regist);
for ($i=0;$i<$dim_reg;$i++)
{
$dati_ut=explode("|",$ut_regist[$i]);
$nick_ut=$dati_ut[0];
$pass_ut=$dati_ut[1];
if (($nick==$nick_ut) & ($password_cr==$pass_ut)) $utente_ok=1;
}
if ($utente_ok==1)
{
if (!(file_exists($file_online)))
{fopen($file_online,"w");}
$dim_file=filesize($file_online);
$dim_max=14000; // Dimensione in bytes massima per ricreare il file online
if ($dim_file>$dim_max)
fopen($file_online,"w");
$ar_orario=getdate();
$ora=$ar_orario['hours'];
$minuti=$ar_orario['minutes'];
$secondi=$ar_orario['seconds'];
if (strlen($minuti)==1) $minuti="0".$minuti;
if (strlen($secondi)==1) $secondi="0".$secondi;
$data=date("d/m/Y");
$orario=$ora.":".$minuti.":".$secondi;
$utente=$nick."|".$data."|".$orario."\n";
$ins_online=fopen($file_online,"a+");
fputs($ins_online,$utente);
fclose($ins_online);
}
else
{
echo "<center>[b]E' STATO INSERITO
UN NICK O UNA PASSWORD
NON CORRETTI,
OPPURE NON SEI
ANCORA REGISTRATO.[/b]
";
echo "<a href=\"javascript:history.back();\">TORNA AL LOGIN</a></center>";
exit;
}
?>
<table width="177" align="center" bordercolor="#000000" bgcolor="#E7E9FA" style="border:1px solid;">
<tr>
<td width="177" height="21" colspan="6" bgcolor="#BBC2F2"><div align="center">
<div align="center"><iframe src="http://www.globalmeteo.altervista.org/chat/messaggi.php" width="177" height="105" scrolling="yes"></iframe>
</td></tr></table>
<div align="center">
<table width="177" align="center" bordercolor="#000000" bgcolor="#E7E9FA" style="border:1px solid;">
<tr>
<td width="177" height="21" bgcolor="#BBC2F2"><div align="center"><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">[b]PERSONE
ON-LINE [/b]</font></div></td>
</tr>
<tr>
<td height="21"><iframe width="177" height="45" src="online.php" scrolling="no"></iframe></td>
</tr>
</table>
<form method="GET" action="insert.php" name="form_ins" >
<table width="185" align="center" bordercolor="#000000" bgcolor="#E7E9FA" style="border:1px solid;">
<tr>
<td width="185" height="21" colspan="6" bgcolor="#BBC2F2"><div align="center"><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">[b]SIMBOLI METEO-SMILES[/b]</font></div></td>
</tr>
<tr><td colspan="4"><div align="center">
<?
if ( empty($_GET['faccina']) ) $faccina = "" ;
else $faccina = $_GET['faccina'] ;
echo "
<select name=\"faccina\" size=\"1\">
<option value=\"[em1]\" ";
if ( $faccina == "[em1]" ) echo " selected" ;
echo ">sereno</option>
<option value=\"[em2]\" ";
if ( $faccina == "[em2]" ) echo " selected" ;
echo ">poco-nuvoloso</option>
<option value=\"[em3]\" ";
if ( $faccina == "[em3]" ) echo " selected" ;
echo ">nuvoloso</option>
<option value=\"[em4]\" ";
if ( $faccina == "[em4]" ) echo " selected" ;
echo ">luna</option>
<option value=\"[em5]\" ";
if ( $faccina == "[em5]" ) echo " selected" ;
echo ">luna-nuvoloso</option>
<option value=\"[em6]\" ";
if ( $faccina == "[em6]" ) echo " selected" ;
echo ">pioggia</option>
<option value=\"[em7]\" ";
if ( $faccina == "[em7]" ) echo " selected" ;
echo ">pioggia-neve</option>
<option value=\"[em8]\" ";
if ( $faccina == "[em8]" ) echo " selected" ;
echo ">temporale</option>
<option value=\"[em11]\" ";
if ( $faccina == "[em11]" ) echo " selected" ;
echo ">temporale-pioggia</option>
<option value=\"[em9]\" ";
if ( $faccina == "[em9]" ) echo " selected" ;
echo ">neve</option>
<option value=\"[em10]\" ";
if ( $faccina == "[em10]" ) echo " selected" ;
echo ">nebbia</option>
<option value=\"[em12]\" ";
if ( $faccina == "[em12]" ) echo " selected" ;
echo ">caldo</option>
<option value=\"[em13]\" ";
if ( $faccina == "[em13]" ) echo " selected" ;
echo ">freddo</option>
<option value=\"[em14]\" ";
if ( $faccina == "[em14]" ) echo " selected" ;
echo ">vento</option>
</select>
";
?> </td>
<td height="21"><div align="center">[img]emoticons/em15.gif[/img]</div></td></tr>
<tr>
<td height="21"><div align="center">[img]emoticons/em16.gif[/img]</div></td>
<td height="21"><div align="center">[img]emoticons/em17.gif[/img]</div></td>
<td height="21"><div align="center">[img]emoticons/em18.gif[/img]</div></td>
<td height="21"><div align="center">[img]emoticons/em19.gif[/img]</div></td>
<td height="21"><div align="center">[img]emoticons/em20.gif[/img]</div></td>
</tr>
</table>
<table width="185" align="center" bordercolor="#000000" bgcolor="#E7E9FA" style="border:1px solid;">
<tr>
<td height="21" bgcolor="#BBC2F2"><div align="center"><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">[b]MESSAGGIO[/b]</font></div></td>
</tr>
<tr>
<td ><form method="GET" action="insert.php" name="form_ins" >
<table width="170" border="0" align="center">
<tr>
<td colspan="2"><div align="center">
<textarea rows="5" onKeyDown="textCounter(this.form.messaggio,this.form.rem,300);" onKeyUp="textCounter(this.form.cjmsg,this.form.rem,300);" cols="18" type="text" name="messaggio"><?php if ($messaggio!="") echo "$messaggio"; ?></textarea>
</div></td>
</tr>
<tr>
<td><div align="right"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Lettere
rimaste:</font></div></td>
<td><div align="center">
<input readonly class="stile" type=text name=rem size=3 maxlength=3 value="300">
</div></td>
</tr>
<tr>
<td height="26" colspan="2"> <div align="center">
<?
echo "<input type=\"hidden\" name=\"nick\" value=\"$nick\">";
echo "<input type=\"hidden\" name=\"password\" value=\"$password\">"
?>
<input type="submit" name="Submit" value="Invia messaggio">
</div></td>
</tr>
</table>
</form></td>
</tr>
</table>
</body>
</html>
insert.php:
Codice PHP:
<html>
<head>
<title>Inserimento del messaggio</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
include("config.php");
$nick=$_GET['nick'];
$password=$_GET['password'];
$messaggio=$_GET['messaggio'];
$messaggio=stripslashes($messaggio);
$messaggio=str_replace("\n"," ",$messaggio);
$commento="[".date("H:i - d/m/Y")."] ".$nick."|".$messaggio."\n";
if ( !empty($_GET['faccina']) ) $commento = $_GET['faccina']." ".$commento ;
$url="chat.php"."?nick=".$nick."&password=".$password;
if ( !empty($_GET['faccina']) ) $url .= "&faccina=".$_GET['faccina'] ;
$url_mess=$url."&messaggio=".$messaggio; //in caso di errore passa anche il messaggio
if (empty($messaggio))
{
Header("Location: $url");
}
else
{
$apri_file=fopen($file_mess,"a+");
if (@flock($apri_file, LOCK_EX)) { //blocco, uso esclusivo in scrittura
fputs($apri_file,$commento);
@flock($apri_file, LOCK_UN); // rilascia il il blocco
} else {
fclose($apri_file);
Header("Location: $url_mess");//torna alla chat portandosi dietro il messaggio
}
fclose($apri_file);
Header("Location: $url");
}
?>
</body>
</html>