【问题标题】:HTML input tag passing placeholder as value to PHP将占位符作为值传递给 PHP 的 HTML 输入标记
【发布时间】:2013-12-10 19:06:51
【问题描述】:

我正在尝试在新的移动网站上实现“占位符”属性。遇到一个问题,如果用户将该字段留空(显示占位符),则该占位符将作为字段值提交,以便 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

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

【问题讨论】:

  • placeholder 是 HTML5 属性。您是否设置了正确的文档类型(即&lt;!DOCTYPE html&gt;)?
  • 目前还不是一个解决方案,但将来可能会有所帮助,现在肯定会有所帮助:在某些时候将required 放入您的&lt;input&gt; 中,例如&lt;input type="text" name="yourName" placeholder="Enter your name here" required&gt;
  • 你能提供代码来重现它吗?发布的 HTML 表单可以正常工作(即使我刚刚使用了 &lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;YOURFORM&lt;/body&gt;&lt;/html&gt;
  • this(awful) W3Schools page test 中,它可以按您的预期工作,但它似乎在 Classic ASP 中(啊!)...
  • 您是否包含任何用于占位符浏览器支持的 javascript?

标签: php html forms


【解决方案1】:

某些内容正在删除多个输入上页面加载时的 placeholder attr 文本...

根据您的来源,您正在调用两个不同的 jQuery 脚本。删除在您的结束 &lt;body /&gt; 标记附近找到的此内容。这可能与 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
    });
}

【讨论】:

  • 奇怪,这是我发布的一个示例表单,用于演示该问题。期待您的反馈:badgleymischka.com/mobileTest.php
  • 那么那个神秘的剧本怎么样? ;) +1 虽然答案。
  • 嘿-我从不排除它,哈哈。只是根据我得到的答案(回复:$_POST 数据)来回答,这与问题毫无关系 - 很明显!不过,你把它钉住了。 :D
  • 原来这一直是问题所在。删除脚本可以解决问题。谢谢!!!!!!
【解决方案2】:

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

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

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

【讨论】:

  • 这不是答案
  • @kingkero 我把我的答案用完了,我认为现在应该是一个有效的答案。
  • 嗯,这可能是一个争论的问题。但既然你在假设和/或质疑,我个人会把它作为评论发布。答案应该就是这样——答案。即使你是对的,如何解决这个问题?现在的解决方案将是一个答案;)
  • 你在玩“假设”的人吗?大声笑基于给出的代码你的答案。不是你认为存在的一些神秘脚本。这也不是一个真正的答案 - 更多的是评论。相反,您应该询问 OP 他们是否使用了第三方脚本,进行故障排除,并据此提交答案。
  • @MikeBarwick OP 没有提供完整的 HTML 文件,所以我如何确定他没有包含一些 JavaScript 以支持旧版浏览器?这是造成这种行为的最明显原因。
【解决方案3】:

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

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

通过在输入标签中添加“必填”,用户必须在提交前填写此字段。

【讨论】:

  • OP 的问题是关于 placeholder 已传递给服务器端语言。
【解决方案4】:

这应该像魅力一样起作用,但我认为因为它在移动设备上有所不同。

一种解决方案(我相信有更好的解决方案)是用 if 来检查它。 因此,如果该值与占位符相同,则将其设为空白,然后继续验证。

也尝试输入 val=""。

【讨论】:

  • PHP如何知道哪个值是占位符?
  • 我说我不知道​​出了什么问题,因为它是移动设备(而且我们不知道浏览器),我们没有其余代码来检查他是否使用 HTML 5,我说不是最好的解决方案,它只是一个解决方案。PHP 不应该知道占位符中的内容,但请查看此“PHP 看到:$_POST['yourName'] = 'Enter your name here';”他说了算。所以我建议将其作为解决方案进行检查。请先阅读问题。
  • 不是。想象一下不同的文件,一种形式和一种 PHP 解释它。 PHP如何知道哪个值是占位符(除非您在两边都默认设置它,这不是一个解决方案,而是一个丑陋的解决方法,因为可能存在“清理”JS函数,所以这里甚至不需要)?
  • 我明白了你的意思,抱歉,是的,它是一个丑陋的工作区,我会尝试为他提供一个不错的 js 功能。我以为你说的是​​占位符的第一个值,我就像 waa? :P
  • 这个不需要js函数...!?
猜你喜欢
  • 1970-01-01
  • 2016-04-18
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多