[gdrcd 5.2.1] Stipendio e Doppia moneta
[gdrcd 5.2.1] Stipendio e Doppia moneta postato il 27/12/2014 14:45:33 nel forum programmazione, open source e hosting
Salve,
La prima domanda è già stata posta nel forum ma nessuno ha trovato la soluzione precisa. Io ci ho smattato tutta la mattina e non ho trovato sluzione quindi vi chiedo: C'è qualcuno che ha individuato il pezzo di codice da modificare per passare lo stipendio da giornaliero a settimanale?
Il codice integrale dei servizi bancari è queso qua:
<?php /*HELP: */
$row=gdrcd_query("SELECT soldi, banca, ultimo_stipendio FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$soldi=0+$row['soldi'];
$banca=0+$row['banca'];
$ultimo=$row['ultimo_stipendio'];
$query="SELECT ruolo.stipendio FROM clgpersonaggioruolo LEFT JOIN ruolo on clgpersonaggioruolo.id_ruolo = ruolo.id_ruolo WHERE clgpersonaggioruolo.personaggio = '".$_SESSION['login']."'";
$result=gdrcd_query($query, 'result');
$stipendio=0;
while($row=gdrcd_query($result, 'fetch')){
$stipendio+=$row['stipendio'];
}
gdrcd_query($result, 'free');
?>
<div class="pagina_servizi_banca">
<!-- Titolo della pagina -->
<div class="page_title">
<h2><?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['page_name']); ?></h2>
</div>
<!-- Operazioni bancarie -->
<div class="page_body">
<?php /*Prelievo*/
if((isset($_POST['op'])===TRUE)&&(gdrcd_filter('get',$_POST['op'])=='preleva')){
if (($_POST['ammontare']<=0)||(is_numeric($_POST['ammontare'])===FALSE)){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['error']).'</div>';
} else if($_POST['ammontare']>$banca){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['withdraw_no']).'</div>';
} else {
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['done']).'</div>';
/*Eseguo la transazione*/
gdrcd_query("UPDATE personaggio SET soldi = soldi + ".$_POST['ammontare'].", banca = banca - ".$_POST['ammontare']." WHERE nome = '".$_SESSION['login']."' LIMIT 1");
} ?>
<div class="link_back">
<a href="main.php?page=servizi_banca"><?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['back']); ?></a>
</div>
<?php } ?>
<?php /*Deposito*/
if((isset($_POST['op'])===TRUE)&&(gdrcd_filter('get',$_POST['op'])=='deposita')){
if (($_POST['ammontare']<=0)||(is_numeric($_POST['ammontare'])===FALSE)){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['error']).'</div>';
} else if($_POST['ammontare']>$soldi){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['deposit_no']).'</div>';
} else {
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['done']).'</div>';
/*Eseguo la transazione*/
gdrcd_query("UPDATE personaggio SET soldi = soldi - ".gdrcd_filter('num',$_POST['ammontare']).", banca = banca + ".$_POST['ammontare']." WHERE nome = '".$_SESSION['login']."' LIMIT 1");
} ?>
<div class="link_back">
<a href="main.php?page=servizi_banca"><?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['back']); ?></a>
</div>
<?php } ?>
<?php /*Bonifico*/
if((isset($_POST['op'])===TRUE)&&($_POST['op']=='bonifico')){
$query = gdrcd_query("SELECT nome FROM personaggio WHERE nome = '" . $_POST['beneficiario'] . "' LIMIT 1");
if (empty($_POST['beneficiario'])){
echo '<div class="warning">Il beneficiario che hai inserito non esiste o non è valido!</div>';
} else if (($_POST['ammontare']<=0)||(is_numeric($_POST['ammontare'])===FALSE)){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['error']).'</div>';
} else if($_POST['ammontare']>$banca){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['withdraw_no']).'</div>';
} else {
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['done']).'</div>';
/*Eseguo la transazione*/
gdrcd_query("UPDATE personaggio SET banca = banca - ".gdrcd_filter('num',$_POST['ammontare'])." WHERE nome = '".$_SESSION['login']."' LIMIT 1");
gdrcd_query("UPDATE personaggio SET banca = banca + ".gdrcd_filter('num',$_POST['ammontare'])." WHERE nome = '".$_POST['beneficiario']."' LIMIT 1");
/*Registro l'evento (Passaggio di danaro)*/
gdrcd_query("INSERT INTO log (nome_interessato, autore, data_evento, codice_evento ,descrizione_evento) VALUES ('".gdrcd_filter('in',$_POST['beneficiario'])."', '".$_SESSION['login']."', NOW(), ".BONIFICO.", '".'('.gdrcd_filter('num',$_POST['ammontare']).' '.$PARAMETERS['names']['currency']['plur'].') '.gdrcd_filter('in',$_POST['causale'])."')");
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."','".gdrcd_capital_letter(gdrcd_filter('in',$_POST['beneficiario']))."', NOW(), '".gdrcd_filter('in', $_SESSION['login'].' '.$MESSAGE['interface']['bank']['notice'].' '.gdrcd_filter('num',$_POST['ammontare']).' '.$PARAMETERS['names']['currency']['plur']).'.
'.gdrcd_filter('in',$_POST['causale'])."')");
} ?>
<div class="link_back">
<a href="main.php?page=servizi_banca"><?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['back']); ?></a>
</div>
<?php } ?>
<?php /*Stipendio*/
/** * Correzione dell'exploit che rendeva possibile accreditarsi un numero illimitato di soldi in banca
* Il controllo è eseguito anche nella query con la condizione 'AND ultimo_stipendio < NOW()'.
* Un grazie a Dyrr per la segnalazione.
* @author Blancks
*/
if((isset($_POST['op'])===TRUE)&&($_POST['op']=='incassa')&&($ultimo != strftime("%Y-%m-%d"))){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['done']).'</div>';
gdrcd_query("UPDATE personaggio SET banca = banca + ".$stipendio.", ultimo_stipendio = NOW() WHERE nome = '".$_SESSION['login']."' AND ultimo_stipendio < NOW() LIMIT 1");
?>
<div class="link_back">
<a href="main.php?page=servizi_banca"><?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['back']); ?></a>
</div>
<?php } ?>
<?php /*Visualizzazione di base*/
if(isset($_POST['op'])===FALSE){?>
<div class="panels_box">
<div class="status_bancario">
<!-- Saldo bancario -->
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['amount'].": ".$banca." ".$PARAMETERS['names']['currency']['plur']);?><br />
<!-- Stipendio -->
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['per_day'].": ".$stipendio." ".$PARAMETERS['names']['currency']['plur']);?><br />
<!-- In tasca -->
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['pocket'].": ".$soldi." ".$PARAMETERS['names']['currency']['plur']);?><br />
</div>
<!-- Deposito -->
<div class="form_gioco">
<form
action="main.php?page=servizi_banca"
method="post" >
<div class="form_label">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['deposit']) ?>
</div>
<div class='form_field'>
<input type="text" name="ammontare"
class="form_gestione_input"
value="0" />
</div>
<div class='form_submit'>
<input name="op"
type="hidden"
class="form_gestione_input"
value="deposita" />
<input name="conferma"
type="submit"
class="form_gestione_input"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['execute'])?>" />
</div>
</form>
</div>
<!-- Prelievo -->
<div class="form_gioco">
<form
action="main.php?page=servizi_banca"
method="post" >
<div class="form_label">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['withdraw']) ?>
</div>
<div class='form_field'>
<input type="text" name="ammontare"
class="form_gestione_input"
value="0" />
</div>
<div class='form_submit'>
<input name="op"
type="hidden"
class="form_gestione_input"
value="preleva" />
<input name="conferma"
type="submit"
class="form_gestione_input"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['execute'])?>" />
</div>
</form>
</div>
<!-- Bonifico -->
<div class="form_gioco">
<form
action="main.php?page=servizi_banca"
method="post" >
<div class="form_label">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['payment']) ?>
</div>
<div class='form_field'>
<input type="text" name="ammontare"
class="form_gestione_input"
value="0" />
</div>
<div class='form_field'>
<input name="op"
type="hidden"
class="form_gestione_input"
value="bonifico" />
<select name="beneficiario" class="form_gestione_selectbox">
<!-- PG -->
<?php $query="SELECT nome, cognome FROM personaggio WHERE permessi > -1 ORDER BY nome";
$nomi=gdrcd_query($query, 'result'); ?>
<option value="" selected>
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['payee']); ?>
</option>
<?php while($option=gdrcd_query($nomi, 'fetch')){ ?>
<option value="<?php echo $option['nome']; ?>">
<?php echo gdrcd_filter('out',$option['nome'])." ".gdrcd_filter('out',$option['cognome']); ?>
</option>
<?php }//while
gdrcd_query($nomi, 'free');
?>
</select>
</div>
<div class='form_field'>
<input type="text" name="causale"
class="form_gestione_input"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['cause']); ?>" />
</div>
<div class='form_submit'>
<input name="conferma"
type="submit"
class="form_gestione_input"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['execute']); ?>" />
</div>
</form>
</div>
<!-- Stipendio -->
<?php
if ($ultimo >= strftime("%Y-%m-%d")){ echo gdrcd_filter('out',$MESSAGE['interface']['bank']['credit_no']);}
else if ($stipendio > 0) {?>
<div class="form_gioco">
<form
action="main.php?page=servizi_banca"
method="post" >
<div class="form_label">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['pay']).' ('. gdrcd_filter('out',$MESSAGE['interface']['bank']['credit']).': '.$stipendio.' '.$PARAMETERS['names']['currency']['plur'].') '; ?>
</div>
<div class='form_submit'>
<input name="ammontare"
type="hidden"
class="form_gestione_input"
value="<?php echo $stipendio; ?>" />
<input name="op"
type="hidden"
class="form_gestione_input"
value="incassa" />
<input name="conferma"
type="submit"
class="form_gestione_input"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['bank']['execute']) ?>" />
</div>
</form>
</div>
<?php } else { echo gdrcd_filter('out',$MESSAGE['interface']['bank']['credit']).": ".$stipendio." ".$PARAMETERS['names']['currency']['plur']." "; } ?>
</div>
<?php }?>
</div><!-- banca_operazioni-->
</div><!-- banca_box -->
Quanto alla doppia momenta in realtà è una specie di progetto un po' fuori le righe. Vorrei inserire una seconda moneta in gioco (in modo da creare un sistema di sterline/scellini).
Così da profana avevo pensato che si potrebbe realizzare doppiando tutto il sistema che riguarda l'economia, solo che sono assolutamente inesperta di programmazione e non vorrei creare casini. C'è qualcuno che ha già realizzato questo sistema e si propone di spiegarmelo - in maniera dettagliata - o qualcuno che è interessato a collaborare per realizzarlo indirizzandomi?
Eventualmente si potrebbe creare una patch e renderla disponibile a tutti qui sul sito.
Pagine → 1
27/12/2014 16:27:51
Per lo stipendio per rendere più facile la modifica anche con differenti settaggi il sistema più semplice secondo me è questo:
prendere questo pezzo:
if((isset($_POST['op'])===TRUE)&&($_POST['op']=='incassa')&&($ultimo != strftime("%Y-%m-%d"))){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['done']).'</div>';
gdrcd_query("UPDATE personaggio SET banca = banca + ".$stipendio.", ultimo_stipendio = NOW() WHERE nome = '".$_SESSION['login']."' AND ultimo_stipendio < NOW() LIMIT 1");
modificandolo in:
if((isset($_POST['op'])===TRUE)&&($_POST['op']=='incassa')){
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['interface']['bank']['done']).'</div>';
gdrcd_query("UPDATE personaggio SET banca = banca + ".$stipendio.", ultimo_stipendio = DATE_ADD(NOW(), INTERVAL 1 WEEK) WHERE nome = '".$_SESSION['login']."' AND ultimo_stipendio < NOW() LIMIT 1");
Nella prima parte viene rimosso ilcontrollo riguardo al fatto che l'ultimo ritiro stipendio sia stato effettuato il giorno stesso (non preoccuparti per il pericolo che lo stipendio venga ritirato infinite volte questo viene prevenuto dalla nuova modifica). La seconda modifica imposta come data dell'ultimo stipendio la data di una settimana dalla data attuale DATE_ADD(NOW(), INTERVAL 1 WEEK) e visto che il controllo prevede poi che lo stipendio sia ritirato solo se AND ultimo_stipendio < NOW()nessuno stipendio potrà essere ritirato prima di una settimana.
Non ho avuto il tempo di testare il codice di perosna, ma non dovrebbero esserci errori (spero). In ogni caso ti spiega ocmunque le linee guida per la modifica.
pre maggiori informaizoni ti consiglio di guardare: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html ↗ per le funzioni sulle date in mysql, controllando la versione di mysql che hai sull'host.
28/12/2014 13:43:35
E dopo aver fatto la prova, mi spiace comunicare che non funziona.
E non è un problema di apici, i avevo sostituiti tutti... è proprio che continua a farmelo riscuotere quotidianamente.
29/12/2014 03:00:21
potresti provare un'altra strada usare $ultimo e nell'if invece di fare $ultimo != strftime() etc fai qualcosa tipo $ultimo+7g < time(). Ora non ho tempo per scriverti il codice giusto quindi se non sei capace scrivilo e vedrò di farlo appena ho tempo
03/01/2015 12:36:43
Ci ho provato un paio di volte ma nisba, quindi aspetto pazientemente che tu possa. E grazie tantissimo, anche a Dyrr :)
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!
Cafuné ↗
Exclusive Villa GdR ↗
Imperion ↗