Javascript 隐藏<;TR>;基于记录集空值的标记
我正在使用MicrosoftSQLServer2005存储过程在HTML表中发布记录。在HTML表中,我有以下字段的行:条目#、打开日期、说明和所有者 有时,db表中的所有者字段将为空。发生这种情况时,我有ASP response.write“N/A”在对应于所有者的HTML表行中。然而,我想避免这种情况,因为这似乎是多余的。相反,如果数据库中的owner字段为NULL,我希望有一种方法可以消除表行altoGether。我该怎么做呢?我正在使用Javascript、经典ASP和SQLServer2005。我的代码如下。注意——我对这一切都是个新手。谢谢Javascript 隐藏<;TR>;基于记录集空值的标记,javascript,sql-server-2005,asp-classic,Javascript,Sql Server 2005,Asp Classic,我正在使用MicrosoftSQLServer2005存储过程在HTML表中发布记录。在HTML表中,我有以下字段的行:条目#、打开日期、说明和所有者 有时,db表中的所有者字段将为空。发生这种情况时,我有ASP response.write“N/A”在对应于所有者的HTML表行中。然而,我想避免这种情况,因为这似乎是多余的。相反,如果数据库中的owner字段为NULL,我希望有一种方法可以消除表行altoGether。我该怎么做呢?我正在使用Javascript、经典ASP和SQLServer
'Declare Variables
Dim CN, RS, vOutputType, vSQL, vNumber, vOwner
'Connection from includes file
Set CN = GetDataConnection
vOutputType = Request.QueryString("ot")
If Request.QueryString("txtNumber") <> "" Then
vNumber = Rtrim(Request.QueryString("txtNumber"))
End If
If Request.QueryString("cboOwner") <> "" Then
vOwner = Rtrim(Request.QueryString("cboOwner"))
End If
If vNumber <> "" Or vOwner <> "" Then
vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"
Set RS = CN.Execute(vSQL)
If IsObject(RS) Then
If Not RS.EOF Then%>
<table class="WebApps">
<tr>
<td width="5%"><h3>Entry #</h3></td>
<td width="5%"><h3>Open Date</h3></td>
<td width="5%"><h3>Description</h3></td>
<td width="5%"><h3>Owner</h3></td>
</tr>
<%RS.MoveFirst
Do While Not RS.EOF
%>
<tr>
<td><p><%= RS("ID")%></p></td>
<td><p><%= RS("OpenDate")%></p></td>
<td><p><%= RS("Description")%></p></td>
<td><p><%If (RS("OwnerName")) <> "" Then Response.Write(RS("OwnerName")) Else Response.Write("N/A")%></p></td>
</tr>
<%RS.MoveNext
Loop%>
</table>
<%End If
End If
'Close objects
Set RS = NOTHING
CN.Close
Set CN = Nothing
“声明变量
Dim CN、RS、vOutputType、vSQL、vNumber、vOwner
'从包含文件的连接
Set CN=GetDataConnection
vOutputType=Request.QueryString(“ot”)
如果Request.QueryString(“txtNumber”)“”则
vNumber=Rtrim(Request.QueryString(“txtNumber”))
如果结束
如果Request.QueryString(“cboOwner”)“”则
vOwner=Rtrim(Request.QueryString(“cboOwner”))
如果结束
如果vNumber“”或vOwner“”,则
vSQL=“spReport”
vSQL=vSQL&“@vNumber=”&vNumber&“,”
vSQL=vSQL&@vOwner='&vOwner&''
设置RS=CN.Execute(vSQL)
如果是IsObject(RS),则
如果不是RS.EOF,则%>
入口#
开放日期
描述
所有者
最好在SQL查询本身中过滤掉包含空值的行,但如果由于某种原因不能过滤掉,只需将if语句上移一点,这样如果不满足条件,就不会首先写出表行:
最好过滤掉SQL查询本身中包含空值的行,但如果由于某种原因不能过滤掉,只需将if语句上移一点,这样如果不满足条件,就不会首先写出表行:
过滤源当然更好,只需选择OwnerName不为“”的记录
否则,您可以使用您的代码并对其进行轻微修改
发件人:
到
还没有测试代码,但应该会有所帮助。过滤源代码当然更好,只需选择OwnerName不为“”的记录
否则,您可以使用您的代码并对其进行轻微修改
发件人:
到
还没有测试过代码,但应该会有所帮助。您可以通过两种方式进行测试
1) 前端:检查所有者字段中的空值,如下所示
If Not (IsNull(rsNew("Owner")) Then
<table class="WebApps">
...........
End If
如果不是(IsNull(rsNew(“所有者”)),则
...........
如果结束
2) 后端:
使用WHERE子句过滤存储过程中的空值。您可以通过两种方式进行过滤
1) 前端:检查所有者字段中的空值,如下所示
If Not (IsNull(rsNew("Owner")) Then
<table class="WebApps">
...........
End If
如果不是(IsNull(rsNew(“所有者”)),则
...........
如果结束
2) 后端:
使用WHERE子句过滤存储过程中的空值。因为您是一个“完全的新手”,这里还有一些建议
SQL注入攻击
您的代码:-
vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"
Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td>
不要这样做。有人可以创建查询字符串以在服务器上执行任意SQL:-
?txtNumber=30&cboOwner='; arbitary SQL code here ; --
您应该始终使用ADODB.Command对象来执行需要从客户端检索参数值的SQL。Web搜索“SQL注入ASP”
空值的含义
你似乎对NULL的含义有点困惑。“db表中的所有者字段将为NULL”,但您的代码正在测试“”。Null与空字符串不同。实际为空的字段将不等于“”
使用Server.HTMLEncode
您的代码:-
vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"
Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td>
你的实际问题
不要试图在ASP页面中使用VBScript来完成SQL应该完成的工作。
使用WHERE子句修改SQL:-
WHERE Owner IS NOT NULL
或者,如果您不确定所有者是为NULL还是为空字符串:-
WHERE Owner IS NOT NULL AND Owner <> ""
其中所有者不为NULL且所有者“”
既然你是一个“完全的新手”,这里还有一些建议
SQL注入攻击
您的代码:-
vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"
Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td>
不要这样做。有人可以创建查询字符串以在服务器上执行任意SQL:-
?txtNumber=30&cboOwner='; arbitary SQL code here ; --
您应该始终使用ADODB.Command对象来执行需要从客户端检索参数值的SQL。Web搜索“SQL注入ASP”
空值的含义
你似乎对NULL的含义有点困惑。“db表中的所有者字段将为NULL”,但您的代码正在测试“”。Null与空字符串不同。实际为空的字段将不等于“”
使用Server.HTMLEncode
您的代码:-
vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"
Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td>
你的实际问题
不要试图在ASP页面中使用VBScript来完成SQL应该完成的工作。
使用