注册 登录
编程论坛 ASP技术论坛

文章评论提交后出现了问题

alonemu 发布于 2008-11-10 10:13, 2011 次点击
问题描述:
实现文章评论,可以正常将评论提交到数据库,但是无法在显示页显示,提示语法错误 (操作符丢失) 在查询表达式 'id=' 中。应该是没有更新的缘故,另外:评论接收页是单独页面,评论提交,显示与文章显示在同一页面,单独打开文章显示页面没有问题,但是提交评论后无法显示,提示上述问题。

下面评论接收页代码:
<%
set rsXpl=server.createobject("adodb.recordset")
sql="select wenzhangid,plname,plneirong,plriqi from xinqingyizhanpl"
rsXpl.open sql,connXpl,1,3
rsXpl.addnew
plname=request.form("plname")
plneirong=request.form("plneirong")
plriqi=request.form("plriqi")
id=request.form("id")
wzid=request.form("wenzhangid")
rsXpl("plname")=plname
rsXpl("plneirong")=plneirong
rsXpl("wenzhangid")=wzid
rsXpl.update
rsXpl.close
set rsXpl=nothing
connXpl.close
set rsXpl=nothing
%>
文章,评论显示页代码:
<%
Response.Expires = 0
%>
<%
Dim wenzhangid
wenzhangid = Request.QueryString("id")
%>
<%
id = trim(request.querystring("id"))
set rsX=server.createobject("adodb.recordset")
ConnX.Execute ("Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id"))
if id<>"" and isnumeric(id)then
  id = clng(id)
else
  response.write("非法访问")
  response.end
end if
sql="select hits,biaoti,ID,neirong,faburiqi,chuchu from xinqingyizhan where ID=" & wenzhangid
rsX.open sql,connX,1,3
rsX.addnew
%>
<%
dim wzid
wzid=rsX("id")
'response.write(rsX("ID"))
'response.end()
%>
<%
set rsXpl=server.createobject("adodb.recordset")
sql="select wenzhangid,plname,plriqi,plneirong,plid from xinqingyizhanpl where wenzhangid=" & ID
rsXpl.open sql,connXpl,1,1
if rsXpl.eof or rsxpl.bof then
response.write("暂无")
response.end()
end if
%>
25 回复
#2
sunfishy2008-11-10 10:53
ConnX.Execute ("Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id"))

这句可能有点问题...你看下有没有得到传值..
#3
alonemu2008-11-10 11:04
[bo][un]sunfishy[/un] 在 2008-11-10 10:53 的发言:[/bo]

ConnX.Execute ("Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id"))

这句可能有点问题...你看下有没有得到传值..


显示 无法访问
就是这段代码的结果:
if id<>"" and isnumeric(id)then
  id = clng(id)
else
  response.write("非法访问")
  response.end
end if
#4
sunfishy2008-11-10 11:13
你要验证的ID是从浏览器传值的还是从表单传值的.

ConnX.Execute ("Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id"))
以上这句是否能得到传值.

以下内容如果是从浏览器传值的可以改成

if id<>"" and isnumeric(request.querystring("id"))then
  id = clng(id)
else
  response.write("非法访问")
  response.end
end if

否则就改成

if id<>"" and isnumeric(request.form("id"))then
  id = clng(id)
else
  response.write("非法访问")
  response.end
end if
#5
alonemu2008-11-10 11:19
我突然想到一个问题
[bo][un]sunfishy[/un] 在 2008-11-10 11:13 的发言:[/bo]

你要验证的ID是从浏览器传值的还是从表单传值的.

ConnX.Execute ("Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id"))
以上这句是否能得到传值.

以下内容如果是从浏览器传值的可以改成

i ...


是不是因为与“文章阅读次数”有关啊,因为文章阅读数 是点击“查看全文”从而hits=hits+1,但是如果提交评论直接跳到文章全文显示这个页面 就与hits=hits+1 冲突了 ,是因为这个吗?
#6
alonemu2008-11-10 11:22
我改过了 都还是提示同一个错误
[bo][un]sunfishy[/un] 在 2008-11-10 11:13 的发言:[/bo]

你要验证的ID是从浏览器传值的还是从表单传值的.

ConnX.Execute ("Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id"))
以上这句是否能得到传值.

以下内容如果是从浏览器传值的可以改成

i ...

我改过了 都还是提示同一个错误
语法错误 (操作符丢失) 在查询表达式 'id=' 中。
#7
hmhz2008-11-10 12:23
把括号去掉
ConnX.Execute "Update xinqingyizhan Set hits=hits+1 Where id= "&Request("id")
#8
2008-11-10 12:40
好复杂啊

[[it] 本帖最后由 BOSS级菜鸟 于 2008-11-10 12:44 编辑 [/it]]
#9
京广铁路2008-11-10 13:09
晕忽忽
#10
sunfishy2008-11-10 14:21
[bo][un]alonemu[/un] 在 2008-11-10 11:19 AM 的发言:[/bo]



