-
Chat messaggio privato
Ciao a tutti sto creando una chat,
vorrei fare in modo che due utenti potessero inviarsi un messaggio tramite la chat ma solo loro possono vedere i messaggi che si scambiano...
pensavo una cosa del genere...
[ventriloquo=paolo]Ciao[/ventriloquo]
cioè solo l'utente di nome paolo vede il messaggio ciao...
come posso fare secondo voi...^^
-
Bhe... io credo che sarebbe più facile se il messaggio lo impostassi in questo modo:
Non saprei come fare nel modo in qui te scrivi il messaggio, io in questo modo farei cosi:
Codice PHP:
<?php
/* Produco un'array ( con explode() e separatore @ ) dopo aver recuperato il messaggio */
$arr = explode("@", $messaggio );
// Prendo il secondo elemento, il primo se non sbaglio e vuoto.
$nome = $arr[1];
/* Controllo se il $nome corrisponde con la propria sessione ( se corrisponde il messaggio e privato e per te ) */
if ($nome = $_SESSION["nome"]) {
// Visualizzo l'ultimo elemento ( $arr[2], contenente il messaggio )
}
?>
Non lo provato, ma dovrebbe andare.
-
non funziona perché devo fare che mi visualizza tutti i messaggi giusto, ma i messaggi che iniziano come dici tu lo deve vedere solo quel utente...
@paolo@ciao
-
Scusa, mi sono sbagliato, nell'ultima if, dove c'è scritto appunto che il messaggio lo deve vedere solo paolo metti un doppio uguale ( == ) al posto dell'uguale ( = ).
Ovviamente, devi usare le sessione, e paolo deve avere una sessione registrato contenente il suo nome, identico al nome contenente dopo la prima @ nel messaggio.
P.S.: Se dopo questo il codice non funziona ancora posta il tuo codice qui.
-
Ti posto il codice ok:
Codice PHP:
<?php
include 'impostazioni/config.php';
$messaggi = mysql_query("SELECT * FROM chat_messaggi");
while($messaggio = mysql_fetch_array($messaggi)){
$utenti_online = mysql_fetch_array(mysql_query("SELECT nickname,livello FROM chat_utenti WHERE nickname = '$messaggio[1]'"));
if($messaggio[1] == 'Chat'){ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font> <?php echo $messaggio[3]; ?></div>
<?php }else{
$livello = mysql_query("SELECT nickname,livello FROM chat_admin WHERE nickname = 'Admin'");
$livello2 = mysql_fetch_array($livello);
$arr = explode("@",$messaggio[3]);
$nome = $arr[1];
if($nome == $_SESSION["nickname"]){ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font>
<font class="livello<?php echo $livello2[2]; ?>"><?php echo $messaggio[1]; ?></font>: <?php echo str_replace($emoticons,$images,preg_replace($pattern,$replacements,$arr[2])); ?></div>
<?php }else{ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font>
<font class="livello<?php echo $livello2[2]; ?>"><?php echo $messaggio[1]; ?></font>: <?php echo str_replace($emoticons,$images,preg_replace($pattern,$replacements,$messaggio[3])); ?></div>
<?php }}} ?>
-
Non saprei che dire, il codice a me mi pare apposto, forse ho sbagliato io a scrive qualche cosa, hai provato a vedere cosa ti stampa $arr[1]?
Se ti viene stampato il nome e sicuro che sia identico ( mailscole e minuscole uguali ) della sessione nickname?
Nel file che include nella prima riga hai aperto le sessioni vero?
-
Credo di aver capito l'errore, ma il problema che non so come risolverlo...
ti spiego se un utente invia un messaggio privato es.
@Paolo@ciao
se l'utente si chiama Paolo visualizza ciao, se l'utente non si chiama Paolo visualizza
@Paolo@ciao
capito il problema sta qua credo...
Codice PHP:
<?php
if($nome == $_SESSION["nickname"]){ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font>
<font class="livello<?php echo $livello2[2]; ?>"><?php echo $messaggio[1]; ?></font>: <?php echo str_replace($emoticons,$images,preg_replace($pattern,$replacements,$arr[2])); ?></div>
<?php }else{ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font>
<font class="livello<?php echo $livello2[2]; ?>"><?php echo $messaggio[1]; ?></font>: <?php echo str_replace($emoticons,$images,preg_replace($pattern,$replacements,$messaggio[3])); ?></div>
<?php }}} ?>
come posso risolvere questa cosa...
-
Non saprei,forse mi sono sbagliato io, hai provato ha stampare la variabile $nome e ha vedere se contiene lo stesso valore della sessione?
-
funziona perchè lo provato...
Ma non funziona la cosa che solo lui lo può vedere...
Qualcuno sa darmi una mano...
-
L'array $arr e la sessione nickname cosa contiene?
-
la sessione nickname, contiene il nome del utente...
$arr[1] il nome del utente
$arr[2] il messaggio per l'utente
come mi ha detto tu di fare
-
Mmm.. mi pare strano, prova modificando il codice cosi:
Codice PHP:
include 'impostazioni/config.php';
$messaggi = mysql_query("SELECT * FROM chat_messaggi");
while($messaggio = mysql_fetch_array($messaggi)) {
$utenti_online = mysql_fetch_array(mysql_query("SELECT nickname,livello FROM chat_utenti WHERE nickname = '$messaggio[1]'"));
if($messaggio[1] == 'Chat'){ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font> <?php echo $messaggio[3]; ?></div>
<?php }else{
$livello = mysql_query("SELECT nickname,livello FROM chat_admin WHERE nickname = 'Admin'");
$livello2 = mysql_fetch_array($livello);
$arr = explode("@",$messaggio[3]);
if($arr == $_SESSION["nickname"]){ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font>
<font class="livello<?php echo $livello2[2]; ?>"><?php echo $messaggio[1]; ?></font>: <?php echo str_replace($emoticons,$images,preg_replace($pattern,$replacements,$arr[2])); ?></div>
<?php }else{ ?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font>
<font class="livello<?php echo $livello2[2]; ?>"><?php echo $messaggio[1]; ?></font>: <?php echo str_replace($emoticons,$images,preg_replace($pattern,$replacements,$messaggio[3])); ?></div>
<?php }}} ?>
Se questo non funziona non saprei proprio, anche perché mi pare strano che tutto ciò non funziona, visto che la if si esegue solamente quando $arr[1] e la sessione nickname sono uguali, come effettivamente hai detto di averli te.
EDIT:
Credo di aver capito il problema, credo che il problema sia chè, ti ho fatto scrivere, che i messaggi privati, vengono solo considerati tali ( come messaggi private ) se l'utente entra come admin.
Premetto che il codice era parecchio impicciato, senza offesa naturalmente ( non ci capivo quasi niente ), ma prova a modificare in questo modo:
Codice PHP:
<?php
include 'impostazioni/config.php';
$messaggi = mysql_query("SELECT * FROM chat_messaggi");
while($messaggio = mysql_fetch_array($messaggi)) {
$utenti_online = mysql_fetch_array(mysql_query("SELECT nickname,livello FROM chat_utenti WHERE nickname = '$messaggio[1]'"));
if($messaggio[1] == 'Chat'){
$arr = explode("@",$messaggio[3]);
$nome = $arr[1];
if($arr[1] == $_SESSION["nickname"]){
?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font> <?php echo $arr[2]; ?></div>
<?php
}else {
?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font> <?php echo $messaggio[3]; ?></div>
<?php
}
}else {
$livello = mysql_query("SELECT nickname,livello FROM chat_admin WHERE nickname = 'Admin'");
$livello2 = mysql_fetch_array($livello);
if($arr[1] == $_SESSION["nickname"]){
?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font> <?php echo $arr[2]; ?></div>
<?php
}else {
?>
<div><font class="data">(<?php echo date("H:i:s",$messaggio[4]); ?>)</font> <?php echo $messaggio[3]; ?></div>
<?php
}
}
}
?>