MySQL e PHP - listas de seleção/opção e exibição de dados aos usuários que ainda me permitem gerar consultas
-
23-09-2019 - |
Pergunta
Desculpe pelo título pouco claro, um exemplo irá esclarecer as coisas:
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
são inserções automáticas pelo banco de dados quando os outros 4 campos são adicionados.
A primeira coisa a notar é que um usuário pode gravar múltiplas jogadas do mesmo cenário (scenid) na mesma data (playdate), possivelmente com o mesmo resultado (lado = vencedor).Daí a necessidade de um ID exclusivo e carimbos de data/hora para uma boa medida.
Agora, na página do usuário, estou exibindo o histórico de reprodução gravado em um <select><option>...
formulário de lista com 2 botões no final - Delete Record
e Go to Scenario
Meu script leva o scenid
e depois de acertar algumas outras mesas retorna com algo mais amigável como:
(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]
em 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>
Agora, se você destacar o primeiro registro e clicar Go to Scenario
há informações suficientes para eu analisá-las e produzir o cenário exato que você deseja ver.No entanto, se você selecionasse Delete Record
não há - eu tenho o playdate
e posso analisar o scenid
e side
do que está listado, mas neste exemplo todos os três registros teriam o mesmo resultado.
Pareço ter me encurralado.Alguém tem uma sugestão de como posso obter alguns dados de identificação exclusivos (ID
e/ou timestamp
) seguir este formulário sem mostrá-lo ao usuário?
Somente PHP, por favor, devo ser compatível com NoScript!
Solução
Você pode definir um value
atributo em suas opções e faça com que ele contenha o ID
(que é único) dos seus dados:
<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>
Então, ao receber os dados que foram postados, $_POST['history']
conterá o ID
que correspondem à entrada escolhida pelo usuário.
E, como isso ID
é único, você pode usar para identificar, sem qualquer dúvida, seus dados.
O conteúdo do value
O atributo, quando definido, é passado ao servidor quando o formulário é enviado - não é exibido ao usuário.
Quando não value
estiver definido para uma opção, o navegador passará o conteúdo dessa opção para o servidor, quando o formulário for enviado - que é o que você estava recebendo.
Como uma nota rodapé :como acontece com tudo enviado de um usuário, você deve verificar se o valor recebido para $_POST['history']
é válido, seguro e tudo mais - deve ser um número inteiro, deve ser um dos valores que o usuário pode acessar, ...