GDRCD 5.4 - Errore quando invio messaggio privato multiplo
GDRCD 5.4 - Errore quando invio messaggio privato multiplo postato il 01/07/2017 12:32:30 nel forum programmazione, open source e hosting
Buongiorno,
Ho riscontrato questo errore quando su gdrcd nella messaggistica privata seleziono "destinatario multiplo"
GDRCD MySQLi Error [File: messages_center.inc.php; Line: 59]
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Error Detail: INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUE
Questa parte del codice invero non l'avevo mai toccata e quindi ho fatto questa scopera solamente ora.
La riga 59 nel codice è la seguente:
gdrcd_query($query);
Ci sta solo questo scritto nella riga 59.
Ora vi elenco di seguito il continuo dopo la riga 59 perché ci sta questo commento:
/** * Bugfix: commentato la stampa della variabile $query. In caso di messaggio multiplo stampava
* l'ultima query eseguita.
* @author Rhllor
*/
Non so a che serve questa scelta destinatari multipli, ma spero che siano le ML di gilda (spero) perché per inviare messaggi multipli dice che basta mettere delle virgole nel destinatario singolo.
01/07/2017 19:08:12
gdrcd_query($query);
Come vedi la riga 59 processa una Query che è contenuta in una variabile, la variabile $query.
Puoi cercare, nelle righe immediatamente sopra, come è valorizzata la variabile $query ?
Prché è nella variabile che è dettagliata la query che ti da errore.
01/07/2017 19:54:51
seralia ha scritto:
gdrcd_query($query);
Come vedi la riga 59 processa una Query che è contenuta in una variabile, la variabile $query.
Puoi cercare, nelle righe immediatamente sopra, come è valorizzata la variabile $query ?
Prché è nella variabile che è dettagliata la query che ti da errore.
Allora le righe che ci sono sopra eseguono l'inserimento dei messaggi nel database. Ci sono tutte le tipologie, quelle per il destinatario singolo, quelle per tutti gli utenti presenti e quelle per tutti gli utenti registrati.
Di seguito tutta la parte di codice sopra la riga 59.
/*Inserimento nuovo messaggio nel db*/
if (gdrcd_filter('get',$_POST['op'])=="send_message")
{
if (gdrcd_filter('get',$_POST['multipli'])=='singolo')
{
$check_dest=explode(',',gdrcd_filter('get',$_POST['destinatario']));
$destinat=trim($check_dest[0]);
if (gdrcd_filter('get',$_POST['url'])!="")
{
$_POST['testo'] = $_SESSION['login'].' ti ha segnalato questo [url='.$_POST['url'].']link[/url].';
}//if
$result=gdrcd_query("SELECT nome FROM personaggio WHERE nome = '".$destinat."'", 'result');
if ((gdrcd_query($result, 'num_rows')>0)&&(empty($destinat)===FALSE))
{
gdrcd_query("INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUES ('".gdrcd_filter('in',$_POST['mod'])."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."', '".gdrcd_filter('in',$_POST['ambito'])."')");
gdrcd_query("INSERT INTO backmessaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUES ('".gdrcd_filter('in',$_POST['mod'])."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."', '".gdrcd_filter('in',$_POST['ambito'])."')");
}//if
}
else if ($_POST['multipli']=='presenti')
{
$query = "SELECT personaggio.nome, personaggio.cognome, personaggio.permessi, personaggio.sesso, personaggio.id_razza, razza.sing_m, razza.sing_f, razza.icon, personaggio.disponibile, personaggio.online_status, personaggio.is_invisible, personaggio.ultima_mappa, personaggio.ultimo_luogo, personaggio.posizione, personaggio.ora_entrata, personaggio.ora_uscita, personaggio.ultimo_refresh, mappa.stanza_apparente, mappa.nome as luogo, mappa_click.nome as mappa FROM personaggio LEFT JOIN mappa ON personaggio.ultimo_luogo = mappa.id LEFT JOIN mappa_click ON personaggio.ultima_mappa = mappa_click.id_click LEFT JOIN razza ON personaggio.id_razza = razza.id_razza WHERE personaggio.ora_entrata > personaggio.ora_uscita AND DATE_ADD(personaggio.ultimo_refresh, INTERVAL 4 MINUTE) > NOW() ORDER BY personaggio.is_invisible, personaggio.ultima_mappa, personaggio.ultimo_luogo, personaggio.nome";
$result = gdrcd_query($query, 'result');
while ($record = gdrcd_query($result, 'fetch'))
{
gdrcd_query("INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUES ('".gdrcd_filter('in',$_POST['mod'])."', '".$_SESSION['login']."', '".$record['nome']."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."', '".gdrcd_filter('in',$_POST['ambito'])."')");
}
}
else if ($_POST['multipli']=='multiplo')
{
$check_dest=explode(',',$_POST['destinatario']);
$query="INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUES";
foreach ($check_dest as $destinat)
{
$destinat=trim($destinat);
$result=gdrcd_query("SELECT nome FROM personaggio WHERE nome = '".gdrcd_filter('in',$destinat)."'", 'result');
if (gdrcd_query($result, 'num_rows')>0)
{
$query.=" ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."'),";
}
}
$query=substr($query,0,-1);
gdrcd_query($query);
Ho lasciato visibile la riga 59 come ultima righe del contenuto della finestra di cui sopra.
Che devo fare ora?
02/07/2017 09:34:27 e modificato da rematore il 02/07/2017 09:36:56
Li inserisci i nomi dei personaggi separati dalla virgola?
L'opzione serve ad inviare lo stesso messaggio a più utenti
02/07/2017 10:40:59
rematore ha scritto: Li inserisci i nomi dei personaggi separati dalla virgola?
Credo parli del messaggio multiplo attivo dai capi gilda in su... Appena ho un attimo guardo come e' la pagina di GDRcd...
Tu hai già controllato fargus? Quella parte di codice e' identica alla versione e base di GDRcd?
02/07/2017 11:06:50
seralia ha scritto: [quote]rematore ha scritto: Li inserisci i nomi dei personaggi separati dalla virgola?
Credo parli del messaggio multiplo attivo dai capi gilda in su... Appena ho un attimo guardo come e' la pagina di GDRcd...
Tu hai già controllato fargus? Quella parte di codice e' identica alla versione e base di GDRcd?[/quote]
si è identica, ho solo aggiunto nel database due colonne ma quelle funzionano e la funzione di "destinatario multiplo" non l'ho mai toccata. ho scoperto l'errore solo perché volevo capire a cosa servisse.
04/07/2017 19:40:07
else if ($_POST['multipli']=='multiplo')
{
$check_dest=explode(',',$_POST['destinatario']);
$query="INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUES";
foreach ($check_dest as $destinat)
{
$destinat=trim($destinat);
$result=gdrcd_query("SELECT nome FROM personaggio WHERE nome = '".gdrcd_filter('in',$destinat)."'", 'result');
if (gdrcd_query($result, 'num_rows')>0)
{
$query.=" ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."'),";
}
}
Hai aggiunto il campo moderazione nella query, ma non il relativo valore...
La variabile $query si compone di due parti: nella prima hai aggiunto
INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito)
ma nella seconda hai lasciato come primo VALUE il mittente
$query.=" ('".$_SESSION['login']."',
senza aggiungere il valore per moderazione...
05/07/2017 09:51:35 e modificato da fargus il 05/07/2017 10:02:45
seralia ha scritto:
else if ($_POST['multipli']=='multiplo')
{
$check_dest=explode(',',$_POST['destinatario']);
$query="INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUES";
foreach ($check_dest as $destinat)
{
$destinat=trim($destinat);
$result=gdrcd_query("SELECT nome FROM personaggio WHERE nome = '".gdrcd_filter('in',$destinat)."'", 'result');
if (gdrcd_query($result, 'num_rows')>0)
{
$query.=" ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."'),";
}
}
Hai aggiunto il campo moderazione nella query, ma non il relativo valore...
La variabile $query si compone di due parti: nella prima hai aggiunto
INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito)
ma nella seconda hai lasciato come primo VALUE il mittente
$query.=" ('".$_SESSION['login']."',
senza aggiungere il valore per moderazione...Ok hai ragione, il fatto è che non sapevo andasse messo li visto che la query è diversa dalle altre.
quindi l'ho aggiunto ed ora mi da un problema di virgolette.
GDRCD MySQLi Error [File: messages_center.inc.php; Line: 59]
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near " at line 1
Error Detail: INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUE.
Ho provato a cercare se per errore avessi messo delle virgolette di troppo o se invece ne mancavano, ma sembrano tutte aprirsi e chiudersi... Ho provato a rimuovere dalla query moderazione e ambito, lasciando quindi il codice originale di gdrcd e l'errore me lo da ugualmente. Presumo quindi che questo errore di virgolette " sia nativo.
else if ($_POST['multipli']=='multiplo')
{
$check_dest=explode(',',$_POST['destinatario']);
$query="INSERT INTO messaggi (moderazione, mittente, destinatario, spedito, testo, ambito) VALUES";
foreach ($check_dest as $destinat)
{
$destinat=trim($destinat);
$result=gdrcd_query("SELECT nome FROM personaggio WHERE nome = '".gdrcd_filter('in',$destinat)."'", 'result');
if (gdrcd_query($result, 'num_rows')>0)
{
$query.=" ('".gdrcd_filter('in',$_POST['mod'])."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."', '".gdrcd_filter('in',$_POST['ambito'])."', ),";
}
}
$query=substr($query,0,-1);
gdrcd_query($query);
Che il problema sia qui?
'".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."'
Non mi sembra anche se credo che sia qui perché in tutte le altre query la frase gdrcd_capital_letter non ci sta, quindi essendo nativo il problema mi chiedo se magari manca qualcosa.
05/07/2017 20:13:36
Il problema non credo sia nativo, visto che non mi risultavano problemi in altri GDRCD installati...
L'errore 1064 indica un problema di sintassi della query sql.
La variabile $_POST['mod'] è valorizzata?
05/07/2017 20:39:07
seralia ha scritto: Il problema non credo sia nativo, visto che non mi risultavano problemi in altri GDRCD installati...
L'errore 1064 indica un problema di sintassi della query sql.
La variabile $_POST['mod'] è valorizzata?
Si, per tutti gli altri funziona.
destinatario singolo,
tutti i presenti
tutti gli utenti il messaggio viene inviato correttamente, l'errore è presente solo nel "destinatario multiplo".
e come ti ho detto, se provo a rimuovere tutte le mie modifiche, mi da il problema delle virgolette.
Poco sopra credo di averti messo tutto il codice della pagina mi sa...
07/07/2017 16:42:21
Seralia, altrimenti se a te funziona quella parte, perché non mi mostri la porzione di quel codice affinché possa vedere come è diversa dal mio ed apportare la correzione?
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
The Coven ↗
World of Tanks ↗
AlterEgo ↗
Enlisted ↗
Sea of Conquest ↗
Neverness to Everness ↗