100分求助ASP问题。

ybs9999 2005-06-16 08:54:45
最近用ASP作了个《体育专项》网上选课系统。基本流程是这样,学生用学号登陆后,用Session保存学号,然后判断出学生的性别,在页面上显示该性别可以选择的《体育专项》,任选其一(单选框)后提交,提交后转到另一个页面,在这个页面中根据Session中的学号,Request.Form("r1")中《体育专项》选课的名称来操作:如果该学生已经选过本学期的《体育专项》课,就先删除,否则就直接添加一条记录。
经过1个月,2000多人的测试发现出了问题:有三个学生的选课出了大问题,主要是:女生选到了男生才能选的课,而男生选到了女生才能选的课。
请大家帮我看看问题出在哪里??我自己已经检察很久了,就是看不出问题。
用Dreamweaver MX 2004
下面是先删除后添加的代码:
<%
If Request.Form("r1") <> "" and (Not rs_TaskStudent.EOF Or Not rs_TaskStudent.BOF) Then
if(rs_Student.Fields.Item("StudentID").Value <> "") then C_del__p0 = rs_Student.Fields.Item("StudentID").Value //学号

if(rs_Semester.Fields.Item("Semester").Value <> "") then C_del__p1 = rs_Semester.Fields.Item("Semester").Value //选课学期

if(rs_TaskStudent.Fields.Item("taskclass").Value <> "") then C_del__p2 = rs_TaskStudent.Fields.Item("taskclass").Value //选课课程名称
end if
%>
<%'
If Request.Form("r1") <> "" and (Not rs_TaskStudent.EOF Or Not rs_TaskStudent.BOF) Then
set C_del = Server.CreateObject("ADODB.Command")
C_del.ActiveConnection = MM_SQL_VB_STRING
C_del.CommandText = "DELETE FROM dbo.St_TaskStudent WHERE studentID ='" + Replace(C_del__p0, "'", "''") + "'and semester='" + Replace(C_del__p1, "'", "''") + "' and Taskclass='" + Replace(C_del__p2, "'", "''") + "' "
C_del.CommandType = 1
C_del.CommandTimeout = 0
C_del.Prepared = true
C_del.Execute()
end if
%>
<%

if(Request.Form("r1") <> "") then C_inse__p1 = Request.Form("r1") //Request.Form("r1") 为选中的《体育专项》课程名称

if(rs_Student.Fields.Item("StudentID").Value <> "") then C_inse__p2 = rs_Student.Fields.Item("StudentID").Value

if(rs_Semester.Fields.Item("Semester").Value <> "") then C_inse__p3 = rs_Semester.Fields.Item("Semester").Value

%>
<%
if(Request.Form("r1") <> "" ) then

set C_inse = Server.CreateObject("ADODB.Command")
C_inse.ActiveConnection = MM_SQL_VB_STRING
C_inse.CommandText = "INSERT INTO dbo.St_TaskStudent (taskclass, studentID, semester) VALUES ('" + Replace(C_inse__p1, "'", "''") + "','" + Replace(C_inse__p2, "'", "''") + "','" + Replace(C_inse__p3, "'", "''") + "') "
C_inse.CommandType = 1
C_inse.CommandTimeout = 0
C_inse.Prepared = true
C_inse.Execute()

end if
%>
...全文
237 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybs9999 2005-06-17
  • 打赏
  • 举报
回复
to:liuxiaoyi666(兔子)
如果是2个账号在一台计算机上同时登录的时候,出现用户权限交叉的问题。
你说是session的问题,
应该怎么解决?
不过我有点想不同,书上不是说session是在每个连接创建的时候就创建一个的吗?那会有什么问题。
是不是吧账号放在Cookie里面比较好??
ybs9999 2005-06-17
  • 打赏
  • 举报
回复
各位大侠,不好意思了,因为小弟是刚学编程,所有代码都是DW7.01自动生成的。所以有点乱,让大家费神了。

to: stefli(潜心修炼,升级中....)

原有数据删除后,重新选课,没有问题出现。
我怀疑是不是有两个人在绝对的同一时刻进行了操作,出现的问题?
如果是这样,应该怎么避免??

to:red_free(其实很想娶linux)

请问:C_del.CommandTimeout = 0 这个语句是干什么用的?
你说它有风险,应该怎么避免????
谢谢!
再次感谢大家的意见,能不能再帮忙看看,我觉得问题就快解决了。
到时候一定给大家加分。
传奇小名 2005-06-16
  • 打赏
  • 举报
回复
看完了,应该是学生本身的问题,1000个人里面没有1个人会asp攻击的么?客户端页面自己做一个提交给后台就可。
hxyman 2005-06-16
  • 打赏
  • 举报
