输入值可以与 HTML 表单中的占位符相同吗?

Posted

技术标签:

【中文标题】输入值可以与 HTML 表单中的占位符相同吗?【英文标题】:Can the input value be the same as a placeholder in an HTML form? 【发布时间】:2016-10-20 19:54:15 【问题描述】:

我有一个接受 CVV 编号作为字段项之一的 html 表单 -

<label for="cvv">CVV</label>
<input type="text" placeholder="123" maxlength="3" id="cvv" name="cvv">

如您所见,它有一个placeholder="123"。我正在将 CVV 编号作为数组的一部分输入到我的数据库中 -

$pay = array(
    'cardno' => $cardno,
    'exp' => $this->input->post('exp'),
    'cvv' => $this->input->post('cvv'),
    'name' => $this->input->post('name'),
    'org' => $this->session->userdata['user_data']['org']
    );
$this->db->insert('payment', $pay);

我可以将任何 CVV 值输入到数据库中,除了 123,它与占位符值相同。我不断收到以下错误 -

Error Number: 1366

Incorrect integer value: '' for column 'cvv' at row 1

INSERT INTO `payment` (`cardno`, `exp`, `cvv`, `name`, `org`) VALUES ('6547893210258135', '04/20', '', 'Joe Bloggs', '15')

Filename: C:\xampp\htdocs\ci_redesign_newdb\system\database\DB_driver.php

Line Number: 330

当我在将$pay 数组插入数据库之前打印cvv as 123 时,CVV 字段为空 -

Array ( [cardno] => 6547893210258135 [exp] => 04/20 [cvv] => [name] => Joe Bloggs [org] => 15 )

但是,如果我将 CVV 值更改为其他值,CVV 字段将被填充 -

Array ( [cardno] => 6547893210258135 [exp] => 04/20 [cvv] => 103 [name] => Joe Bloggs [org] => 15 )

并且由于该字段已填充,因此我可以将其输入数据库而不会出现任何错误。表单不接受与字段占位符相同的值(在这种情况下为 123)可能是什么原因?

编辑 1

表单中的所有输入字段似乎都存在此问题。我只注意到cvv,因为我碰巧输入了123 作为测试。因此,看起来输入的输入值与占位符值相同的所有字段都没有被输入。

编辑 2 - 问题来源

看起来问题源于 jQuery 源文件版本 2.0.3。我在我的代码中注释掉了该文件 -

<script src='<?php echo base_url(); ?>assets/js/jquery-2.0.3.min.js'></script>

并且我能够发布与占位符相同的输入值 -

Array ( [cardno] => 1234567890123456 [exp] => mm/yy [cvv] => 123 [name] => Name [org] => 15 )

这个问题可以通过编辑 jQuery 源文件来解决吗?我应该做出这样的改变吗?不想做出可能导致其他地方出现问题的更改。

【问题讨论】:

您确定要在 cvv 中插入任何值吗?再次检查您的验证。您是否尝试过通过 phpMyAdmin 插入 123?如果有效,则说明您的代码有问题。 @BenJunior 我确定我将值 123 插入到 cvv 中。在我的本地主机和测试服务器上检查了多次。我可以在 SQLyog 中手动输入值。我敢肯定,代码中肯定有问题。 php 没问题,因为它能够插入 123 以外的值。我认为占位符在某种程度上导致了冲突。 好吧,将占位符设为103 并尝试使用123103 这两个值。还要注意maxlength - CVV 的长度可以是 4 位数。 当您说您在 cvv 字段中输入了占位符值时,您是实际输入了它还是只是留下了该字段中的占位符文本。占位符文本通常不会发送到服务器,因此您需要在 cvv 输入中按字面意思键入 123,服务器才能看到该值。 该页面上是否有任何 javascript 处于活动状态? 【参考方案1】:

这真的很奇怪。我确定有一些 JavaScript 代码或您正在使用的库导致了这种情况。

解决问题的一种可能方法是在提交之前删除/更改输入的占位符属性。

例如;

<form id="yourform" name="yourform">
 <input type="text" placeholder="123" id="cvv"/>
 <div class="button" onclick="submitForm()">Submit</div>
</form>

在 JS 中;

function submitForm()
   document.getElementById("cvv").placeholder = "";
    //Do it for all of your input elems.

   document.yourform.submit();

不确定它是否会起作用,我也不知道解决它的实际正确方法,但可以解决问题。

【讨论】:

这是一个很好的解决方法。谢谢!问题似乎是我正在使用的 jQuery 源文件。我将编辑问题以发布更多详细信息。

以上是关于输入值可以与 HTML 表单中的占位符相同吗?的主要内容,如果未能解决你的问题,请参考以下文章

IE浏览器中的占位符文本问题(8-9)

表单中输入占位符字段中的 Html 仅颜色 (*) 符号

Tailwind CSS 更改占位符选项的文本颜色

文本区域表单中的 Html 占位符文本

在 Prototype 中使用表单验证的 HTML5 表单占位符回退

将 HTML5 占位符属性添加到 Spring 3.0 表单输入元素