我是ASP新手。我需要在点击提交按钮时使用ASP将值插入数据库。 怎么做我知道。
我的代码是:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="connection.asp"-->
<!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=iso-8859-1" />
<title>Form</title>
</head>
<form name="form1" id="form1" method="post" onsubmit="return validate()">
<h3>FORM</h3>
<table align="center" cellpadding = "10">
<tr>
<td>Name</td>
<td><input type="text" name="uname" id="uname" /></td>
</tr>
<tr>
<td>Mobile Number</td>
<td><input type="text" name="umobile" id="umobile" maxlength="10" /></td>
</tr>
<tr>
<td>Email Address</td>
<td><input type="text" name="uemail" id="uemail" /></td>
</tr>
<tr>
<td>Residing City
<td><input type="text" name="rescity" id="rescity" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
<body>
<%
uname = request.Form("uname")
umobile = request.Form("umobile")
uemail = request.Form("uemail")
city = request.Form("city")
set rs = Server.CreateObject("ADODB.Recordset")
Qry = "INSERT INTO enquirydetails([name],[mobile],[email],[residingcity]) values ('"&(uname)&"','"&(umobile)&"','"&(uemail)&"','"&(city)&"')"
rs.OPEN Qry,Conn
%>
</body>
</html>
如果我转到该页面,则使用此代码将值插入为空白。
请给我任何建议。
答案 0 :(得分:2)
由于没有检查表单中的数据是否已提交,因此无论何时加载页面,都会运行插入新记录的代码。
通常,接近此方法的方法是检查长度Request.Form
以查看是否已提交任何表单参数。这样的事情应该修复你的代码;
<%
If Len(Request.Form) > 0 Then
uname = request.Form("uname")
umobile = request.Form("umobile")
uemail = request.Form("uemail")
city = request.Form("city")
set rs = Server.CreateObject("ADODB.Recordset")
Qry = "INSERT INTO enquirydetails([name],[mobile],[email],[residingcity]) values ('"&(uname)&"','"&(umobile)&"','"&(uemail)&"','"&(city)&"')"
rs.OPEN Qry,Conn
End If
%>
然而,仍有一个问题,那就是INSERT
的方法。通过动态地将值直接分配给SQL字符串,您将使应用程序保持打开状态SQL Injection,这是针对Web应用程序的常见攻击,对数据库后端进行不安全的调用。
ADO提供了一个名为ADODB.Command
的有用对象,通过构建参数化查询来帮助我们解决这个问题,这里有一个如何替换现有代码的示例;
<%
Dim cmd, sql
If Len(Request.Form) > 0 Then
uname = request.Form("uname")
umobile = request.Form("umobile")
uemail = request.Form("uemail")
city = request.Form("city")
Set cmd = Server.CreateObject("ADODB.Command")
sql = "INSERT INTO enquirydetails([name],[mobile],[email],[residingcity]) VALUES (?, ?, ?, ?)"
With cmd
.ActiveConnection = Conn 'Assuming this is your connection string
.CommandType = adCmdText
.CommandText = sql
'Create Parameters and append them in order
.Parameters.Append(.CreateParameter("@name", adVarWChar, adParamInput, 255))
.Parameters.Append(.CreateParameter("@mobile", adVarWChar, adParamInput, 255))
.Parameters.Append(.CreateParameter("@email", adVarWChar, adParamInput, 255))
.Parameters.Append(.CreateParameter("@residingcity", adVarWChar, adParamInput, 255))
'Assign values to the parameters
.Parameters("@name").Value = uname
.Parameters("@mobile").Value = umobile
.Parameters("@email").Value = uemail
.Parameters("@residingcity").Value = city
.Execute()
End With
Set cmd = Nothing
End If
%>
注意:如果您对此代码有疑问,可能会使用命名常量(
adCmdText
等)来修复此问题,请参阅this article,其中介绍了如何使用命名常数。