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

vin*_*aya 1 forms html5

在我网站上的一个表格中,我有一个<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>
Run Code Online (Sandbox Code Playgroud)

用户应该能够选择01 - 24之间的数字 - 对吗?

但是在存储这些条目的表中,我看到如下条目:

01,05
Run Code Online (Sandbox Code Playgroud)

怎么会发生这种情况?当我尝试输入字段时我无法进行 - 我只能选择列表中的一个选项?

知道用户如何设法输入上面的选项吗?

编辑 基于一些评论,我查看了数据库的后端,发现用户做了多个选择.所以现在问题有另一个相关的问题:

如果我没有在SELECT元素中指定MULTIPLE属性,是否意味着用户可以克服单个选择的默认行为?

Mad*_*iha 5

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

是你的!

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

$input = (int) $input;
if ($input > 0 && $input <= 24) {
Run Code Online (Sandbox Code Playgroud)

始终验证输入.总是.

  • @vinaya:验证!=卫生.您清理(或者更确切地说,使用预准备语句)以确保数据不会破坏您的查询.您**验证**以确保数据符合您的预期(即数字,而不是单词或范围) (3认同)