<%
Dim iStr, vStr, nStr, x
iStr = "INSERT INTO uData "
vStr = "VALUES ("
nStr = "("
' 遍歷表單集合建構 SQL 組成部分
For Each x In Request.Form
' 建立欄位名清單
nStr = nStr & x & ", "
' 建立欄位值清單(數值型別不加引號)
If UCase(x) = "AGE" Then
vStr = vStr & Request.Form(x) & ", "
Else
vStr = vStr & "'" & Request.Form(x) & "', "
End If
Next
' 移除結尾逗號空格並閉合
vStr = Left(vStr, Len(vStr) - 2) & ")"
nStr = Left(nStr, Len(nStr) - 2) & ") "
' 組裝完整 SQL
iStr = iStr & nStr & vStr
' 簡單驗證並輸出
If Trim(Request("fName")) <> "" Then
Response.Write iStr & "<BR>"
End If
%>
| 版本 | 改進點 | 殘留問題 |
|---|---|---|
| 第 1 版 (86512) | 固定欄位硬編碼,最基礎 | 完全不通用,維護極困難 |
| 第 2 版 (本文) | 遍歷表單動態建構,型別簡易判斷 | SQL注入、硬編碼型別、無驗證 |
| 第 3 版 (86510) | 通用函數、排除清單、單引號逸出 | 字串拼接本質未變,仍有注入風險 |
| 現代標準 | 參數化查詢/預存程序/ORM | 架構複雜度較高 |
<%
Dim cmd, conn, x
Set cmd = Server.CreateObject("ADODB.Command")
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "YourConnectionString"
cmd.ActiveConnection = conn
cmd.CommandText = "INSERT INTO uData (fName, lName, age) VALUES (?, ?, ?)"
cmd.CommandType = 1
cmd.Parameters.Append cmd.CreateParameter("@fName", 200, 1, 50)
cmd.Parameters.Append cmd.CreateParameter("@lName", 200, 1, 50)
cmd.Parameters.Append cmd.CreateParameter("@age", 3, 1)
For Each x In Request.Form
Select Case UCase(x)
Case "FNAME": cmd("@fName") = Request.Form(x)
Case "LNAME": cmd("@lName") = Request.Form(x)
Case "AGE": cmd("@age") = CInt(Request.Form(x))
End Select
Next
On Error Resume Next
cmd.Execute
If Err.Number <> 0 Then Response.Write "錯誤: " & Err.Description
%>
此類程式碼屬 **ASP 經典時期(1998-2002)** 教學範例,展示 `Request.Form` 集合遍歷與字串拼接技巧。**現代 Web 開發嚴禁使用**,僅供歷史技術演進參考與遷移重構時的風險識別。