抱歉,标题不明确,举个例子说明一切:
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) 录制同一场景 (scenid) 的多次播放,结果可能相同(side = winner)。因此需要唯一的 ID 和时间戳才能很好地衡量。
现在,在他们的用户页面上,我在 <select><option>...
中显示他们录制的播放历史记录末尾有 2 个按钮的列表表单 - 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']
是有效的、安全的,以及所有这些——它应该是一个整数,它应该是用户可以访问的值之一,...
关于php - MySQL 和 PHP - 选择/选项列表并向用户显示仍然允许我生成查询的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2541643/