MySQL e PHP - listas de seleção/opção e exibição de dados aos usuários que ainda me permitem gerar consultas

StackOverflow https://stackoverflow.com/questions/2541643

  •  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!

Foi útil?

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, ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top