Avviso bacheche non ancora lette
Avviso bacheche non ancora lette postato il 27/03/2019 14:08:37 nel forum programmazione, open source e hosting e modificato da thenewpolisgdr il 27/03/2019 14:10:45
Salve a tutti, premettendo come fanno in molti che sono un programmatore amatoriale, ho una questione per la quale conosco solo i problemi e non conosco soluzioni.
Ho fatto il modo che sul box del menu compaia un'immagine che avverta gli utenti quando in bacheca ci sono dei messaggi che non hanno ancora letto. con questo codice:
$new_msg = gdrcd_query("SELECT COUNT(MA.id_messaggio) AS num FROM messaggioaraldo AS MA LEFT JOIN araldo_letto AS AL ON MA.id_messaggio=AL.thread_id AND AL.nome='".$_SESSION['login']."' WHERE MA.id_messaggio_padre = -1 AND AL.id IS NULL");
if($new_msg['num']>0){
echo '<div class="new_post_bacheca"><img src="http://tnp.altervista.org/themes/advanced/imgs/menu/occhiobacheca.png" class="new_post_bacheca" /></div>';
} else {
echo '<div class="new_post_bacheca"></div>';
}
Però c'è un problema. L'immagine compare, ovviamente, anche quando risultano messaggi non letti in bacheche che l'utente in questione non può leggere. Quindi vi chiedo: c'è un modo per far conteggiare solo i messaggi non letti postati in bacheche a cui l'utente può accedere?
per intenderci, questo if:
if (($row['tipo']<=PERTUTTI)||
(($row['tipo']==SOLORAZZA)&&($_SESSION['id_razza']==$row['proprietari']))||
(($row['tipo']==SOLOGILDA)&&(strpos($_SESSION['gilda'],'*'.$row['proprietari'].'*')!=FALSE))||
(($row['tipo']==SOLOMASTERS)&&($_SESSION['permessi']>=GAMEMASTER))||
($_SESSION['permessi']>=MODERATOR)){ /*Restrizione di visualizzazione*/
Pagine → 1
30/03/2019 15:08:16
Potresti fare come nella visualizzazione di base delle bacheche: prima prendi tutte le bacheche esistenti (tabella araldo) e poi per ognuna prima fai l'if del controllo permessi e poi esegui la query che hai già (aggiungendo il filtro sull'id bacheca).
Infine metti insieme i risultati.
Oppure puoi fare una query sola, mettendo in join la tabella araldo alla tua query esistente e replicando il controllo dell'if all'interno della condizione WHERE della query stessa.
30/03/2019 19:31:20
Ti ringrazio tanto. Ho cercato di usare il primo metodo, perché il secondo era quello che avevo intuito anche da solo, ma che non sapevo come fare... materialmente.
Abbiamo fatto qualche test e sembra funzioni :)
<?php
/*Carico l'elenco dei forum*/
$result = gdrcd_query("SELECT id_araldo, nome, tipo, proprietari FROM araldo ORDER BY tipo, nome", 'result');
$new_msg_tot = 0;
while($row = gdrcd_query($result, 'fetch'))
if (($row['tipo']<=PERTUTTI)||
(($row['tipo']==SOLORAZZA)&&($_SESSION['id_razza']==$row['proprietari']))||
(($row['tipo']==SOLOGILDA)&&(strpos($_SESSION['gilda'],'*'.$row['proprietari'].'*')!=FALSE))||
(($row['tipo']==SOLOMASTERS)&&($_SESSION['permessi']>=GAMEMASTER))||
($_SESSION['permessi']>=MODERATOR)){ /*Restrizione di visualizzazione solo master e admin*/
{
$new_msg = gdrcd_query("SELECT COUNT(MA.id_messaggio) AS num FROM messaggioaraldo AS MA LEFT JOIN araldo_letto AS AL ON MA.id_messaggio=AL.thread_id AND AL.nome='".$_SESSION['login']."' WHERE MA.id_araldo = ".$row['id_araldo']." AND MA.id_messaggio_padre = -1 AND AL.id IS NULL");
?>
<?php }//if ?>
<?php
$new_msg_tot = $new_msg_tot + $new_msg['num'];
$new_msg['num'] = 0;
?>
<?php }//while
gdrcd_query($result, 'free');
if($new_msg_tot>0){
echo '<div class="new_post_bacheca"><img src="http://tnp.altervista.org/themes/advanced/imgs/menu/occhiobacheca.png" class="new_post_bacheca" /></div>';
} else {
echo '<div class="new_post_bacheca"></div>';
} ?>
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
State of Survival ↗
Neverness to Everness ↗
Crossout ↗