首页 | 免费域名 | 个人服务器 | 一流信息监控拦截系统 | 虚拟主机知识库 | ASP 空间 | ASP技术大全 | 下载中心 | 客户服务中心
  7i24 > ASP技术大全 > ASP快速入门(微软版) >
    7i24 .Com  
  处理用户输入

7i24.Com不停为您服务
处理用户输入
使用 ASP 的 Request 对象,可以创建简单但功能强大的脚本,用于收集并处理由 HTML 表单收集的数据。在本主题中,您不仅可以学习如何创建基本表单处理脚本,还可以获得验证服务器和用户浏览器上的表单数据的技术。

关于 HTML 表单
HTML 表单是收集基于 Web 的信息最常用的方法,它由特殊的 HTML 标记(用于修饰 Web 页上的用户界面元素)排列组成。文本框、按钮和复选框是元素示例,这些元素可以使用户与 Web 页进行交互并将信息提交给 Web 服务器。

例如,下面的 HTML 标记生成一个表单,用户可以在里面输入他们的名字、姓氏和年龄,并且还包括一个按钮,用于将信息提交给 Web 服务器。该表单中还包括一个隐藏的输入标记(在 Web 浏览器中不显示),用来传递其他信息到 Web 浏览器。

<FORM METHOD="Post" ACTION="Profile.asp">
<INPUT TYPE="Text" NAME="FirstName">
<INPUT TYPE="Text" NAME="LastName">
<INPUT TYPE="Text" NAME="Age">
<INPUT TYPE="Hidden" NAME="UserStatus" VALUE="New">
<INPUT TYPE="Submit" VALUE="Enter">
</FORM>
要详细描述全部 HTML 表单标记已超出本主题的范围,不过,您可以使用许多其他信息资料来学习创建丰富实用的表单。例如,使用 Web 浏览器的查看源文件功能来查看其他 Web 站点上的表单是如何创建的。另外,还可以访问位于 http://msdn.microsoft.com/ 的 Microsoft MSDN 联机 Web 站点,学习如何与其他 Internet 技术一起使用 HTML 表单的创新方法。

使用 ASP 处理表单输入
创建 HTML 表单后,需要处理用户输入,也就是将信息发送到 .asp 文件中进行分析和处理。让我们再检查一下上例中的 HTML 代码。注意到 <FORM> 标记的 ACTION 属性引用了一个称为 Profile.asp 的文件。当用户提交 HTML 信息时,浏览器使用 POST 方法将信息发送到服务器上的 .asp 文件中,这里是 Profile.asp。.asp 文件可能包含脚本,这些脚本用来处理信息,并与其他脚本、COM 组件或资源(如数据库)进行交互操作。

使用 ASP,有三种基本方法收集 HTML 表单中的信息。

静态 .htm 文件可以包含表单,并将表单值发送到 .asp 文件。
.asp 文件可以创建表单,并将表单信息发送到其他 .asp 文件。
.asp 文件可以创建表单,并将表单信息发送到该文件自身,也就是说,将表单信息发送到包含该表单的 .asp 文件。
前两种方法的工作方式和表单与其他 Web 服务器程序(ASP 除外)交互的方式一样,极大简化了搜集和处理表单信息的任务。第三种方法特别有用,将在验证表单输入部分中加以说明。

获取表单输入
ASP 的 Request 对象提供两个集合,有助于检索随 URL 请求发送的表单信息。

QueryString 集合
QueryString 集合检索传送到 Web 服务器的表单值,这些值在请求 URL 中表现为问号后面的文本。要将表单值附加到请求 URL 中,可以使用 HTTP GET 方法或手工将表单值添加到 URL。

例如,如果前面的表单示例使用 GET 方法 (METHOD="GET"),并且用户键入“Clair”、“Hector”和“30”,则下面的 URL 请求将发送到服务器:

http://Workshop1/Painting/Profile.asp?FirstName=Clair&LastName=Hector&Age=30&UserStatus=New
Profile.asp 可能包含下列表单处理脚本:

您好<%= Request.QueryString("FirstName") %> <%= Request.QueryString("LastName") %>.
您今年<%= Request.QueryString("Age") %>岁。

<%
If Request.QueryString("UserStatus") = "New" Then
Response.Write "这是您第一次访问本 Web 站点!"
End if
%>
此时,Web 服务器将下面的文本返回给用户 Web 浏览器:

您好,Clair Hector!您今年 30 岁。这是您第一次访问本 Web 站点!
QueryString 集合还有一个可选参数,可用来访问 URL 请求中出现的多个值中的单个值(使用 GET 方法)。也可以使用 Count 属性来计算特定类型值出现的次数。

例如,包含多项目列表框的表单可生成下面的请求:

http://OrganicFoods/list.asp?Food=Apples&Food=Olives&Food=Bread
可以使用下面的命令计算多个值:

Request.QueryString("Food").Count
要显示多个值类型,可在 List.asp 中包含下面的脚本:

<%
lngTotal = Request.QueryString("Food").Count
For i = 1 To lngTotal
Response.Write Request.QueryString("Food")(i) & "<BR>"
Next
%>
前述脚本将显示为:
苹果
橄榄
面包
要将整个值列表显示为用都逗号分隔的字符串,可以使用下面的脚本:

<% Response.Write Request.QueryString("Item") %>
将显示下面的字符串:

