<select>字段中意外输入!这是怎么发生的?</select>

时间:2013-08-24 06:03:40

标签: html5 forms

在我网站上的某个表单中,我有一个<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属性,是否意味着用户可以克服单一选择的默认行为?

3 个答案:

答案 0 :(得分:5)

很简单,用户已经使用开发人员工具或使用JavaScript编辑了他的DOM。但事实是,这不是用户的错。

这是你的!

你不能盲目地信任来自客户的意见,你应该总是验证你所期望的(在这种情况下,数字在1到24之间)是你得到的。在这种情况下,可以通过以下方式轻松完成:

$input = (int) $input;
if ($input > 0 && $input <= 24) {

始终验证输入。总是

答案 1 :(得分:0)

至少有两种可能发生的方式:如果您在同一表单中拥有或拥有同名的另一个字段,则会提交两者中的值。此外,如果您在SELECT标记上有MULTIPLE属性,那么当时可能已提交了多个值。 (虽然,对于这两个示例,多个值如何连接到相同的数据库值超出了本答案的范围......)

答案 2 :(得分:0)

如果你问的是怎么可能,那么用户可以很容易地从浏览器中更改选择框中的选项。只是打开开发工具并进行编辑的情况。

黑客也可以在不使用HTML表单的情况下发布到您的网站,并提供完整的数据。

永远不要相信来自浏览器的数据有效;在保存到数据库或使用它做任何其他事情之前,它总是在到达您的服务器时再次验证它。