Buongiorno a tutti,
Ho da poco scoperto questo sito (e questo forum) e devo ammettere che sta già diventando la mia fonte di conoscenza personale per quanto riguarda i vari linguaggi di programmazione, specialmente l'html e il php, con i quali mi sto cimentando da non molto tempo.
Andando a descrivere il problema, mi è stato chiesto di realizzare una piccola chat in php.
Ce ne sono molte già fatte qui su html.it ma ho deciso di prendere una "base" già costruita e molto "cruda" per poi modificarla a mio piacimento (che è un po' quello che si fa di solito, poi).
La chat di per sè è molto semplice:
- Registrazione e Login utente. (database MySql)
- Pagina principale divisa in 2 iFrame: uno per visualizzare e uno per inserire.
premetto che è funzionante ma vorrei inserire appunto alcuni accorgimenti per migliorarne il funzionamento:
- Togliere l'auto refresh dell' iFrame dove vengono visualizzati i record.
normalmente non lo toglierei ma mi è stato inoltre chiesto di far partire un messaggio acustico quando viene inserito un nuovo record da parte di un utente.
inserendo un oggeto audio tramite il tag <object> ottengo il risultato sperato ma il problema è che devo fare un refresh del frame di visualizzazione perchè altrimenti finchè l'utente non aggiorna la pagina, il messaggio non compare sullo schermo (e quindi neanche il suono), rendendo inutile l'inserimento di questo file audio.
se non è chiaro provo a spiegarmi così:
Gli utenti sono loggati e hanno di fronte la pagina della chat con i 2 iFrame. Uno scrive e quando la pagina fa autorefresh tutti leggono i nuovi messaggi inseriti in quell'arco di tempo.
Se inserisco il segnale acustico lasciando l'autorefresh, ad ogni refresh sentiranno il segnale ma magari nessuno ha scritto nulla e quindi il segnale è inutile. Se tolgo il refresh l'utente deve aggiornare manualmente la pagina e siamo da capo.
Aggiungendo un refresh dopo aver inserito il nuovo record mi permette di sentire il suono sulla mia macchina, ma gli altri dovranno comunque fare refresh.
Spero di essermi spiegato abbastanza bene, insomma, inserisco il codice del frame di visualizzazione e inserimento in db:
chat_visualizza.php
<?
session_start();
include('connessione.php');
?>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="300, chat_visualizza.php">
<link rel="stylesheet" type="text/css" href="css/style.css">
<title>Visualizzazione chat</title>
</head>
<body>
<font face = "verdana" size = "2">
<?
$query = "SELECT * FROM chat ORDER BY data DESC ";
$result = mysql_query($query) or die(mysql_error());
for ($i = 1; $i <30; $i++)
{
$riga = mysql_fetch_array($result);
$nome = stripslashes($riga['nick']);
$mss = stripslashes($riga['messaggio']);
echo ($riga['data']." - "."".$nome."".": ".$mss."
");
}
mysql_close($db);
?>
</font>
</body>
</html>
Già che ci sono, ci sarebbe un'altra cosina che dovrei mettere a posto (anche se secondaria).
chat_salva.php
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<?
echo(date_default_timezone_set("Europe/Paris"));
session_start();
include('connessione.php');
if (!empty ($_POST['azione']) )
{
if (isSet($_POST['azione']) && $_SESSION['nick'] != "")
{
$nome = $_SESSION['nick'];
$attuale = date("Y-m-d H:i:s");
$mss = htmlspecialchars($_POST['azione']);
$query ="INSERT INTO chat SET nick = '$nome', messaggio = '$mss', data = '$attuale' ";
mysql_query($query) or die(mysql_error());
}
}
mysql_close($db);
header("Location: chat_visualizza.php", true);
?>
</body>
</html>
Una volta che l'utente si slogga o chiude il browser, la session decade ma quando torna nel frame di visualizzazione vengono comunque visualizzati gli ultimi x record. C'è un modo per "pulire" il frame e far si che al prosimo login si trovi la chat pulita?
Beh insomma, spero di non essermi dilungato troppo per il primo Topic qui, per qualsiasi chiarimento non esistate ovviamente.
In attesa, vi saluto. Ciao!