苹果,橄榄,面包
表单集合
如果使用 HTTP GET 方法将长而复杂的表单值传送到 Web 服务器,将冒丢失信息的风险。某些 Web 服务器会限制 URL 查询字符串的长度,以便删节通过 GET 方法传送的长表单值。如果要将表单中的大量信息发送到 Web 服务器,应使用 HTTP POST 方法。POST 方法在 HTTP 请求体内发送表单数据,几乎不限制发送到服务器的字符长度。可以使用 ASP 的 Request 对象的 Form 集合来检索通过 POST 方法发送的值。

Form 集合存储值的方式类似于 QueryString 集合。例如,如果用户在表单中填充了一长串名称,则可以使用下面的脚本检索名称:

<%
lngTotal = Request.Form("Food").Count
For i = 1 To lngTotal
Response.Write Request.Form("Food")(i) & "<BR>"
Next
%>
验证表单输入
设计优秀的 Web 表单通常包含客户端脚本,以便在将信息发送到服务器之前验证用户输入。“验证脚本”可以检查许多事情,如用户输入值是否有效或者文本框是否为空。假设 Web 站点包含表单,该表单允许用户计算投资回报率。您可能需要验证用户是否在相应表单字段中输入了数字或文本信息,以防将潜在的无效信息发送到服务器。

通常,在客户端尽可能多地验证表单数据将非常有好处。除了能尽快提示用户输入错误外,客户端验证能提高响应速度、减少服务器负担并为其他应用程序释放带宽。

下面的客户端脚本在将信息发送到服务器之前验证用户输入(在这里,脚本确定用户是否输入了真正的帐号值):

<SCRIPT LANGUAGE="JScript">

function CheckNumber()
{
if (isNumeric(document.UserForm.AcctNo.value))
return true
else
{
alert("Please enter a valid account number.")
return false
}
}

//用来确定表单值是否为数值的函数。
//注意:JScript isNaN 方法是确定值是否为数值的
//更好途径。不过,某些旧浏览器不支持此方法。
function isNumeric(str)
{
for (var i=0; i < str.length; i++)
{
var ch = str.substring(i, i+1)
if( ch < "0" || ch>"9" || str.length == null)
{
return false
  }
 }
return true
}
</SCRIPT>

<FORM METHOD="Get" ACTION="balance.asp" NAME="UserForm" ONSUBMIT="return CheckNumber()">

<INPUT TYPE="Text"  NAME="AcctNo">
<INPUT TYPE="Submit" VALUE="Submit">

</FORM>

但是,如果表单验证要求访问数据库,则可以考虑使用服务器端表单验证。执行服务器端验证的一个明显优势在于可以创建表单并向该表单自身发送信息。也就是说,.asp 文件实际上包含可用来检索用户输入的 HTML 表单。(请记住,可以使用 ASP 来与客户端脚本和 HTML 进行交互。详细信息,请参阅与客户端脚本交互。)输入返回到相同的文件,随后由该文件来验证信息,如果输入无效将警告用户。

使用此方法处理和验证用户输入,可极大增强基于 Web 的表单的可用性和反应性。例如,将错误信息放到无效信息所在的表单字段旁边,可便于用户发现出错的地方。(通常,基于 Web 的表单将请求转发给包含错误信息的单独的 Web 页。不能立即理解此信息的用户可能会灰心。)

例如,下面的脚本通过将信息发送给自身 (Verify.asp) 并调用用户定义的数据库查询函数来决定用户是否输入了有效的帐号值:

<%
strAcct = Request.Form("Account")
If Not AccountValid(strAcct) Then
ErrMsg = "<FONT COLOR=Red>对不起!您输入的帐号值无效。</FONT>"
Else
处理用户输入
  .
  .
  .
Server.Transfer("Complete.asp")
End If

Function AccountValid(strAcct)
此处调用数据库互连脚本或组件方法。
End Function
%>

<FORM METHOD="Post" ACTION="Verify.asp">
帐号值<INPUT TYPE="Text" NAME="Account"> <%= ErrMsg %> <BR>
<INPUT TYPE="Submit">
</FORM>
在本例中,脚本位于 Verify.asp 文件中,该文件同时也包含 HTML 表单;通过在 ACTION 属性中指定 Verify.asp,该文件将信息发送给自身。

要点 如果使用 JScript 进行服务器端验证,则将集合赋给局部变量时,必须确保 Request 集合项目(QueryString 或 Form)后面有一对空括号。如果没有括号,集合将返回对象,而不是字符串。下面的脚本说明通过 JScript 给变量赋值的正确方式:

<%
var Name = Request.Form("Name")();
var Password = Request.Form("Password")();

if(Name > "")
 {
if(Name == Password)
Response.Write("姓名与密码相同。")
else
Response.Write("姓名与密码不同。");
 }
%>

当集合中包含以逗号分隔的或索引化的多个值时,VBScript 也具有类似的行为。这意味着,对于 VBScript 和 JScript,除了在 Request 集合项目后面附加空括号外,还要指定所需值的索引。例如,下面的 JScript 行将只返回表单元素多个值中的第一个值:

var Name = Request.Form("Name")(1);



  2002年1月3日  阅读 3027 次  发送此页给朋友  来源:    版权争议  删除

相关文章:   近期热点:

上一篇: 使用集合
下一篇: 使用组件和对象
返回上一层...
搜索:

(C)2004-2022 7i24.Com 保留所有权利