是不是因为与“文章阅读次数”有关啊,因为文章阅读数 是点击“查看全文”从而hits=hits+1,但是如果提交评论直接跳到文章全文显示这个页面 就与hits=hits+1 冲突了 ,是因为这个吗?



=========================

点击查看全文的时候转到文章页进行阅读.从而点击率+1
而评论页也是跳到文章页面显示评论..这样自然文章页面的点击率又+1了..

但是你的文章页面又在前头写了id=request.querystring("id")

所以任何一个页面想链接到文章页面的话都得提供参数id的值.否则将造成文章页面得不到传值就会显示那个问题..

页面设计可以重新归划一下.
#11
alonemu2008-11-10 14:49
这位大虾说的比较靠谱
我是一个初学这 请您帮忙写一个代码我来参考一下谢谢了!
#12
sunfishy2008-11-10 17:50
用select case action

case "article"
...
case "comments"
..
end select

来区分文章和评论.
#13
alonemu2008-11-10 20:53
我真的是个初学者 这个太难了
请您把您的代码套到我的代码里吧,谢谢您了 我真不知道该怎么改,给一个学习的机会吧 理解万岁~~~
#14
alonemu2008-11-11 13:08
这个我不太会用,请您讲解一下
[bo][un]sunfishy[/un] 在 2008-11-10 17:50 的发言:[/bo]

用select case action

case "article"
...
case "comments"
..
end select

来区分文章和评论.

这个我不太会用,请您讲解一下,谢谢!
#15
hmhz2008-11-11 16:08
select 顾名思义,选择的意思
action 是变量名

action=request("action")  '接收到的值赋值给变量action
select case action
case "article"  ……  '当action变量的值内容等于article时就执行省略位置的代码
case "comments" ……  '当action变量的值内容等于comments时就执行省略位置的代码
end select

这种写法其实和if判断是一样的
if action="article" then
   ……
end if
if action="comments" then
    ……
end if
只是没有if灵活,select写法有个局限性,就是值的判断只能是单一的,if可以组合判断
例如
if action="article" and action="comments" then
    ……
end if
或者
if action="article" or action="comments" then
    ……
end if
或者
if action="article" then
    ……
elseif action="comments" then
    ……
end if
#16
alonemu2008-11-12 11:20
该怎么写呢?~
[bo][un]hmhz[/un] 在 2008-11-11 16:08 的发言:[/bo]

select 顾名思义,选择的意思
action 是变量名

action=request("action")  '接收到的值赋值给变量action
select case action
case "article"  ……  '当action变量的值内容等于article时就执行省略位置的代码
 ...

<%
Dim wenzhangid
wenzhangid = Request.QueryString("id")
%>
<%
id = trim(request.querystring("id"))
set rsX=server.createobject("adodb.recordset")
ConnX.Execute "Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id")
if id<>"" and isnumeric(request.form("id"))then
  id = clng(id)
else
  response.write("非法访问")
  response.end
end if
sql="select hits,biaoti,ID,neirong,faburiqi,chuchu from xinqingyizhan where ID=" & wenzhangid
rsX.open sql,connX,1,1
%>
<%
dim wzid
wzid=rsX("id")
'response.write(rsX("ID"))
'response.end()
%>
<%
set rsXpl=server.createobject("adodb.recordset")
sql="select wenzhangid,plname,plriqi,plneirong,plid from xinqingyizhanpl where wenzhangid=" & ID
rsXpl.open sql,connXpl,1,1
if rsXpl.eof or rsxpl.bof then
response.write("暂无")
response.end()
end if
%>
那您说我该怎么吧您写的那些穿插在我的这段代码里呢?这对我来说太乱了 晕晕呼呼的,如从下手啊~~
呵呵 谢谢写一下呗。
#17
hmhz2008-11-12 11:23
从你提供的代码上看,根本不需要使用select
就if判断就可以了
#18
alonemu2008-11-12 11:49
那应该怎么判断呢?
[bo][un]hmhz[/un] 在 2008-11-12 11:23 的发言:[/bo]

从你提供的代码上看,根本不需要使用select
就if判断就可以了


应该怎么判断呢?怎么能将文章显示和评论显示的代码用if联系起来呢?
#19
hmhz2008-11-12 11:54
代码的存在是因为你想要什么样的效果,你都没说你想要做什么,叫人怎么回答你
#20
alonemu2008-11-12 12:04
版主冤枉啊 有原因的
[bo][un]hmhz[/un] 在 2008-11-12 11:54 的发言:[/bo]

代码的存在是因为你想要什么样的效果,你都没说你想要做什么,叫人怎么回答你


是这样的,我这个页面里存有文章显示与评论显示,现在评论提交与显示没有问题,只是因为点击查看全文的时候转到文章页进行阅读.从而点击率+1
而评论页也是跳到文章页面显示评论..这样自然文章页面的点击率又+1了..

但是文章页面又在前头写了id=request.querystring("id")

所以任何一个页面想链接到文章页面的话都得提供参数id的值.否则将造成文章页面得不到传值就会显示那个问题..


