[GDRCD 5.2 mod.] Scadenza oggetti
[GDRCD 5.2 mod.] Scadenza oggetti postato il 12/09/2022 17:28:44 nel forum programmazione, open source e hosting e modificato da staff shadowland il 12/09/2022 17:29:44
Tempo fa qualcuno chiese in forum qualcosa di analogo ma non riesco a trovare il Topic in cui se ne parlava. Ho notato che la scadenza oggetti è un tipo di modifica che è stato oramai implementato in non poche Land ma non è mai stato rilasciato un pacchetto a riguardo o comunque non è ancora stato introdotto un Topic che spieghi come inserire il parametro attinente nel proprio codice.
Mi chiedevo, se qualcuno fosse riuscito nell'impresa, potrebbe darmi qualche dritta su come fare? Perchè ammetto che con le scadenze non sono molto pratica ^^' certo...non è una modifica primaria ma sarebbe di aiuto nella rimozione automatica in inventario di oggetti come cibo e simili che non sono eterni insomma >.<
Come sempre, qualora riuscissi a trovare la risposta, la renderò nota qui di seguito.
Grazie a chi vorrà darmi una zampina! <3
Pagine → 1
12/09/2022 17:47:47
così ad occhio io metterei una data agli oggetti e ad ogni login farei due controlli 1) se è un oggetto con scadenza, 2 se ha scadenza verifiche la data odierna con quella dell'oggetto.
12/09/2022 19:46:21
Sì avevo pensato ad una cosa analoga, la cosa complicata per me è proprio riuscire a scrivere una stringa simile.
Partendo dal principio provando ad andare per step e secondo logica (spero):
- Creo un campo "scadenza" nella tabella oggetto (quella inerente gli oggetti al mercato) e - Creo un campo uguale all'interno della tabella clgpersonaggiooggetto (che riguarda il Pg)
- Provo ad eseguire un controllo al log-in come suggerito da te darkblade (ci provo)
La mia domanda è...basta un controllo al log-in per controllare la data e fin qui ci siamo, ma poi per rimuovere l'oggetto scaduto in possesso del corrispettivo giocatore? Presumo ci sia anche altro da fare o mi sbaglio?
13/09/2022 12:30:37
Posto qui i passaggi che sto effettuando perchè vorrei capire come fare a realizzare quanto mi sono prefissata.
Per il momento ho creato il campo: scadenza (date) come definito (0000-00-00) in oggetto e clgpersonaggiooggetto.
Ho inserito nella pagina inerente la gestione degli oggetti del mercato, il seguente codice per selezionare una data (a partire da quella odierna) a salire, così da settare la data opportuna per la scadenza di un oggetto:
<div class='form_field'>
<!-- Giorno -->
<select name="day" class="day">
<?php for($i=1; $i<=31; $i++){?>
<option value="<?php echo $i;?>" <?php if(strftime('%d')==$i){echo 'selected';}?>><?php echo $i;?></option>
<?php }//for ?>
</select>
<!-- Mese -->
<select name="month" class="month">
<?php for($i=1; $i<=12; $i++){?>
<option value="<?php echo $i;?>" <?php if(strftime('%m')==$i){echo 'selected';}?>><?php echo $i;?></option>
<?php }//for ?>
</select>
<!-- Anno -->
<select name="year" class="year">
<?php for($i=strftime('%Y'); $i<=strftime('%Y')+20; $i++){?>
<option value="<?php echo $i;?>"><?php echo $i;?></option>
<?php }//for ?>
</select>
</div>
ma ovviamente mi sono imbattuta nel primo problema ed errore, poiché non so come scrivere la parte di codice che lavora nell'inserimento della scadenza e nella modifica non essendo come gli altri campi presenti (e che di conseguenza non posso prendere in esempio).
Se li scrivo in questa maniera:
'".gdrcd_filter('num',$_POST['scadenza_oggetto'])."',
oppure:'".gdrcd_filter('in',$_POST['scadenza_oggetto'])."',
mi rimanda ad un errore:
Error String: Incorrect date value: '0' for column 'scadenza' at row 1
che di certo sta nella formattazione della data poichè il valore non deve essere 0 ma 0000-00-00 dove dovrei adoperare gdrcd_format_date
ma anche se la scrivo in questo modo (che di certo non è adatto per inserire la data in DB):
'".gdrcd_format_date('in',$scadenza_oggetto)."',
mi restituisce come errore:
Error String: Incorrect date value: '01/01/1970' for column 'scadenza' at row 1
In sintesi, non so come ovviare anche al semplice inserimento di una data selezionata T-T
14/09/2022 09:13:18
allora nella tabella oggetto servono 2 campi:
1) un tinyint con lunghezza ad 1 e questo lo setti ad 1 se è un oggetto che scade altrimenti a 0.
2) la data come hai già fatto
.......poiiii..., se gli dai il nome "day" perchè poi qui lo chiami "scadenza_oggetto"??, quando fai un post devi mettere SEMPRE il name dell'oggetto, ma in questo caso te lo devi costruire dato che hai un form in questo modo, per cui essendo il database di altervista impostato con la data inglese.
<div class='form_field'>
<!-- Giorno -->
<select name="day" class="day">
<?php for($i=1; $i<=31; $i++){?>
<option value="<?php echo $i;?>" <?php if(strftime('%d')==$i){echo 'selected';}?>><?php echo $i;?></option>
<?php }//for ?>
</select>
<!-- Mese -->
<select name="month" class="month">
<?php for($i=1; $i<=12; $i++){?>
<option value="<?php echo $i;?>" <?php if(strftime('%m')==$i){echo 'selected';}?>><?php echo $i;?></option>
<?php }//for ?>
</select>
<!-- Anno -->
<select name="year" class="year">
<?php for($i=strftime('%Y'); $i<=strftime('%Y')+20; $i++){?>
<option value="<?php echo $i;?>"><?php echo $i;?></option>
<?php }//for ?>
</select>
</div>
per cui dovrai mettere:
$data_scadenza = gdrcd_filter('in',$_POST['year']).'-'.gdrcd_filter('in',$_POST['month']).'-'.gdrcd_filter('in',$_POST['day']);
tecnicamente non serve che gli imposti anche un campo nella tabella clspersonaggio,ma andiamo per ordine:
aggiornamento
adesso non so se hai la tabella standard ma dovrebbe funzionare in questo modo:
gdrcd_query("UPDATE oggetto SET tipo=".gdrcd_filter('in',$_POST['tipo_oggetto']).", nome='".gdrcd_filter('in',$_POST['nome_oggetto'])."', urlimg='".gdrcd_filter('in',$_POST['img_oggetto'])."', descrizione='".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', costo=".gdrcd_filter('num', $_POST['costo_oggetto']).", ubicabile=".gdrcd_filter('num',$_POST['fit_in']).", attacco=".gdrcd_filter('num',$_POST['attacco_oggetto']).", difesa=".gdrcd_filter('num',$_POST['difesa_oggetto']).", cariche=".gdrcd_filter('num',$_POST['cariche_oggetto']).", bonus_car0=".gdrcd_filter('num',$_POST['car0_oggetto']).", bonus_car1=".gdrcd_filter('num',$_POST['car1_oggetto']).", bonus_car2=".gdrcd_filter('num',$_POST['car2_oggetto']).", bonus_car3=".gdrcd_filter('num',$_POST['car3_oggetto']).", bonus_car4=".gdrcd_filter('num',$_POST['car4_oggetto']).", bonus_car5=".gdrcd_filter('num',$_POST['car5_oggetto'])." WHERE id_oggetto=".gdrcd_filter('num',$_POST['id_oggetto']).", scadenza ='".gdrcd_filter('in',$scadenza_oggetto])."' ");
intanto verifica questo se non ho sbagliato a scrivere qualcosa.
16/09/2022 11:05:19 e modificato da staff shadowland il 16/09/2022 11:07:07
Grazie all'intervento di Darkblade in privato, l'implementazione è riuscita ma lascio a lui l'indicazione dei vari passaggi. Volevo precisare che il sistema di scadenza funziona unicamente per gli oggetti "unici", ovvero un utente che acquista più di un oggetto del medesimo tipo, si ritroverà con la scadenza fedele alla prima data di acquisto di tale oggetto. Quando giunge il momento della scadenza del 1° acquistato, il sistema andrà a rimuovere anche quelli comprati in seguito, questo perchè il codice degli oggetti di gdrcd funziona per "accorpamento".
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!
Fallen Gods ↗
Imperion ↗
World of Warship ↗
Sea of Conquest ↗
RAID Shadow Legends ↗