Javascript <;输入类型=";“隐藏的”>;?

Javascript <;输入类型=";“隐藏的”>;?,javascript,html,history,Javascript,Html,History,我对标记的最初用途很好奇 现在,它经常与JavaScript一起使用,用于存储发送到服务器的变量等 HTML2.0于年发布,已包含 JavaScript已经发布 因此,在JavaScript之前就已经存在了,那么它最初的目的是什么呢?我只能想象从服务器向客户机发送一个值,该值(不变)被发送回以保持某种状态。或者我在它的历史中犯了什么错误,总是应该与JavaScript一起使用吗 如果可能,请在您的答案中提供参考。简而言之,最初的目的是创建一个字段,该字段将与表单的提交一起提交。有时,需要在隐

我对
标记的最初用途很好奇

现在,它经常与JavaScript一起使用,用于存储发送到服务器的变量等

  • HTML2.0于年发布,已包含
  • JavaScript已经发布
因此,
在JavaScript之前就已经存在了,那么它最初的目的是什么呢?我只能想象从服务器向客户机发送一个值,该值(不变)被发送回以保持某种状态。或者我在它的历史中犯了什么错误,
总是应该与JavaScript一起使用吗


如果可能,请在您的答案中提供参考。

简而言之,最初的目的是创建一个字段,该字段将与表单的提交一起提交。有时,需要在隐藏字段中存储一些信息(例如,用户id),并在表单提交时提交

自1995年9月22日起

带有“TYPE=HIDDEN”的输入元素表示隐藏字段。用户 不与该领域互动;取而代之的是VALUE属性 指定字段的值。名称和值属性是 必需的

我只能想象从服务器向客户机发送一个值,该值(不变)被发送回以保持某种状态

没错。事实上,它今天仍然被用于这个目的,因为我们今天所知道的HTTP仍然是,至少从根本上说,一个无状态协议

这个用例实际上是在中首先描述的(我很惊讶HTML2.0没有包括这样的描述):

type=hidden

不应呈现这些字段,而应为服务器提供使用表单存储状态信息的方法。提交表单时,将使用由相应属性定义的名称/值对将其传递回服务器。这是一个解决HTTP无状态的方法。另一种方法是使用HTTP“Cookies”



值得一提的是,HTML 3.2仅在JavaScript首次发布后才成为W3C推荐标准,但可以安全地假设,隐藏字段几乎总是用于相同的目的。

这里我将提供一个简单的服务器端真实世界示例,假设记录是循环的,并且每条记录都有一个带有删除按钮的表单,您需要删除一条特定的记录,因此这里出现了
hidden
字段,否则您将无法获得要删除的记录的引用,在这种情况下,它将是
id

比如说

<?php
    if(isset($_POST['delete_action'])) {
        mysqli_query($connection, "DELETE FROM table_name 
                                   WHERE record_id = ".$_POST['row_to_be_deleted']);
                                   //Here is where hidden field value is used
    }

    while(condition) {
?>
    <span><?php echo 'Looped Record Name'; ?>
    <form method="post">
        <input type="hidden" name="row_to_be_deleted" value="<?php echo $record_id; ?>" />
        <input type="submit" name="delete_action" />
    </form>
<?php
    }
?>


基本上,隐藏字段将更有用,并具有多步骤表单使用的优势。 我们可以使用隐藏字段将一步信息传递到下一步,并将其转发到最后一步

  • CSRF代币
  • 是一个非常常见的网站漏洞。在所有表单提交中都需要一个秘密的、特定于用户的令牌,这将防止CSRF攻击,因为攻击站点无法猜测正确的令牌是什么,并且它们代表用户执行的任何表单提交都将始终失败

  • 在多页表单中保存状态
  • 如果需要在多页表单中存储用户当前所在的步骤,请使用隐藏的输入字段。用户不需要查看此信息,因此将其隐藏在隐藏的输入字段中

    一般规则:
    使用该字段可存储用户不需要查看的内容,但您希望在提交表单时发送到服务器的内容。

    表单元素的值(包括type='hidden')在发布表单时提交到服务器。input type=“hidden”值在页面中不可见。例如,在隐藏字段中维护用户ID是许多用途之一

    因此,使用隐藏字段进行向上投票单击

    <input value="16293741" name="postId" type="hidden">
    
    
    

    使用此值,服务器端脚本可以存储upvote。

    主题外,尽管维护状态也是我的选择,但允许跟踪预填充状态(例如编辑期间的代理PK)这将自动包含在提交的表单POST/GETExisting中,然后JavaScript支持更多的理由(也就是说,它不会像这个问题所暗示的那样从任何理由中减损)-在表单提交之前,没有JavaScript来“存储变量”或在“非隐藏”输入字段中调用AJAX或存根。。对于其他不正当的黑客行为,比如隐藏普通文本输入,也没有CSS。你能详细说明这个答案和/或在表单提交后提交隐藏字段的行为吗?@GitaarLAB,我举了一个例子(用户Id)。。。无论如何,在网络上有很多例子。例如,我很抱歉,对我来说:
    行的最初目的是创建一个字段,该字段将在*表单提交之后提交
    。它可以解释为:“表单发布数据后,隐藏字段将被提交(到一个神秘的地方)”。因此,我在上面的评论。我明白了:)谢谢你的评论,我已经编辑了我的答案。只是拼错了(英语还没有达到大师级:D)。哈哈,接得好!当我在值的末尾附加一个“x”时,向上投票时会发生错误:D@Uooo您可以取消隐藏它或直接更改值。您可以将该值更改为其他答案。然后,您可以单击向上投票按钮,并将其记录为向上投票,以获得不同的答案。;)很好的例子,除了真正的代码外,其他代码应该使用准备好的语句或其他方式来安全地处理SQL输入。关于使用“隐藏”输入来存储数据,我不喜欢的一点是,这些数据可以由用户操作,当然,可能只有了解HTML以及如何通过开发工具修改它的人,但是,如果修改这些值会损坏其他数据(例如,如果您正在存储主键引用和它),则可能会对数据库产生不良影响
    <input value="16293741" name="postId" type="hidden">