回复
看得头晕,是不是学生的问题呢
mymyal123 2005-06-16
  • 打赏
  • 举报
回复
说得太不具体
ybs9999 2005-06-16
  • 打赏
  • 举报
回复
找过一个选课出问题的男生问过话:
他说但是选的是“男生足球”课。
可是后来在数据库中看到他选的课却是“女生健美操”。
2000多人只有三个学生出问题。
ybs9999 2005-06-16
  • 打赏
  • 举报
回复
补充一点:
向学生询问过,操作时在页面上没有出现任何异常现象
孟子E章 2005-06-16
  • 打赏
  • 举报
回复
乱,是不是前端的表单就出问题了
  • 打赏
  • 举报
回复
再有就是在2个账号在一台计算机上同时登录的时候,有可能出现用户权限交叉的问题。我是遇到过,不过具体是怎么回事不知道的干活


----------》这个是因为session的问题,csdn也有
red_free 2005-06-16
  • 打赏
  • 举报
回复
问题出在哪里我不清楚ing
C_del.CommandTimeout = 0 这个语句绝对是有隐患的。
而且被攻击的可能性也是有的。
再有就是在2个账号在一台计算机上同时登录的时候,有可能出现用户权限交叉的问题。我是遇到过,不过具体是怎么回事不知道的干活
zwrtv 2005-06-16
  • 打赏
  • 举报
回复
路过学习下
red_free 2005-06-16
  • 打赏
  • 举报
回复
<%
If Request.Form("r1") <> "" and (Not rs_TaskStudent.EOF Or Not rs_TaskStudent.BOF) Then
if rs_Student("StudentID") <> "" then C_del__p0 = rs_Student("StudentID") //学号

if(rs_Semester("Semester") <> "") then C_del__p1 = rs_Semester("Semester") //选课学期

if(rs_TaskStudent("taskclass") <> "") then C_del__p2 = rs_TaskStudent("taskclass") //选课课程名称
end if
%>
<%'
If Request.Form("r1") <> "" and (Not rs_TaskStudent.EOF Or Not rs_TaskStudent.BOF) Then
set C_del = Server.CreateObject("ADODB.Command")
C_del.ActiveConnection = MM_SQL_VB_STRING
C_del.CommandText = "DELETE FROM dbo.St_TaskStudent WHERE studentID ='" + Replace(C_del__p0, "'", "''") + "'and semester='" + Replace(C_del__p1, "'", "''") + "' and Taskclass='" + Replace(C_del__p2, "'", "''") + "' "
C_del.CommandType = 1
C_del.CommandTimeout = 0
C_del.Prepared = true
C_del.Execute()
end if
%>
<%

if(Request.Form("r1") <> "") then C_inse__p1 = Request.Form("r1") //Request.Form("r1") 为选中的《体育专项》课程名称

if(rs_Student("StudentID") <> "") then C_inse__p2 = rs_Student("StudentID")

if(rs_Semester("Semester") <> "") then C_inse__p3 = rs_Semester("Semester")

%>
<%
if(Request.Form("r1") <> "" ) then

set C_inse = Server.CreateObject("ADODB.Command")
C_inse.ActiveConnection = MM_SQL_VB_STRING
C_inse.CommandText = "INSERT INTO dbo.St_TaskStudent (taskclass, studentID, semester) VALUES ('" + Replace(C_inse__p1, "'", "''") + "','" + Replace(C_inse__p2, "'", "''") + "','" + Replace(C_inse__p3, "'", "''") + "') "
C_inse.CommandType = 1
C_inse.CommandTimeout = 0
C_inse.Prepared = true
C_inse.Execute()

end if
%>
楼主的代码用dw7.01自动改写了一下,就是这个样子了。
jackycxg 2005-06-16
  • 打赏
  • 举报
回复
看不懂,不懂,学不懂。。。
jarraytan 2005-06-16
  • 打赏
  • 举报
回复
我怀疑楼主是由VB转到ASP的。
鉴定完毕。

小声地说句:代码偶看不懂。 -_-
aspme 2005-06-16
  • 打赏
  • 举报
回复
楼主的代码我看了头晕~~~
stefli 2005-06-16
  • 打赏
  • 举报
回复
代码写好点嘛~

你看看是那个学生,然后把已有的数据删除,再模拟测试一下。
结合
Response.Write InsertString
看看实际插入的数据是什么,
sfwxw0456 2005-06-16
  • 打赏
  • 举报
回复
帮顶...
ybs9999 2005-06-16
  • 打赏
  • 举报
回复
to:drun_kmoon()
学生应该不会自己做客户端的,就算自己作了,数据库是SQL的,没有密码他怎么修改我的记录?
不过还是谢谢大家,希望大家再给点意见

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