[gdrcd 5.4.1.] problema con apostrofo.
[gdrcd 5.4.1.] problema con apostrofo. postato il 04/07/2018 11:45:04 nel forum programmazione, open source e hosting
Salve!
stavo cercando di risolvere i problemi che i pg con nome con apostrofo causano. una cosa in cui mi sono imbattuta e che non capisco è legata alla stampa dei dati del log di IP e doppi. Sostanzialmente pare che il sistema non riconosca il pg.
vado nel pratico.
ho creato un pg fuffa chiamato Mari'à.
la queery che dovrebbe stampare i log è la seguente
$query="SELECT descrizione_evento, data_evento FROM log WHERE nome_interessato = '".gdrcd_filter('in',$_REQUEST['pg'])."' AND codice_evento = ".LOGGEDIN." ORDER BY data_evento DESC LIMIT ".$num_logs."";
$result=gdrcd_query($query, 'result');
a stampare la query il risultato è il seguente
SELECT descrizione_evento, data_evento FROM log WHERE nome_interessato = 'Mari\'à' AND codice_evento = 2 ORDER BY data_evento DESC LIMIT 20
il nome così è frutto del fatto, suppongo, che la scheda, per non fargli dare errori, viene richiamata con addslashes($_REQUEST['pg'])
solo che, mentre il log dei messaggi si visualizza (ovvero mi fa vedere i messaggi che mari'à invia), quello contenente IP e doppi no. Riporto di seguito, per comodità, pure il codice del log dei messaggi
$query="SELECT destinatario, spedito, testo FROM backmessaggi WHERE mittente = '".gdrcd_filter('in',$_REQUEST['pg'])."' ORDER BY spedito DESC LIMIT ".$num_logs."";
Pagine → 1
04/07/2018 12:00:46
Il problema probabilmente non è in lettura, ma in scrittura: ti sei assicurata che la query che fa le insert nella tabella dei log abbia tutti gli i gdrcd_filter del caso?
04/07/2018 12:14:14
grazie per l'indicazione, Leo!
in login.php mi sono limitata ad aggiungere l'addslashes, come da codice che riporto.
Suppongo sia stato però un lavoro un po' da macelleria programmativa, mh? :\
/* Carico l'ultimo ip con cui si è collegato il personaggio */
$lastlogindata = gdrcd_query("SELECT nome_interessato, autore FROM log WHERE nome_interessato = '".gdrcd_filter('in', $_SESSION['login'])."' AND codice_evento=".LOGGEDIN." ORDER BY data_evento DESC LIMIT 1");
/*Se la postazione ha già un cookie attivo per un personaggio differente registro l'evento (Possibile account multiplo)*/
if ((isset($_COOKIE['lastlogin'])===TRUE) && ($_COOKIE['lastlogin'] != $_SESSION['login']))
{
gdrcd_query("INSERT INTO log (nome_interessato, autore, data_evento, codice_evento, descrizione_evento) VALUES ('".addslashes(gdrcd_filter('in',$_SESSION['login']))."','doppio (cookie)', NOW(), ".ACCOUNTMULTIPLO.", '".addslashes($_COOKIE['lastlogin']) ."')");
}
elseif ($lastlogindata['autore'] == $_SERVER['REMOTE_ADDR'])
{
gdrcd_query("INSERT INTO log (nome_interessato, autore, data_evento, codice_evento, descrizione_evento) VALUES ('".addslashes(gdrcd_filter('in',$_SESSION['login']))."','doppio (ip)', NOW(), ".ACCOUNTMULTIPLO.", '".addslashes(gdrcd_filter('in',$lastlogindata['nome_interessato'])) ."')");
}
04/07/2018 12:35:24 e modificato da gdr-online.com il 10/01/2023 10:08:25
addslashes(gdrcd_filter('in',$_SESSION['login'])
Secondo me il problema è qui, l'uso di entrambe le funzioni ti aggiunge troppi backslash, nel senso se $_SESSION['login'] è O'Neal
il risultato ti verrà fuori:
O\\\'Neal
E quindi è logico che poi in fase di lettura non ti trovi il pg.
Test della cosa: http://sandbox.onlinephpfunctions.com/code/a4d71c900f63c9f130083f06dff7656e25e46867 ↗
04/07/2018 12:41:42
grazie!
confermo che il problema era lì.
per la cronaca ho dovuto lasciare l'addslashes solo per il cookie ( addslashes($_COOKIE['lastlogin']) ) togliendo tutti gli altri, perchè altrimenti mi sparava errore al login.
Ora mi pare vada tutto. Log funziona e pg con l'apostrofo nel nome si logga.
Grazie!
04/07/2018 17:53:57
riuso il topic:
problema simile con il file ref_header. sostanzialmente non riesco a far sì che la nostra Mari'à venga evidenziato, quando uno scrive il suo nome in chat.
se ben intendo, il punto che stampa l'evidenziazione del nome è questo:
$add_chat.= '<span class="chat_msg">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out',$row['testo']))).'</span>';
come posso cambiarlo perchè lo prenda?
04/07/2018 19:38:56 e modificato da dyrr il 04/07/2018 19:39:47
gdrcd_filter('out') fa:
htmlentities($str, ENT_QUOTES, 'utf-8');
Quindi converte sia gli apici singoli che doppi nelle entità, per cui
visto che nel codice
$add_chat.= '<span class="chat_msg">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out',$row['testo']))).'</span>';
viene fatto passare tutto il testo in cui cercare il nome per quella funzione non lo trova appunto per quel motivo perchè da un lato cerca il nome con gli apici mentre nel testo è gia convertito, prova con:
$add_chat.= '<span class="chat_msg">'.gdrcd_chatme(gdrcd_filter('out',$_SESSION['login']), gdrcd_chatcolor(gdrcd_filter('out',$row['testo']))).'</span>';
dovrebbe funzionare.
06/07/2018 10:50:21
Grazie dyrr, tutto ora funge :)
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!
Raja Dunia ↗
State of Survival ↗
Imperion ↗
Tibia ↗
New Orleans ↗
Fallen Gods ↗
Tiles Survive ↗