- Home
- Categorie
- Coding e Sistemistica
- Coding
- Avvisare in caso di arrivo nuovo messaggio
-
La tua prima ipotesi....cioè risultare letto solo quando lo si è letto:)quindi in seguito dopo la lettura effettuare l UPDATE da 0 a 1.
-
Beh e allora no, non posson stare nella stessa pagina.
Lo script che richiama l'alert deve essere presente in ogni pagina navigabile del sito, invece solo nella pagina di visualizzazione del messaggio stesso deve essere presente lo script che aggiorna il valore del campo relativo a quell'id messaggio.
-
Fatto....funziona alla grande:)
Grazie dei consigli;)
[PHP]$cancella="UPDATE messaggi SET letto = '0' WHERE nome_ricevente='".$_SESSION['nickname']."'";
$esegui=@mysql_query("$cancella",$link) or die("Errore query database: " . mysql_error());[/PHP]
Questa è la query che mi sono inserito sulla pagina che visualizza i messaggi e siccome i messaggi degli altri utenti devono esser poter letti anche dagli altri utenti iscritti ho creato 2 pagine uguali leggimessaggi.php però su una ho inserito la query pe rcancellare il valore 0 mentre sull altra no altrimenti avrei compremesso un pò la funzionalità dello script...[PHP]
//Controllo se ci sono nuovi messagi
$sql1="SELECT letto FROM messaggi WHERE nome_ricevente='".$_SESSION['nickname']."' AND letto=1";
$query1=@mysql_query("$sql1",$link) or die("Errore query database: " . mysql_error());//faccio un ciclo while
while ($riga1 = mysql_fetch_array($query1)) {
$str_letto = $riga1['letto'];
if($str_letto == '1')echo "<SCRIPT LANGUAGE="javascript">window.alert("Hai ricevuto 1 nuovo messaggio!Controlla subito i tuoi messaggi!!!"); </script>";}
[/PHP]
Questa invece e la parte relativa all alert che ho inserito nell index del sitoGrazie
-
Magnifico.
Avrei pero' due consigli da darti sulla gestione, perché in questo modo potresti incappare in alcuni problemi:
[php]$cancella="UPDATE messaggi SET letto = '0' WHERE nome_ricevente='".$_SESSION['nickname']."'"; [/php]Facendo in questo modo se l'utente dovesse avere più messaggi non letti nella casella di posta aggiorneresti tutti i messaggi con quel nick come destinatario, invece che solo quello che ha letto.
Io inserirei una chiave primaria (id) auto-increment e lavorerei su questa:
[php]$cancella="UPDATE messaggi SET letto = '0' WHERE id='$id_messaggio'";[/php]Altro problema relativo allo script dell'alert: e se i messaggi sono due o più?
Prova ad utilizzare semplicemente il mysql_num_rows():
[php]//Controllo se ci sono nuovi messagi
$sql1="SELECT letto FROM messaggi WHERE nome_ricevente='".$_SESSION['nickname']."' AND letto=1";
$query1=@mysql_query("$sql1",$link) or die ("Errore query database: " . mysql_error());$row=mysql_num_rows($query1);
if($row != 0)
{
echo "<SCRIPT LANGUAGE="javascript">window.alert("Hai ricevuto 1 nuovo messaggio!Controlla subito i tuoi messaggi!!!"); </script>";
}[/php]Poi potresti implementare tanti altri piccoli accorgimenti, il primo che mi viene in mente:
in questo caso, all'arrivo del messaggio, appena l'utente refresha o cambia pagina gli arriva l'alert. E se non volesse leggere subito i messaggi? Si dovrebbe sorbire ad ogni cambio pagina l'alert?
Questa ovviamente è una scelta gestionale che solo tu puoi prendere.
Nel caso, ad alert inviato, potresti creare un nuovo elemento di sessione per identificare l'utente che ha già ricevuto l'alert, quindi non fare più il controllo ad ogni cambio pagina:
[php]if ($_SESSION['msg'] == 0)
{
//Controllo se ci sono nuovi messagi
$sql1="SELECT letto FROM messaggi WHERE nome_ricevente='".$_SESSION['nickname']."' AND letto=1";
$query1=@mysql_query("$sql1",$link) or die ("Errore query database: " . mysql_error());$row=mysql_num_rows($query1);
if($row != 0)
{
echo "<SCRIPT LANGUAGE="javascript">window.alert("Hai ricevuto 1 nuovo messaggio!Controlla subito i tuoi messaggi!!!"); </script>";
$_SESSION['msg']=1;
}
}[/php]In questo caso, all'atto di definire gli elementi di sessione, come il nickname, imposterai $_SESSION['msg'] = 0.Spero di esserti stato d'aiuto.
-
@Samyorn said:
Magnifico.
Avrei pero' due consigli da darti sulla gestione, perché in questo modo potresti incappare in alcuni problemi:
[php]$cancella="UPDATE messaggi SET letto = '0' WHERE nome_ricevente='".$_SESSION['nickname']."'"; [/php]Facendo in questo modo se l'utente dovesse avere più messaggi non letti nella casella di posta aggiorneresti tutti i messaggi con quel nick come destinatario, invece che solo quello che ha letto.
Io inserirei una chiave primaria (id) auto-increment e lavorerei su questa:
[php]$cancella="UPDATE messaggi SET letto = '0' WHERE id='$id_messaggio'";[/php]Ok...ho inserito un campo id auto increment nel database...
Sarà l orario che mi offusca...comunque come faccio a recuperarmi l id relativo al messaggio che serve a me?
-
Te la estrapoli dalla SELECT, magari la posta in arrivo immagino mostrerà i pvt ordinati per data, il link per leggere il messaggio potrebbe contenere l'id del messaggio stesso che ti permetterà la visualizzazione dello stesso e quindi l'aggiornamento del Database:
[PHP]$sql="SELECT * FROM messaggi WHERE nome_ricevente='".$_SESSION['nickname']."' ORDER BY data";
$query=@mysql_query($sql) or die (mysql_error());while ($array=mysql_fetch_array($query))
{
echo "<a href="visulizzamessaggio.php?id=".$array['id']."">Messaggio da :".$array['mittente']."</a> Ricevuto il ." $array['data']."<br />";
}[/PHP]
Così otterrai la lista ordinata dei pvt. Nella pagina di visualizzazione del messaggio ti recuperi tramite $_GET['id] l'id del messaggio e tramite questa variabile provvedi prima a selezionare il messaggio da leggere e poi ad aggiornare il campo letto.
-
Ok..provo:)
-
@Samyorn said:
Te la estrapoli dalla SELECT, magari la posta in arrivo immagino mostrerà i pvt ordinati per data, il link per leggere il messaggio potrebbe contenere l'id del messaggio stesso che ti permetterà la visualizzazione dello stesso e quindi l'aggiornamento del Database:
[php]$sql="SELECT * FROM messaggi WHERE nome_ricevente='".$_SESSION['nickname']."' ORDER BY data";
$query=@mysql_query($sql) or die (mysql_error());while ($array=mysql_fetch_array($query))
{
echo "<a href="visulizzamessaggio.php?id=".$array['id']."">Messaggio da :".$array['mittente']."</a> Ricevuto il ." $array['data']."<br />";
}[/php]Così otterrai la lista ordinata dei pvt. Nella pagina di visualizzazione del messaggio ti recuperi tramite $_GET['id] l'id del messaggio e tramite questa variabile provvedi prima a selezionare il messaggio da leggere e poi ad aggiornare il campo letto.Ok,ho suddiviso il tutto quindi in due pagine....la prima
postainarrivo.php
[php]
<html>
<head>
<body>
<?
//Apro la sessione e...
session_start();
//verifico che dopo il login io abbia la chiave di sessione ad 1
if($_SESSION['logged']==1){
//se si...//mi connetto al datase
$link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
//seleziono il database
mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());$sql="SELECT id,nome_inviante,nome_ricevente,messaggio,date FROM messaggi WHERE nome_ricevente='".$_SESSION['nickname']."' ORDER BY date";
$query=@mysql_query($sql) or die (mysql_error());while ($array=mysql_fetch_array($query))
{
echo "<a href="letturaposta.php?id=".$array['id']."">Messaggio da :".$array['nome_inviante']."</a> Ricevuto il ".$array['date']."<br />";
}}
?>[/php]e la seconda pagina per la lettura chiamata letturaposta.php
[php]
<html>
<head>
<body>
<?
//Apro la sessione e...
session_start();
//verifico che dopo il login io abbia la chiave di sessione ad 1
if($_SESSION['logged']==1){
//se si...
//verifico se esiste la variabile id
if(isset($_GET['id']) OR $_GET['id'] != ""){
$id=$_GET['id'];
}//mi connetto al datase
$link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
//seleziono il database
mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());$sql="SELECT id,nome_inviante,nome_ricevente,messaggio,date FROM messaggi WHERE id='".$id."' ORDER BY date";
$query=@mysql_query($sql) or die (mysql_error());while ($array=mysql_fetch_array($query))
{
echo "Messaggio da :".$array['nome_inviante']."</a> Ricevuto il ".$array['date']."<br />Testo ".$array['messaggio']." ";
}
//Porto valore a 0 soltanto per l id del messaggio recuperato
$cancella="UPDATE messaggi SET letto = '0' WHERE id='$id'";
$esegui=@mysql_query("$cancella",$link) or die("Errore query database: " . mysql_error());
}
exit;
?>
[/php]Funziona...cioè mi porta a valore 0 soltanto i messaggi che leggo:)Poi nella index del sito in cui c'è l alert ho fatto cosi'
[php]
if ($_SESSION['msg'] == 0)
{
//Controllo se ci sono nuovi messagi
$sql1="SELECT letto FROM messaggi WHERE nome_ricevente='".$_SESSION['nickname']."' AND letto=1";
$query1=@mysql_query("$sql1",$link) or die ("Errore query database: " . mysql_error());$row=mysql_num_rows($query1);
if($row != 0)
{
echo "<SCRIPT LANGUAGE="javascript">window.alert("Hai ricevuto 1 nuovo messaggio!Controlla subito i tuoi messaggi!!!"); </script>";
$_SESSION['msg']=1;
}
}?>[/php]:)
Funziona...cioè l alert mi esce solo la prima volta che accedo alla index...se refresho la pagina non esce...
Scusami...quest ultimo passaggio...correggimi se sbaglio...spero di aver capito bene..
Appena accedo alla index del sito la variabile $_SESSION['msg'] == 0 e uguale a 0 quindi mi da l alert...poi qui
[php]
echo "<SCRIPT LANGUAGE="javascript">window.alert("Hai ricevuto 1 nuovo messaggio!Controlla subito i tuoi messaggi!!!"); </script>";
$_SESSION['msg']=1;[/php]viene passato il valore da 0 a 1 della variabile $_SESSION['msg'] e memorizzato al posto del vecchio $_SESSION['msg'] == 0...quindi ai successivi refresh $_SESSION['msg'] == 0 sarà falso e non darà l alert...ho capito bene la funzionalità si..?
-
Hai capito benissimo, scusa se son stato poco chiaro io nel spiegarlo.
-
Figurati!;)
L importante è aver capito come funziona.Grazie
-
ciao carlitos1982 non è che potresti postarmi i codici della pagina per l'invio dei messaggi e dei messaggi inviati?
Se non vuoi non preoccuparti!
ciao
steave67