MySQL & PHP - списки выбора / опции и показ данных пользователям, которые все еще позволяют мне генерировать запросы - PullRequest
1 голос
/ 30 марта 2010

Извините за неясное название, пример прояснит ситуацию:

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 полей.

Первое, на что следует обратить внимание, - это то, что пользователь может записать несколько игр одного и того же сценария (сценид) в одну и ту же дату (playdate), возможно, с одинаковым результатом (сторона = победитель). Отсюда необходимость уникального идентификатора и временных меток для правильного измерения.

Теперь на их странице пользователя я отображаю их записанную историю воспроизведения в виде списка <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-совместимым!

1 Ответ

4 голосов
/ 30 марта 2010

Вы можете установить атрибут 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'], является действительным, безопасным, и все это - это должно быть целое число, оно должно быть одно из значений пользователь может получить доступ, ...

...