[RISOLTO - GDR CD 5.4] Presenza non visibile al primo accesso
[RISOLTO - GDR CD 5.4] Presenza non visibile al primo accesso postato il 31/03/2018 13:23:12 nel forum programmazione, open source e hosting e modificato da damnedqueen89 il 01/04/2018 14:20:29
Buongiorno!
Mi ritrovo a scrivere da queste parti perchè ho riscontrato un problema abbastanza fastidioso nel suo insieme e magari qualcuno potrebbe illuminarmi su come risolverlo!
Espongo il problema:
Una volta che un utente si iscrive e compie il primo accesso nella land, la sua presenza non è rilevata nell'elenco dei presenti e dei presenti estesi. L'utente può fare tutto, consultare le bacheche, mandare messaggi privati, spiare le chat eccetera eccetera, ma non si vede perchè è come se fosse un fantasmino o la particella di sodio dell'acqua.
Questo problema ho visto che si risolve facendo il logout e successivamente il login, ma avrei piacere di capire a cosa sia dovuto, qualcuno potrebbe darmi una mano?
Pagine → 1
31/03/2018 14:43:05
Ciao, usi la versione 5.4.1 pulita o hai fatto delle modifiche alle parti che gestiscono presenti, login e logout?
31/03/2018 16:16:33
Ciao! Ho iniziato con la versione pulita per poi farci le modifiche sopra, ma effettivamente potrei aver toccato io stessa qualcosa senza rendermene conto.
Faccio un controllo incrociato con una versione gdr-cd pulita per vedere se ci sono incongruenze e in caso riscrivo qui!
31/03/2018 17:42:28
controlla a che valore hai impostato i valori di default dei campi ora_entrata, ora_uscita e ultimo_refresh nella tabella personaggio sul database.
se sono impostati a current_timestamp potresti incorrere in problemi simili a quelli che descrivi
31/03/2018 21:58:24 e modificato da damnedqueen89 il 31/03/2018 21:59:39
lkmnoppo ha scritto: Ciao, usi la versione 5.4.1 pulita o hai fatto delle modifiche alle parti che gestiscono presenti, login e logout?
Ho fatto il controllo incrociato sulle pagine.
In login.php l'unica riga diversa rispetto a quello originale è questa:
elseif (strtotime($record['ora_entrata']) > strtotime($record['ora_uscita'])||(strtotime($record['ultimo_refresh'])+300) > time())
Io avevo messo +1 e l'ho risettato a +300 come nell'originale.
La pagina di logout è ancora quella pulita e originale.
Nella pagina presenti.inc.php invece risultano queste:
PAGINA ORIGINALE riga 12
//Refresh presenza.
if (isset($_REQUEST['disponibile'])===TRUE){
$query = "UPDATE personaggio SET ultimo_refresh = NOW(), disponibile=".gdrcd_filter('num',$_REQUEST['disponibile'])." WHERE nome = '".gdrcd_filter('in',$_SESSION['login'])."'";
} elseif (isset($_REQUEST['invisibile'])&&($_SESSION['permessi']>=GAMEMASTER)){
$query = "UPDATE personaggio SET ultimo_refresh = NOW(), is_invisible=".gdrcd_filter('num',$_REQUEST['invisibile'])." WHERE nome = '".gdrcd_filter('in',$_SESSION['login'])."'";
} else {
$query = "UPDATE personaggio SET ultimo_refresh = NOW() WHERE nome = '".gdrcd_filter('in',$_SESSION['login'])."'";
}
gdrcd_query($query);
echo '<div class="elenco_presenti">';
PAGINA MODIFICATA
//Refresh presenza.
if (isset($_REQUEST['disponibile'])===TRUE){
$query = "UPDATE personaggio SET ultimo_refresh = NOW(), disponibile=".gdrcd_filter('num',$_REQUEST['disponibile'])." WHERE nome = '".gdrcd_filter('in',$_SESSION['login'])."'";
} else {
$query = "UPDATE personaggio SET ultimo_refresh = NOW() WHERE nome = '".gdrcd_filter('in',$_SESSION['login'])."'";
}
gdrcd_query($query);
echo '<div class="elenco_presenti">';
Le parti dove carica la lista dei pg entrati e usciti presenti nell'originale non sono presenti in quella modificata dove rimane invece solo la sezione che carica i presenti in luogo.
E questa qui (alla fine della pagina originale) non è presente nella modificata.
// Conteggio i presenti.
$record = gdrcd_query("SELECT COUNT(*) AS numero FROM personaggio WHERE (personaggio.ora_entrata > personaggio.ora_uscita AND DATE_ADD(personaggio.ultimo_refresh, INTERVAL 4 MINUTE) > NOW())");
//numero utenti presenti.
echo '<div class="link_presenti"><a href="../main.php?page=presenti_estesi" target="_top">';
if ($record['numero']==1){
echo '<div class="page_title"><h2>'.$record['numero'].' '.gdrcd_filter('out',$PARAMETERS['names']['users_name']['sing']).' '.gdrcd_filter('out',$MESSAGE['interface']['logged_users']['sing']).'</h2></div>';
} else {
echo '<div class="page_title"><h2 class="presenti_title">'.$record['numero'].' '.gdrcd_filter('out',$PARAMETERS['names']['users_name']['plur']).' '.gdrcd_filter('out',$MESSAGE['interface']['logged_users']['plur']).'</h2></div>';
}
echo '</a></div>';
Il resto è tutto identico, ho fatto casotti togliendo questi pezzi?
_____
leoblacksoul ha scritto: controlla a che valore hai impostato i valori di default dei campi ora_entrata, ora_uscita e ultimo_refresh nella tabella personaggio sul database.
se sono impostati a current_timestamp potresti incorrere in problemi simili a quelli che descrivi
Ho controllato nel db e i valori di default impostati su ora_entrata e ora_uscita sono NULL. Il current_timestamp non compare da nessuna parte.
01/04/2018 11:27:51 e modificato da lkmnoppo il 01/04/2018 11:59:20
Un'altra domanda, hai fatto modifiche anche alla pagina di iscrizione? Perché come ha suggerito leoblacksoul potrebbe essere un problema di come vengono settati i valori di "ultima entrata" e "ultima uscita" alla registrazione sul db del personaggio.
Infatti il comportamento che descrivi supporta questa ipotesi perché un logout seguito da un login (che sono praticamente uguali all'originale) riportano il db in uno stato consistente rendendo il tutto correttamente funzionante. Il logout sistema "ultima uscita" e poi da quel momento in poi la pagina presenti ha un'"ultima uscita" valida da confrontare.
Per verificare questa ipotesi, prova a registrare un pg, e poi vedi quali sono i valori che sono stati inseriti nel db nei campi "ultima uscita" e "ultima entrata"
Edit: ho appena controllato sulla documentazione di MySQL (do per scontato che usi questo perché di solito è così, qualora non fosse vero correggimi) e per come è il db di default, il valore che dovresti trovare in un pg appena registrato è 0000-00-00 in entrambe le colonne.
01/04/2018 11:28:52 e modificato da geko il 01/04/2018 11:30:08
Ciao,
il +300 sul timestamp de "ultimo_refresh" significa che aggiunge 5 minuti e in inserito in quel modo nel IF vuol dire che controlla che dall'ultimo refresh siano passati 5 minuti prima di poter rientrare se non hai effettuato il logout, controllo superabile facilmente dove se erroneamente cambio sito e clicco il tasto indietro (del browser) non rieffettuo il login ma rientro perchè le sessioni e il cookie della mia sessione esiste ancora.
Nella pagina presenti.inc.php stai attenta perchè è lì che aggiorna le sessioni degli spostamenti del pg e "ultimo_refresh".
Mentre la tabella a db del personaggio non può avere il current_timestamp di default, in primis, perchè se guardi nell'ultima fase della registrazione i campi ora_entrata e ora_uscita sono a NULL e il current_timestamp NON supporta il valore NULL di default.
Quindi per poter mettere il current_timestamp devi PRIMA modificare l'inserimento del personaggio a DB quando viene registrato, inoltre current_timestamp è supportato solo dai campi TIMESTAMP e non dai DATE o DATETIME.
01/04/2018 14:17:16 e modificato da damnedqueen89 il 01/04/2018 14:22:06
Sono andata direttamente nel db dove ho cambiato i valori di default a ultimo_refresh, ora_entrata, ora_uscita. Dato che avevo NULL in tutti e tre i campi ho inserito invece 0000-00-00 00:00:00 dato che provando a registrare continuava a dare lo stesso errore e adesso invece il fantasmino non è più fantasma ma anzi viene segnato perfettamente nella lista dei presenti, quindi il problema è risolto!
Vi ringrazio tantissimo del vostro aiuto <3
01/04/2018 16:09:02
damnedqueen89 ha scritto: Sono andata direttamente nel db dove ho cambiato i valori di default a ultimo_refresh, ora_entrata, ora_uscita. Dato che avevo NULL in tutti e tre i campi ho inserito invece 0000-00-00 00:00:00 dato che provando a registrare continuava a dare lo stesso errore e adesso invece il fantasmino non è più fantasma ma anzi viene segnato perfettamente nella lista dei presenti, quindi il problema è risolto!
Vi ringrazio tantissimo del vostro aiuto <3
Di nulla!
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!
Crossout ↗
Seconda Era ↗
Tiles Survive ↗
Cafuné ↗
Foundation Galactic Frontier ↗
World of Tanks ↗
The Coven ↗