GDRCD 5.1 Aiuto Età
GDRCD 5.1 Aiuto Età postato il 10/10/2012 02:33:34 nel forum programmazione, open source e hosting
Ciao a tutti! Premetto che sono ancora alle prime armi, ma sarebbe possibile inserire nella scheda del personaggio un parametro "età" che, partendo da 17 anni (alla data dell'iscrizione) aumenti di uno ad esempio ogni sei mesi?
Grazie in anticipo! :-)
10/10/2012 04:31:52
Possibile è praticamente ormai tutto in informatica :P .. basta trovare il modo di farglielo fare.
Non entro troppo nei particolari perché sono le 4, magari domani con calma riguardo appena ho un po' di tempo in ufficio e rispondo con più calma.
secondo me hai diciamo 2 possibilità intanto (sicuramente sono molte di più) per fare una cosa simile. Intanto per entrambe le possibilità dovresti aggiungere un campo età ovviamente per ogni personaggio.
Poi se l'età di inizio è sempre 17 tanto meglio, puoi a questo punto inserire un controllo al login facendo un calcolo dalla data di iscrizione al giorno attuale calcolando i mesi, dividendo per 6 e aggiungendo per difetto il risultato, oppure creare un fine php che richiami con un cronjob (tramite il server di hosting se te lo permette altrimenti ci sono dei siti che fanno servizio gratuito di cronjob) con il quale una volta al giorno per dire alla mezzanotte controlli le schede personaggi e incrementi le età a chi serve.
Con il primo sistema le schede dei personaggi rischiano di restare più "giovani" se non si loggano perchè ogni scheda viene incrementata solo quando si loggano gli utenti appunto e singolarmente. Con il secondo sistema sei sicuro di aver sempre tutti i pg con le età allineate e corrette in base alla data di iscrizione.
Sennò 3° modo, forse il più semplice in realtà ma dipende cosa ti serve e come lo devi usare ovviamente, non aggiungi nulla e non crei alcun campo in più se però tutti i personaggi partono sempre e soltanto dai 17 anni o cmq da un'età standard fissa per tutti, metti semplicemente un controllo in scheda (se però ti serve solo li altrimenti se ti serve in troppe pagine meglio uno dei due precedenti non ha senso calcolarsi di continuo le età), dove semplicemente prendi la data di iscrizione, la data attuale, in formato mysql senza il "-" quindi con le date aaaammgg puoi sottrarle e ottenere nelle due cifre mm i mesi di differenza, li sommi a 17 e li stampi quindi non ti salvi nulla, in pratica ogni volta che apri la scheda leggi la data di iscrizione e ricalcoli l'età effettiva in base alla data corrente.
10/10/2012 09:38:35
Senza utilizzare chronjob sia che decida di partire da 17 anni per tutti i pg o che possnao partire da qualsiasi età il problema è facilmente risolvibile.
Quando richiama il dato dell'età del pg dal record del personaggio sul database si calcola i mesi con la funzione apposita del php tra le due date:
DateTime::diff http://www.php.net/manual/en/datetime.diff.php ↗
l'esempio è in giorni ma si può formattare anche in mesi volendo.
Attenzione la funzione citata è però disponivbile solo in php 5.3 o superiore
10/10/2012 13:56:04
Ho detto alle prime armi? Diciamo pure che le armi io non le ho mai viste! XD
Intanto grazie mille a tutti per le risposte!
Andiamo al dunque:
eldiabolo, chiedo perdono ma sono tanto ignorante e non ho granché idea su come fare quello che dici...XD
dyrr, forse ho capito meglio ma non so bene dove inserire il codice e soprattutto cosa metto al posto del 2009-10-11? Sempre che debba sostituirlo...
nicodem, ho provato a lanciare quella query ma mi dà questo:
SELECT PERIOD_DIFF( DATE_FORMAT( NOW( ) , ' % Y % m' ) , DATE_FORMAT( 'data_iscrizione' , ' % Y % m' ) )
FROM 'personaggio'
LIMIT 0 , 30
Messaggio di MySQL: Documentazione
#1064 - 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 ''personaggio'
LIMIT 0, 30' at line 1
dove ho sbagliato? Grazie ancora a tutti!
10/10/2012 14:51:59 e modificato da clemence il 04/11/2012 18:49:07
Se usi GDRCD 5.1 Adv puoi usare il codice così:
ATTENZIONE: copiando da qui questo codice devi fare attenzione a ripristinare quelli che qui vedi come virgolette singole destra inclinata --> ' <-- questa, con la virgoletta singola standard (quella che si usa con la tastiera per fare gli apostrofi normalmente), perchè questo forum li filtra. Il MySQL intepreta la virgoletta singola destra per evidenziare i nomi di database, tabelle e campi invece in questo caso a te serve delimintare stringhe.
$result_diff=gdrcd_query("SELECT PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(data_iscrizione, '%Y%m'))
AS tot_mesi FROM personaggio WHERE nome = '".$_REQUEST['pg']."'", 'result')
$diff_mesi=gdrcd_query($result_diff, 'fetch');
Dov'è il "DATE_FORMAT(data_iscrizione, '%Y%m'))" il nome del campo data_iscrizione va senza apici ne virgolette, altrimenti la interpreta come stringa che cerchi di passargli per convertirla.
E come già detto da nicodem per entrambi i DATE_FORMAT, il formato va passato senza spazi '%Y%m' altrimenti mette appunto spazi tra le date e la funzione PERIOD_DIFF non va.
Così ottieni la variabile $diff_mesi['tot_mesi'] = ai mesi che sono passati dalla data di iscrizione per il personaggio richiesto (se ad esempio apri la scheda, nome de personaggio che passi con il REQUEST o con il POST o dipende da come gestisci tu la pagina nello specifico, ad ogni modo così ottieni la differenza mesi in totale del singolo personaggio richiesto.
A quel punto basta che fai una semplice divisione per il numero di mesi che fissi come "anno" di gioco e il risultato intero lo aggiungi all'età per ottenere quella attuale del pg.
La logica di eldiablo è semplice:
$mesi = valoredellavariabiledeimesilettadadb.
$eta = 17 + (int)($mesi/6);
Questa è la tua età, che tabellata avrebbe un andamento del genere:
Da 0 a 5 mesi di differenza: 17anni
Da 6 a 11 mesi di differenza: 18anni
Da 12 a 17 mesi di differenza: 19anni
Esattamente così
nello specifico con il codice che ti ho messo su così trovi l'età del personaggio richiesto:
$eta = 17 + (int)($diff_mesi['tot_mesi']/6);
(stesso discorso per gli apici di prima meglio sistemarli con gli altri standard)
10/10/2012 14:59:27
nicodem ha scritto: Questo ' % Y % m' all'interno va assolutamente senza gli spazi... deve essere tutto attaccato.
Per l'errore prova a verificare se prima di "FROM 'personaggio'" ci sia lo spazio, secondo me mandi a capo senza inserirlo e quindi vede " DATE_FORMAT( 'data_iscrizione' , ' % Y % m' ) )FROM 'personaggio'" e ti va in errore.
La logica di eldiablo è semplice:
$mesi = valoredellavariabiledeimesilettadadb.
$eta = 17 + (int)($mesi/6);
Questa è la tua età, che tabellata avrebbe un andamento del genere:
Da 0 a 5 mesi di differenza: 17anni
Da 6 a 11 mesi di differenza: 18anni
Da 12 a 17 mesi di differenza: 19anni
... ecc...
Ho riprovato, sono sicuro di non aver messo spazi stavolta dà
query SQL: Documentazione
SELECT PERIOD_DIFF( DATE_FORMAT( NOW( ) , '%Y%m' ) , DATE_FORMAT( 'data_iscrizione' , '%Y%m' ) )
FROM 'personaggio'
LIMIT 0 , 30
Messaggio di MySQL: Documentazione
#1064 - 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 ''personaggio'
LIMIT 0, 30' at line 1
Conta comunque degli spazi ma ho controllato sono sicuro di non averne messi!
10/10/2012 15:16:44
Ho riprovato ma mi dà lo stesso risultato può esser un problema di altervista? (anche se penso sia mio)
Può aiutare il fatto che nel messaggio di errore ora queste parti "PERIOD_DIFF( DATE_FORMAT( NOW( ) ," ", DATE_FORMAT" siano in rosso e queste '%Y%m' 'data_iscrizione' , '%Y%m' 'personaggio' in verde? significa che almeno quelle in verde sono giuste no?
Comunque mi continua a trovare spazi dove non ne ho messi...magari sbaglio procedura
10/10/2012 15:19:41 e modificato da radish il 10/10/2012 15:20:48
ma li cambi gli Apostrofi?? Che gdr-online da apostrofo te lo trasforma ad ' quando si salva un codice con il comando quote :P
10/10/2012 15:21:11
Puoi copiare e incollare esattamente la stringa che mandi? così la si controlla meglio senza filtri di eventuali GDRCD o altervista ecc..
Quale CMS utilizzi? sei con il GDRCD 5.1 adv? così ci rendiamo conto anche un attimo che strumenti hai a disposizione partendo dal CMS che stai utilizzando.
10/10/2012 18:45:01
Sìsì uso GDRcd 5.1 Adv...Oddio l'ho rifatto e non mi dà errore, potrei aver fatto giusto stavolta! :-D
Ehm....ora cos'è che dovrei fare? Copiare il codice di eldiabolo in scheda.inc.php?
11/10/2012 13:55:54
Qualche buon uomo che mi aiuti? 🆘
Discussione seguita da
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 ↗
Enlisted ↗
Imperion ↗
Tiles Survive ↗
Exclusive Villa GdR ↗
Tibia ↗
Hero Wars ↗
Crossout ↗