我有以下表格,
<form action="contact_us.asp" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input name="firstname" type="text" id="firstname" size="30" />
<input name="lastname" type="text" id="lastname" size="30" />
<input type="submit" name="submit" id="submit" value="Submit" />
</form>
但是当我试图在我的ASP文件contact_us.asp中获取这些post变量的值时,它返回空白。代码如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<%
Dim FirstName, LastName, Email, Message
FirstName = request.form("firstname")
LastName = request.form("lastname")
response.write(FirstName & "OK")
%>
它只给我“回报”。 Message变量中没有任何内容?
请帮帮我,告诉我这里有什么问题?
答案 0 :(得分:21)
经典ASP不支持multipart/form-data
。即使对于ASP历史悠久的语言来说,这是一个令人惊讶的基本缺陷,但是你要做些什么呢,转向ASP.NET? (是吗?哦。好吧,不用再想。)
如果您没有进行文件上传,最简单的方法就是坚持使用默认的enctype
(application/x-www-form-urlencoded
)。 multipart/form-data
的唯一优势是您可以将文件上传到其中。 (理论上,它还有一个优势,你可以明确地指定字符编码。但是没有浏览器实际上这样做。)
如果确实需要在Classic ASP中处理multipart/form-data
,则需要自己解析传入的请求体,将其拆分为字段和值。或者更确切地说,使用现有的库来执行此操作*。
该库通常会提供单独的界面来读取上传的文件和其他表单值。这完全取代了Classic ASP Request.Form
接口的使用。您可以在哪里找到它取决于您选择的库。这意味着,如果您希望拥有一个可以同时响应enctype
的表单,则必须检查类型并使用两个不同接口中的一个。
*:有负载。 for example。我不支持这些中的任何一个......它们都没有按照标准正确地解析多部分,并且两者似乎对文件名安全性有点松懈(从不存储用户提交的文件filename!安全灾难!)。但这似乎与ASP上传脚本的课程相提并论。至少,与许多人不同,他们不会为他们要钱。
答案 1 :(得分:2)
我通过enctype
与application/x-www-form-urlencoded
正常工作的表单标记完全删除Request.Form("SomeInputTagId")
(默认为method="post"
)。我也不需要安装任何第三方读者。希望这会有所帮助。
答案 2 :(得分:0)
请勿使用enctype="multipart/form-data"
从代码中删除它,看它是否有效。 form-data enctype
用于上传数据,例如图像文件。如果使用enctype
。
如果要上传数据,那么您使用的ASP对象(例如ASP Upload
)将具有访问表单字段的功能。 Request.form("")
无法工作。
访问表单值将是:
Set yourUploadComponent = CreateObject("Your.UploadComponentClassString")
sFormValue = yourUploadComponent.Form.Item("txtName").Value
您需要阅读对象文档。