[ GDRCD 5.4 ][ RISOLTO ] Stampa descrizione oggetti usati in chat.
[ GDRCD 5.4 ][ RISOLTO ] Stampa descrizione oggetti usati in chat. postato il 28/06/2017 17:57:33 nel forum programmazione, open source e hosting e modificato da sadly-noob il 28/06/2017 19:51:30
(ha risolto: blancks)(ha contribuito: rematore)
$item=explode('-', gdrcd_filter('in',$_POST['id_item'])); if ($item[1]==1) { $query=" DELETE FROM clgpersonaggiooggetto WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".gdrcd_filter('num',$item[0])."' LIMIT 1"; } elseif ($item[1]>1) { $query=" UPDATE clgpersonaggiooggetto SET cariche = cariche -1 WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".gdrcd_filter('num',$item[0])."' LIMIT 1"; } gdrcd_query($query); /** USA OGGETTO: ELEMENTI CHE COMPONGONO LA STAMPA DELL'OGGETTO UTILIZZATO IN CHAT: " Gestione utilizza: X " **/ gdrcd_query(" INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES ( ".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in',$item[2])."' )"); }
Non riesco a capire come e dove diavolo riesca a pigliare il nome esatto dell'oggetto che sto utilizzando, o meglio:'.gdrcd_filter('in',$item[2])."'
Sembra essere l'elemento interessato, ma .. $item[2]? Che roba è?Non arrivo al metodo per estrapolare la descrizione dell'oggetto che sto utilizzando e stamparla insieme agli altri elementi, sigh. L'intuizione che mi è venuta è che <gergo non professionale> prima il sistema inserisce quei dati nel database (ribadisco però che mi è totalmente oscuro come faccia a trovare il nome esatto dell'oggetto che sto usando) e successivamente il compito di stamparli in chat è di questa seconda parte di codice: </gergo non professionale>/* TIPO MESSAGGIO: O uso oggetto */ /* RACCOLTA DATI DAL DATABASE PER STAMPARE LA DESCRIZIONE DELL'OGGETTO USATO */ $record = gdrcd_query(" SELECT descrizione FROM oggetto -?????????-"); /* FINE RACCOLTA DATI DAL DATABASE */ case 'O': /** * Fix problema visualizzazione spazi vuoti con i sussurri * @author eLDiabolo */ $add_chat.= '<div class="chat_row_'.$row['tipo'].'">';$add_chat.= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';$add_chat.= '<span class="chat_msg">' .gdrcd_filter('out',$row['testo']). ' QUI implemento la descrizione oggetto?' .$record['descrizione']. '</span>'; $add_chat.= '</div>';
.. Non fate caso ai tentativi da scappata di casa fatti lì in mezzo per trovare la descrizione degli oggetti.Immagino invece che questo:.gdrcd_filter('out',$row['testo']).
Si prenda magicamente tutti i dati elencati precedentemente, ovvero:NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in',$item[2])."'
Il mio terrore è di dover fare cose tremende tipo una foreign key fra la tabella oggetto e (forse) clgpersonaggiooggetto .. Oppure non ne ho la minima idea, non riuscendo a capire la natura/funzionamento di '.gdrcd_filter('in',$item[2])."'.Ringrazio anticipatamente chiunque abbia modo/voglia di fare un po' di luce su questo mistero o condividere possibili soluzioni, faccio tesoro di qualsiasi contributo.
Pagine → 1
28/06/2017 18:14:05
sadly-noob ha scritto: ma .. $item[2]? Che roba è?
Facciamo un passo indietro e partiamo dal principio.Quando viene generato il form in chat che ti elenca gli oggetti a disposizione che è possibile utilizzare https://github.com/GDRCD/GDRCD/blob/master/pages/frame_chat.inc.php#L186 ↗, GDRCD assegna come valore l'unione di più campi<option value="<?php echo $row['id_oggetto'].'-'.$row['cariche'].'-'.gdrcd_filter('out',$row['nome']); ?>">
ed effettua una concatenazione di stringa, facendo si che all'atto pratico il value della option relativo a quello specifico oggetto risulti in qualcosa di simile<option value="15-4-Materia Oscura">
Quando a questo punto viene inviato il form, GDRCD raccoglie questo valore https://github.com/GDRCD/GDRCD/blob/master/ref_header.inc.php#L93 ↗$item=explode('-', gdrcd_filter('in',$_POST['id_item']));
e tramite il comando explode spezza la stringa di valori concatenati in precedenza in una lista di valori (un array) usando il trattino come carattere di separazione.Il nostro array così composto quindi presenta 3 indici:$item[0] // id oggetto$item[1] // cariche oggetto$item[2] // nome oggetto
Adesso che abbiamo spiegato la provenienza e il contenuto di $item, vediamo come risolvere il problema.GDRCD scrive il messaggio in chat tramite la query di inserimento che hai indicato:sadly-noob ha scritto: gdrcd_query(" INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES ( ".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in',$item[2])."' )");
Quel che dobbiamo fare, subito prima di questa query, è recuperare la descrizione dell'oggetto di cui abbiamo bisogno.$oggetto = gdrcd_query("SELECT descrizione FROM oggetto WHERE id_oggetto = ". gdrcd_filter('in', $item[0]) ." LIMIT 1");
e successivamente inserirlo nella query di inserimento..gdrcd_query(" INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES ( ".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in',$item[2] . " - " . $oggetto['descrizione'])."' )");
Questo dovrebbe essere sufficiente ;-)
28/06/2017 18:19:15
Ciao,diciamo che la soluzione adottata dai programmatori non è proprio delle migliori ma comunque funziona per il caso.
$item=explode('-', gdrcd_filter('in',$_POST['id_item']));
La variabile item conterrà una stringa proveniente dalla globale $_POST con chiave id_item.Il contenuto della variabile $_POST['id_item'] è una stringa costruita nel seguente formato.id_oggetto-cariche-nome_oggetto
la funzione explode non fa altro che dividere la stringa in base al selettore richiesto e ritorna un array contente i valori splittati in base al selettore. Nel tuo caso explode è sul selettore '_' e lo split, caso ok, viene eseguito sul selettore per tre volte. Quindi la tua variabile item conterrà un array con 3 posizioni. Precisamente$item[0] = id_oggetto$item[1] = cariche oggetto$item[2] = nome oggetto
La formattazione della stringa la trovi nel file frame_chat[...]<option value="<?php echo $row['id_oggetto'] . '-' . $row['cariche'] . '-' . gdrcd_filter('out', $row['nome']); ?>"><?php echo $row['nome']; ?></option>[...]
28/06/2017 19:49:09

29/06/2017 00:42:57
Figurati, non c'è di che.Per la vignetta.. 🤣
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!