在我网站上的某个表单中,我有一个<select>
字段,如下所示:
<select name="doorno" required>
<option></option>
<option>01</option>
<option>02</option>
<option>03</option>
<option>04</option>
<option>05</option>
<option>06</option>
<option>07</option>
<option>08</option>
<option>09</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
<option>20</option>
<option>21</option>
<option>22</option>
<option>23</option>
<option>24</option>
</select></p>
用户应该可以选择01 - 24之间的数字 - 对吗?
但是在存储这些条目的表中,我看到了如下条目:
01,05
怎么会发生这种情况?当我尝试输入字段时我无法进入 - 我只能选择列表中的一个选项?
知道用户如何设法输入上面的选项吗?
修改 基于一些评论,我查看了数据库的后端,发现用户已经进行了多次选择。所以现在问题还有另一个相关的问题:
如果我没有在SELECT元素中指定MULTIPLE属性,是否意味着用户可以克服单一选择的默认行为?
答案 0 :(得分:5)
很简单,用户已经使用开发人员工具或使用JavaScript编辑了他的DOM。但事实是,这不是用户的错。
你不能盲目地信任来自客户的意见,你应该总是验证你所期望的(在这种情况下,数字在1到24之间)是你得到的。在这种情况下,可以通过以下方式轻松完成:
$input = (int) $input;
if ($input > 0 && $input <= 24) {
始终验证输入。总是
答案 1 :(得分:0)
至少有两种可能发生的方式:如果您在同一表单中拥有或拥有同名的另一个字段,则会提交两者中的值。此外,如果您在SELECT标记上有MULTIPLE属性,那么当时可能已提交了多个值。 (虽然,对于这两个示例,多个值如何连接到相同的数据库值超出了本答案的范围......)
答案 2 :(得分:0)
如果你问的是怎么可能,那么用户可以很容易地从浏览器中更改选择框中的选项。只是打开开发工具并进行编辑的情况。
黑客也可以在不使用HTML表单的情况下发布到您的网站,并提供完整的数据。
您永远不要相信来自浏览器的数据有效;在保存到数据库或使用它做任何其他事情之前,它总是在到达您的服务器时再次验证它。