HTML输入标记将占位符作为值传递给PHP


HTML input tag passing placeholder as value to PHP

我正试图在一个新的移动网站上实现"占位符"属性。遇到一个问题,如果用户将字段留空(显示占位符),则占位符将作为字段值提交给PHP,以便接收并放置在数据库中。相反,它应该(我认为)发送一个空值。这会导致服务器端验证出现问题——接收的PHP脚本认为提交了一个合法的值,而不是一个空值,这会向用户返回错误。

我希望能迅速解决这个问题。

下面的示例代码:

<form action="somepage.php" method="post">
<input type="text" name="yourName" placeholder="Enter your name here">
<input type="submit">
</form>

PHP看到:

$_POST['yourName'] = 'Enter your name here';

而不是:

$_POST['yourName'] = '';

后者正是我希望它看到的。

如有任何帮助,我们将不胜感激!!!

*编辑**

下面是一个有问题的表单示例:

https://www.badgleymischka.com/mobileTest.php

保持所有字段不变(请注意,在源代码中,这些字段是由占位符而非值填充的)。单击"继续"按钮,您将看到带有占位符值的_POST变量。

在页面加载的几个输入上,有东西正在删除placeholder属性文本。。。

根据您的源代码,您将调用两个不同的jQuery脚本。删除在关闭的<body />标签附近找到的。此可能与Foundation附带的占位符插件冲突。

<script src="js/vendor/jquery.js"></script>

但这可能是罪魁祸首:不确定你想在这里写什么。但这似乎就是问题所在。参见jquery.main.js中的line 17。将此全部删除。我认为这是不必要的,而且是矛盾的。

// clear inputs on focus
function initInputs() {
    PlaceholderInput.replaceByOptions({
        // filter options
        clearInputs: true,
        clearTextareas: true,
        clearPasswords: true,
        skipClass: 'default',
        // input options
        wrapWithElement: false,
        showUntilTyping: false,
        getParentByClass: false,
        placeholderAttr: 'value' // <-- ding, ding! Prob the conflictor, if not this entire function
    });
}

我无法重现您的错误。我使用Firefox 25和26、Chrome 31、IE 11、Opera 12.16和Safari 5.1.7进行了测试。从规范来看,我不认为占位符是要提交的,所以您确实遇到了某种错误。

我能想到的这种行为的唯一原因是,您在HTML中包含了一个(java)脚本,针对的是不支持HTML5(和placeholder属性)的浏览器。这样的脚本可能会用占位符填充空输入,但无法在提交表单之前删除它们。

如果确实是这种情况,并且您的问题是由这样的脚本引起的,则可以通过修复脚本或完全删除脚本来解决这些问题。如果选择修复脚本,则需要确保值等于占位符的输入重置为默认值。

我在自己的搜索中偶然发现了这个问题,所以如果其他人正在寻找答案,请尝试这个:

<input type="text" name="yourName" placeholder="Enter your name here" required>

通过在输入标记中添加"required",用户必须在提交之前填写此字段。

这应该像魅力一样工作,但我认为由于它在移动设备上,有些不同。

一个解决方案(我相信还有更好的解决方案)是用if进行检查。因此,如果值与占位符相同,则将其留空,然后继续验证。

同时尝试放置val="。