2012-08-24 45 views
0
<html> 
<title>Test</title> 
<body bgcolor="FFFFFF"> 

<% 
sort = CStr(Request("sort")) 
search = CStr(Request("search")) 
Set conn = Server.CreateObject("ADODB.Connection") 
conn.open "Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=asdf;Data Source=WIN-123" 

Set rs = Server.CreateObject("ADODB.Recordset") 
If sort = "ascending" Then 
SQL = "select top 50 * from asdf order by Name" 
ElseIf (search Is Not Nothing) 
SQL = "select * from asdf WHERE name = '" & search & "'" 
Else 
SQL = "select top 50 * from asdf" 
End If 
rs.open SQL, conn 
%> 
<center><form acion="index.asp"> 
Search Name:<input name="search" /><input type="submit" value="Submit" /> 
</form></center> 

我對我的如果空字符串值語句錯誤

Else If (search Is Not Nothing) 

線得到一個錯誤,從我可以告訴它應該工作。當然我也不能出於某種原因瀏覽我的服務器上的我的網站,看看實際的錯誤是什麼。

+0

不要使用字符串連接來包含參數。改用參數化查詢。您可能還想避免在SQL Server上使用「sa」用戶登錄。目前您的代碼可能會讓您的網站和網絡遭受各種惡意攻擊。搜索「SQL注入」。 – AnthonyWJones

回答

1

測試在我的IIS 5,不option explicit,當您使用

search=CStr(Request("search")) 

search已被初始化爲stringVarType: 8)。

所以,即使search是「空」,則不能使用IsEmpty或類似功能/語句,看它是否是空的。使用

ElseIf search<>"" Then 

直接。

另外,請記住清理SQL查詢...

+0

「清理你的SQL查詢」是什麼意思?它是如何完成的? – AnthonyWJones

+0

@AnthonyWJones它只是意味着「避免SQL注入和東西」。 – Passerby

+0

AnthonyWJones我在輸入變量上使用了一個帶有字母數字模式和regex.replace的正則表達式。以下是我使用的:http://www.4guysfromrolla.com/ASPScripts/PrintPage.asp?REF=%2Fwebtech%2F112702-1.shtml –