HTML表单 - 为什么我经常看到<input name =“next”/>?澄清“名称”属性的作用

时间:2014-01-12 03:45:11

标签: html django forms

我总是对'name'属性在html表单中的作用感到困惑。从我阅读的教科书(html和css,由John Duckett设计和构建网页),这就是它对'name'属性所说的。

When users enter information 
into a form, the server needs to 
know which form control each 
piece of data was entered into. 
(For example, in a login form, the 
server needs to know what has 
been entered as the username 
and what has been given as the 
password.) Therefore, each form 
control requires a name attribute. 
The value of this attribute 
identifies the form control and is 
sent along with the information 
they enter to the server.

从阅读本文开始,我一直认为,在数据库中有一个名为“theUsersPasswordField”的字段和一个名为“theUsersUsernameField”的字段。我想,假设有一个注册表格,那么表格就像:

<form action="aURL" method="post">
    <p>Please enter what you want your Username to be:</p>
    <input type="submit" name="theUsersUsernameField" />
    <p>Please enter what you want your Password to be:</p>
    <input type="password" name="theUsersPasswordField" />
</form>

然后这样,当信息发送到数据库时,它将知道将哪些信息放入'theUsersPasswordField'以及将哪些信息放入“theUsersUesrnameField”。我错了吗?

name =“next”是什么意思?当我查看html表单时,我经常看到它,例如,在我正在做的Django教程中:

<form method="post" action=".">
    <p><label for="id_username">Username:</label></p>
    <p><label for="id_password">Password:</label></p>
    <input type="hidden" name="next" value="/" />
    <input type="submit" value="login" />
</form>

在我正在做的教程中,它说

The html form contains a submit button and a hidden
field called next. This hidden variable contains a URL that tells the view where to
redirect the user after they have successfully logged in

现在,“下一个”网址怎么样?当我运行代码时,表单确实成功地重定向到主页面,但它如何知道重定向到主页面?为什么name ='next'?

服务器如何知道将哪些信息视为用户名以及将哪些信息视为密码?我认为这就是'name'属性用于什么?

2 个答案:

答案 0 :(得分:3)

name等控制元素中的input属性为控件指定了一个名称。它有两个基本效果:1)控件需要一个名称才能“成功”,这意味着当提交表单时,它的名称=值对将被包含在表单数据中; 2)属性指定将包含的内容作为name = value对的第一部分。

完全取决于服务器端表单处理程序,它将对表单数据中的name = value对执行什么操作(如果有的话)。它们可能在某些数据库中有简单的对应关系,但这只是一种可能性。表单处理根本不需要基于数据库。

name属性值在HTML中没有预定义含义。它们只是在这种情况下选择使用的字符串,它们可能是描述性的或助记符,或者它们可能不是。

但是,选择name属性值可能会产生副作用。浏览器可以向用户提供先前输入的数据的菜单,以便在填写例如有一个名为email的控件的几种形式(可能在不同的站点中),您可能只需输入一次电子邮件地址,然后接受浏览器建议的任何输入。这可能被视为一种便利或对数据安全的威胁。在HTML5 CR中提出了set of “standard” name用于许多目的。

为了完整性,需要添加一下,在浏览器实践中,根据HTML5 CR description of name,两个名称具有特殊含义:_charset_isindex

名称next绝不是特别的,但在此上下文中,它似乎指定要移动到的下一页。它是为隐藏字段定义的,因此它独立于用户输入生效。

答案 1 :(得分:1)

  

然后这样,当信息发送到数据库时,它将知道将哪些信息放入'theUsersPasswordField'以及将哪些信息放入“theUsersUesrnameField”。我错了吗?

您必须编写一个脚本(例如在php中),它会将表单中的正确值(它们位于$ _POST数组中)放入数据库中。

在您的示例中

$ _POST ['theUsersUsernameField']将保留用户名

<form method="post" action=".">
<p><label for="id_username">Username:</label></p>
<p><label for="id_password">Password:</label></p>
<input type="hidden" name="next" value="/" />
<input type="submit" value="login" />
</form>
  

怎么'下一个'网址?

接下来不是网址 动作=“。”是形式重定向的网址。 /是脚本将评估的值,以查看它必须执行的操作。 (通常你必须将其更改为“检查密码”之类的其他内容)

在$ _POST []数组中会有一个键$ _POST ['next'],值为/

我不熟悉Django,但我希望这有帮助