[Gdrcd 5.4.1] Stipendio
[Gdrcd 5.4.1] Stipendio postato il 06/06/2016 19:51:05 nel forum programmazione, open source e hosting
Vorrei che lo stipendio si aggiornasse da solo nel login ed ho messo questo in login.php
/*Stipendio*/
$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'];
if($ultimo != strftime("%Y-%m-%d")){
gdrcd_query("UPDATE personaggio SET soldi = soldi + ".$stipendio.", ultimo_stipendio = NOW() WHERE nome = '".$_SESSION['login']."' AND ultimo_stipendio < NOW() LIMIT 1");
} }
Ma niente, non funziona. Qualcuno sa dirmi cosa sbaglio? ç_ç Grazie
Pagine → 1
06/06/2016 21:18:26
Cerca di capire precisamente cos'è che non funziona: prova ad usare la funzione var_dump() per stampare le informazioni che vuoi controllare e l'istruzione exit per terminare lo script in quel preciso punto.
Ad esempio, una buona idea potrebbe essere quella di verificare che la primissima query scriva effettivamente qualcosa in row e, se si, passare a verificare all'interno del ciclo se effettivamente query dei mestieri ha recuperato i dati che ti aspetti di trovare.
Se ti quadra tutto fino all'update il problema potrebbe essere quello.
In parole povere: fai un po di debug e facci sapere i risultati ;-)
06/06/2016 22:44:57
Ti consiglio anche di fare in modo che solo al PRIMO accesso giornaliero ti dia i bigliettoni verdi necessari.. Se no entro 100 di fila e mi becco un sacco di soldi! Per questo o metti una stringa di php oppure fai un nuovo campo nel db in scheda tipo 'paga_gg' dove se c'è valore '0' ti accredita i soldi al login e una volta ricevuti automaticamente il campo sopra citato (paga_gg) si trasforma in valore '1' e quindi al login non accredita piú nulla.. Alle 23:59:59 di ogni giorno il campo si imposta per ogni pg automaticamente 0.. Penso sia difficile ma fattibile per non imbrogliare!
06/06/2016 23:01:48
Ho provato a creare una pagina nuova mettendoci solo quella parte, ovviamente aggiungendo la riga
<?php
...Ho provato a fare ciò che mi hai detto e non solo non mi da le informazioni, ma questo errore:
Fatal error: Call to undefined function gdrcd_query() in /membri/x/pages/prova.inc.php on line 3 (cioè la seconda riga di quello che ho pubblicato prima). Sintatticamente mi sembra giusto, per cui suppongo non riconosca proprio la funzione gdrcd_query.
Ora provo a ricollegarlo, anche se normalmente non serve ç_ç.
Ps: player il campo ultimo_stipendio serve a quello :D
06/06/2016 23:08:25
fantamonterotondo ha scritto: Ho provato a creare una pagina nuova mettendoci solo quella parte, ovviamente aggiungendo la riga
<?php
...Ho provato a fare ciò che mi hai detto e non solo non mi da le informazioni, ma questo errore:
Fatal error: Call to undefined function gdrcd_query() in /membri/x/pages/prova.inc.php on line 3 (cioè la seconda riga di quello che ho pubblicato prima). Sintatticamente mi sembra giusto, per cui suppongo non riconosca proprio la funzione gdrcd_query.
Ora provo a ricollegarlo, anche se normalmente non serve ç_ç.
Ps: player il campo ultimo_stipendio serve a quello :D
Dopo aver riconnesso il risultato è questo:
Parse error: syntax error, unexpected T_VARIABLE in /membri/x/pages/prova.inc.php on line 4 (dopo aver incluso la connessione, la riga incriminata è sempre la stessa ç_ç)
06/06/2016 23:13:42 e modificato da blancks il 06/06/2016 23:22:08
fantamonterotondo ha scritto:
Dopo aver riconnesso il risultato è questo:
Parse error: syntax error, unexpected T_VARIABLE in /membri/x/pages/prova.inc.php on line 4 (dopo aver incluso la connessione, la riga incriminata è sempre la stessa ç_ç)
L'idea di usare un file nuovo e testare solo quel pezzo di codice è ugualmente valida se ti semplifica le cose :)
Comunque si: come hai intuito devi includere tutto il core di gdrcd per poter usare quelle funzioni.
Dalla posizione del tuo file prova.inc.php, il tuo file dovrebbe cominciare così:
<?php
// Includo il core
require "../includes/functions.inc.php";
require "../includes/constant_values.inc.php";
require "../config.inc.php";
require "../vocabulary/{$PARAMETERS['languages']['set']}.vocabulary.php";
// Avvio connessione db
gdrcd_connect();
// Script di test va qui..
Vedi se in questo modo riesci a superare l'errore di sintassi ;-)
Ah dimenticavo: no sessione, no party :-D
prima di gdrcd_connect() ti conviene avviare la sessione:
session_start();
06/06/2016 23:40:25
L'ho messo in main, per l'impossibilità di controllare la pagina di login, e funziona benissimo *_*'' invece in prova.inc.php ancora no, ma l'obiettivo è raggiunto, per cui grazie mille!
17/05/2020 21:24:26
Sembra che prende 2 volte un ruolo, il consiglio e' stampare a video il risultato della query e vedere quante righe di ruoli prende il codice. In questi casi conviene fare var_dump o print_r passo passo per vedere dove non si comporta come ti aspetti
18/05/2020 15:56:21
posta il tuo codice cosi' possiamo capirci qualcosa in piu'. Alla cieca per me e' molto difficile aiutarti
18/05/2020 22:37:41
while($row=gdrcd_query($result, 'fetch')){
$stipendio+=$row['stipendio'];
if($ultimo != strftime("%Y-%m-%d")){
gdrcd_query("UPDATE personaggio SET soldi = ".$stipendio.", ultimo_stipendio = NOW() WHERE nome = '".$_SESSION['login']."' AND ultimo_stipendio < NOW() LIMIT 1");
} }
Questa parte mi pare non sia corretta. In pratica tu dici al codice per ogni ruolo aggiungi il suo valore di stipendio alla tua variabile stipendio, nel caso il giorno di oggi e' diverso da $ultimo allora aggiorna il valore di soldi con il valore di stipendio. In pratica ogni volta cancella soldi e lo sostituisce con stipendio. In questo modo non tiene conto del capitale che aveva prima, solitamente si mette qualcosa come soldi = soldi + ".$stipendio." poi ultimo_stipendio < NOW() e' sempre vera quindi non ha senso inserirlo, LIMIT 1 non serve in quanto fai un update.
Per ottimizzare le risorse ti consiglio di tirare fuori dal while la query in questo modo viene calcolato la somma degli stipendi e poi fai una solo query per aggiornare il valore
19/05/2020 23:26:37
ti consiglio di mettere parte del codice nell'if
/*Stipendio*/
$row=gdrcd_query("SELECT soldi, banca, ultimo_stipendio FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
if($row['ultimo_stipendio'] != strftime("%Y-%m-%d")){
$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("UPDATE personaggio SET banca = banca + ".$stipendio.", ultimo_stipendio = NOW() WHERE nome = '".$_SESSION['login']."'");
}
In questo modo controlla se c'è la condizione per calcolare lo stipendio in caso contrario salta tutti il codice riguardante lo stipendio.
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Imperion ↗
RAID Shadow Legends ↗
Project Entropy ↗
Seconda Era ↗
Raja Dunia ↗
Foundation Galactic Frontier ↗
World of Warship ↗
Storie di Agarthi ↗
Hero Wars ↗