MySQL e PHP - selezionare / opzione di liste e mostrando dati agli utenti che consente ancora di me per generare query
-
23-09-2019 - |
Domanda
Ci scusiamo per il titolo chiaro, un esempio sarà chiaro le cose:
TABLE: Scenario_victories
ID scenid timestamp userid side playdate
1 RtBr001 2010-03-15 17:13:36 7 1 2010-03-10
2 RtBr001 2010-03-15 17:13:36 7 1 2010-03-10
3 RtBr001 2010-03-15 17:13:51 7 2 2010-03-10
ID
e timestamp
sono auto-inserimenti dal database quando vengono aggiunti gli altri 4 campi.
La prima cosa da notare è che un utente può registrare più playings dello stesso scenario (scenid) alla stessa data (playdate) possibilmente con lo stesso risultato (lato = vincitore). Da qui la necessità per l'ID univoco e timestamp per buona misura.
Ora, sulla loro pagina utente, sto mostrando la loro storia di gioco registrati in forma lista <select><option>...
con 2 pulsanti alla fine - Delete Record
e Go to Scenario
Il mio script prende il scenid
e dopo aver colpito un paio di altri tavoli torna con qualcosa di più user-friendly come:
(playdate) (from scenid) (from side)
#########################################################
# 2010-03-10 Road to Berlin #1 -- Germany, Hungary won #
# 2010-03-10 Road to Berlin #1 -- Germany, Hungary won #
# 2010-03-10 Road to Berlin #1 -- Soviet Union won #
#########################################################
[Delete Record] [Go To Scenario]
in HTML:
<select name="history" size=3>
<option>2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option>2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option>2010-03-10 Road to Berlin #1 -- Soviet Union won</option>
</select>
Ora, se si dovesse evidenziare il primo record e fare clic Go to Scenario
c'è abbastanza informazioni lì per me per analizzare e produrre lo scenario esatto che si desidera vedere. Tuttavia, se si dovesse selezionare Delete Record
non c'è -. Ho la playdate
e posso analizzare il scenid
e side
da ciò che è elencato, ma in questo esempio tutti e tre i record avrei lo stesso risultato
mi sembra di essermi dipinto in un angolo. Qualcuno ha un suggerimento su come posso ottenere alcuni dati identificativi unici (ID
e / o timestamp
) per cavalcare lungo su questa forma senza mostrare all'utente?
PHP-solo per favore, devo essere NoScript compatibile!
Soluzione
È possibile impostare un attributo value
sulle opzioni, e renderlo contenere il ID
(che è unico) dei suoi dati:
<select name="history" size=3>
<option value="1">2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option value="2">2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option value="3">2010-03-10 Road to Berlin #1 -- Soviet Union won</option>
</select>
Poi, quando si ricevono i dati che è stato pubblicato, $_POST['history']
conterrà la ID
che corrispondono alla voce scelto dall'utente.
E, in quanto questo ID
è unico nel suo genere, è possibile utilizzare per identificare, senza alcun dubbio, i vostri dati.
Il contenuto dell'attributo value
, se impostato, viene passato al server quando il modulo viene inviato -. Non è visualizzato per l'utente
Se non value
è impostato per un'opzione, il browser passerà il contenuto di tale opzione per il server, quando il modulo viene inviato. - che è quello che si stavano diventando
Come sidenote: come con tutto presentato da un utente, è necessario verificare che il valore ricevuto per $_POST['history']
è valida, sicura, e tutto ciò che - dovrebbe essere un numero intero, dovrebbe essere uno uno dei valori che l'utente può accesso, ...