在之前静态问卷的基础上深化了一下,这次尝试将问卷题目从数据库中读取,但在问卷的提交过程中还是出现了一些问题。
先附上问卷题目的读取代码:
<!--#include file="conn.asp"-->
<%
set rs=server.CreateObject("ADODB.Recordset")
rs.open"select *from que order by qID",conn,1,3
counts=rs.recordcount
%>
<form id="wj" method="post" action="tijiao.asp">
<% for i=1 to counts%>
<p> </p>
<p> </p>
<p><%=i%>.<%=rs("nr")%></p>
<p> </p>
<%
set rrs=conn.Execute("select * from choose where qID="&rs("qID"))
%>
<%if rs("qtype")="单选" then
for j=1 to rs("cnum")%>
<input type="radio" name="q<%=rs("qID")%>" value="<%=j%>"><%=j%>.<%=rrs("ms")%>
<%rrs.movenext
next
%>
<%elseif rs("qtype")="下拉框" then%>
<select style="width:80px; text-align:center;" name="q<%=rs("qID")%>">
<%for j=1 to rs("cnum")%>
<option value="<%=j%>"><%=rrs("ms")%></option>
<%rrs.movenext
next
%></select>
<%elseif rs("qtype")="多选" then%>
<%for j=1 to rs("cnum")%>
<input type="checkbox" name="q<%=rs("qID")%>" value="<%=j%>"><%=j%>.<%=rrs("ms")%>
<%rrs.movenext
next
%>
<%else%>
<textarea cols="85" rows="4" name="q<%=rs("qID")%>"></textarea>
<%end if
rs.movenext
next
%>
<p> </p>
<p> </p>
<input class="submit_1" type="submit" value="提交">
<input class="submit_1" type="reset" value="重置">
<input type="button" value="返回" οnclick="location='index.html';">
</form>
接下来便是具体实现将选择循环插入数据库的代码
<!--#include file="conn.asp"-->
<%
set rs=server.CreateObject("ADODB.Recordset")
rs.open"select *from que order by qID",conn,1,3
counts=rs.recordcount
IP=request.ServerVariables("REMOTE_ADDR")
dim q()
redim q(counts)
for i=1 to counts
q(i)=request.form("q"&rs("qID"))
rs.movenext
next
sql="insert into result(IP,qtime) values('"&IP&"',#"&Date()&"#)"
conn.execute sql
set sr=conn.execute("select * from que order by qID asc")
set rrs=conn.execute("select top 1 ID from result order by ID desc")
for i=1 to counts
conn.execute "insert into detail(num,qID,choose) values("&cint(rrs("ID"))&","&sr("qID")&",'"&q(i)&"')"
sr.movenext
next
response.Write"<script>alert('提交成功!谢谢参与');location.href='clients.asp';</script>"
%>
该代码巧妙地利用数组通过request.form("q"&rs("qID"))的方式获取表单元素,以实现将数据循环插入到数据库中去。在此处,i作为一个变量但同时也是一个字符常量,这恰恰是混淆我的地方。同时,我认为此代码中先插入记录再选出记录再插入记录的方式也值得去思考。