Refreh onclick non funzionante postato il 25/08/2018 20:14:18 nel forum programmazione, gdrcd e open source
Sera a tutti!
Stavo lavorando oggi su una modifica sostanziale al sistema di spesa punti esperienza di gdrcd per l'acquisto delle abilità,nel concreto cancellando quasi tutto il form pre-esistente per riscriverlo con un form ad input in php che si compone di un piccolo input type submit che una volta cliccato esegue una query mysqli aggiornando il database ed aggiungendo un punto alla abilità interessata.Tutto questo a patto che il check svolto da una if condition confermi che ci sono abbastanza punti esperienza per livellare la skill
FIn qui tutto bene:il form funziona e fila liscissimo, il problema sorge però dopo aver cliccato:infatti fino a che non si clicca una seconda volta sul submit la schermata, almeno in lato client, non si aggiorna il che è un problema, visto che in questa maniera si ha a disposizione un click extra che elude il check svolto dalla if e di cui i furbetti potrebbero approfittare.
Ho già provato ad agire usando una funzione javascript onclick sul submit(in particolare location.refresh(true),location.refresh(false), window.location.refresh(true) e location.refresh(false))ma non ha risolto il problema, visto che di fatto la pagina sembra ricaricare, ma solo in alcune sue parti(elenco presenti, messaggi etc etc) che ovviamente non includono il centro della pagina.
Qualcuno ha qualche consiglio?
Allego qui di seguito la parte interessata del codice,se mai potesse essere utile.Non me ne vogliate se è un tantinello spaghettoso u.u
Pagine → 1
25/08/2018 20:21:27
Discussione spostata in "GDRCD e Open Source"
25/08/2018 20:44:44
Ma se invece fai un location.href o location.reload?
25/08/2018 20:52:14 e modificato da cybershadow il 25/08/2018 20:55:34
25/08/2018 23:45:55
location.href = '/nuova-pagina.html';
Questo fa un redirect alla pagina che metti tu.
26/08/2018 02:25:49 e modificato da cybershadow il 26/08/2018 02:32:33
26/08/2018 06:54:55
Ora ti basta farti una select ad inizio pagina che si calcola il valore aggiornato, così quando farai il reload della pagina dovrebbe ritrovarsi il valore nuovo e non quello vecchio.
26/08/2018 10:12:33 e modificato da cybershadow il 26/08/2018 11:13:32
26/08/2018 18:17:41
Il tuo problema non è un bug del sistema o del browser, è proprio un errore nella logica di quello che hai scritto. Quindi usare dei trucchi come "location.reload" per aggirarlo non risolverà il problema.
L'errore principale è molto semplice: il codice che aggiorna il grado della skill è posizionato in fondo alla pagina.
Dato che sia la query SELECT sia la stampa del form avvengono *prima* della query di UPDATE è ovvio che al primo submit i dati mostrati dalla pagina siano errati, dato che vengono stampati prima di venire aggiornati. Il problema non è che la pagina non si aggiorna (anzi la pagina di aggiorna perfettamente) è che gli stai facendo stampare delle informazioni vecchie.
Sposta la query di update fuori dal for principale e all'inizio della pagina e vedrai che le informazioni stampate saranno giuste.
Aggiungo una cosa: il tuo if che controlla se il giocatore ha abbastanza exp da spendere puoi farlo al momento della stampa (come stai facendo), ma *DEVI* anche rifarlo prima della query di UPDATE: altrimenti un giocatore che vuole fregarti potrebbe sempre fare F5 e aggiungersi tutti i gradi che vuole.
26/08/2018 18:50:36
Pagine → 1
Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD e Open Source Elenco Forum
shirka ha risposto alla discussione: Perché non avete più voglia di giocare?