我就是想让文章提交评论后可以正常显示提交的评论与文章。现在直接看文章没问题,但是提交评论后就提示得不到ID
#21
hmhz2008-11-12 12:09
这个简单啊,把ID保存到session里去,所有调用ID的地方都调用session就行了
session("id")=rs("id")

调用的时候
sql="select wenzhangid,plname,plriqi,plneirong,plid from xinqingyizhanpl where wenzhangid="&session("id")
#22
alonemu2008-11-12 12:12
呵呵,好像有点眉目了·~ 谢谢版主啦!
[bo][un]hmhz[/un] 在 2008-11-12 12:09 的发言:[/bo]

这个简单啊,把ID保存到session里去,所有调用ID的地方都调用session就行了
session("id")=rs("id")

调用的时候
sql="select wenzhangid,plname,plriqi,plneirong,plid from xinqingyizhanpl where wenzhangid= ...


我一会研究一下呵呵 刚刚接触有点菜~ 谢谢版主的帮助喽
#23
alonemu2008-11-12 13:31
版主,还是不行啊
[bo][un]hmhz[/un] 在 2008-11-12 12:09 的发言:[/bo]

这个简单啊,把ID保存到session里去,所有调用ID的地方都调用session就行了
session("id")=rs("id")

调用的时候
sql="select wenzhangid,plname,plriqi,plneirong,plid from xinqingyizhanpl where wenzhangid= ...



我把这句话加进去了还是不行啊 提示同样的错误 也就是说没起作用啊 您看一下是不是我的用法不对。
<%
Dim wenzhangid
wenzhangid = Request.QueryString("id")
%>
<%
id = trim(request.querystring("id"))
set rsX=server.createobject("adodb.recordset")
ConnX.Execute "Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id")
if id<>"" and isnumeric(request.form("id"))then
  id = clng(id)
else
  response.write("非法访问")
  response.end
end if
sql="select hits,biaoti,ID,neirong,faburiqi,chuchu from xinqingyizhan where ID=" & wenzhangid
rsX.open sql,connX,1,1
%>
<%
dim wzid
wzid=rsX("id")
'response.write(rsX("ID"))
'response.end()
%>
<%
session("id")=rsX("ID")
%>

<%
set rsXpl=server.createobject("adodb.recordset")
sql="select wenzhangid,plname,plriqi,plneirong,plid from xinqingyizhanpl where wenzhangid="&session("ID")
rsXpl.open sql,connXpl,1,1
if rsXpl.eof or rsxpl.bof then
response.write("暂无")
response.end()
end if
%>
#24
sunfishy2008-11-12 15:44
其实只是一个思路的问题.不用把他想的很复杂.

对于文章页面想取到评论的ID的话..你何不妨让点击评论时带上参数ID的值.

这样文章页面也一样得到了评论链接传来的文章ID...

对于点击率的话你可以控制是否是由文章页面链接来的.

用上request.serverVariables("HTTP_REFERER")

实在还有问题你看下我很早前写的一个简单的文章网站..看下是不是你想要的效果

www.
#25
alonemu2008-11-12 17:09
感谢您的提示
[bo][un]sunfishy[/un] 在 2008-11-12 15:44 的发言:[/bo]

其实只是一个思路的问题.不用把他想的很复杂.

对于文章页面想取到评论的ID的话..你何不妨让点击评论时带上参数ID的值.

这样文章页面也一样得到了评论链接传来的文章ID...

对于点击率的话你可以控制是否是由 ...


好我试一试。
我是一个初学者,能够得到大家的耐心指导真是很庆幸  谢谢大家
#26
alonemu2008-11-12 17:51
[bo][un]sunfishy[/un] 在 2008-11-12 15:44 的发言:[/bo]

其实只是一个思路的问题.不用把他想的很复杂.

对于文章页面想取到评论的ID的话..你何不妨让点击评论时带上参数ID的值.

这样文章页面也一样得到了评论链接传来的文章ID...

对于点击率的话你可以控制是否是由 ...

文章代码:
<%
Dim wenzhangid
wenzhangid = Request.QueryString("id")
%>
<%
id = trim(request.querystring("id"))
set rsX=server.createobject("adodb.recordset")
ConnX.Execute "Update xinqingyizhan Set hits=hits+1 Where id= " & Request("id")
if id<>"" and isnumeric(request.form("id"))then
  id = clng(id)
else
  response.write("非法访问")
  response.end
end if
sql="select hits,biaoti,ID,neirong,faburiqi,chuchu from xinqingyizhan where ID=" & wenzhangid
rsX.open sql,connX,1,1
session("id")=rsX("ID")
%>
<%
dim wzid
wzid=rsX("id")
'response.write(rsX("ID"))
'response.end()
%>

评论代码:
<%
set rsXpl=server.createobject("adodb.recordset")
sql="select wenzhangid,plname,plriqi,plneirong,plid from xinqingyizhanpl where wenzhangid=" & session("id")
rsXpl.open sql,connXpl,1,1
if rsXpl.eof or rsxpl.bof then
response.write("暂无")
response.end()
end if
%>
1