MySQL и PHP — списки выбора/опций и показ данных пользователям, что по-прежнему позволяет мне генерировать запросы.
-
23-09-2019 - |
Вопрос
Извините за неясный заголовок, пример прояснит ситуацию:
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
и timestamp
являются автоматическими вставками базы данных при добавлении остальных 4 полей.
Первое, что следует отметить, это то, что пользователь может записать несколько игр одного и того же сценария (сценария) в одну и ту же дату (игровую дату), возможно, с одним и тем же результатом (сторона = победитель).Следовательно, для надежности необходим уникальный идентификатор и временные метки.
Теперь на их странице пользователя я показываю историю их записанных игр в формате <select><option>...
форма списка с двумя кнопками в конце - Delete Record
и Go to Scenario
Мой сценарий принимает scenid
и после попадания в несколько других таблиц возвращается что-то более удобное для пользователя, например:
(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]
в 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>
Теперь, если вы выделите первую запись и щелкните Go to Scenario
там достаточно информации, чтобы я мог ее проанализировать и создать именно тот сценарий, который вы хотите увидеть.Однако, если бы вы выбрали Delete Record
нет - у меня есть playdate
и я могу разобрать scenid
и side
из того, что указано в списке, но в этом примере все три записи будут иметь одинаковый результат.
Кажется, я загнал себя в угол.Есть ли у кого-нибудь предложения относительно того, как я могу получить некоторые уникальные идентификационные данные (ID
и/или timestamp
) перемещаться по этой форме, не показывая ее пользователю?
Только PHP, пожалуйста, я должен быть совместим с NoScript!
Решение
Вы можете установить value
атрибут ваших опций и сделайте так, чтобы он содержал ID
(что уникально) ваших данных:
<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>
Затем, получив опубликованные данные, $_POST['history']
будет содержать ID
которые соответствуют записи, выбранной пользователем.
И, поскольку это ID
уникален, вы можете использовать его для идентификации, вне всякого сомнения, ваших данных.
Содержание value
Атрибут, если он установлен, передается на сервер при отправке формы — он не отображается пользователю.
Когда нет value
установлен для параметра, браузер передаст содержимое этого параметра на сервер при отправке формы — именно это вы и получили.
В качестве примечания:как и в случае со всем, отправленным пользователем, вы должны проверить, что значение, полученное для $_POST['history']
является действительным, безопасным и все такое - оно должно быть целым числом, оно должно быть одним из значений, к которым пользователь может получить доступ,...