如何使用单选按钮在单个JSP页面上显示多个问题

时间:2013-08-18 04:01:45

标签: java html mysql jsp struts

我正在尝试从数据库中获取问题并将其显示给用户进行回答。我尝试了很多,但无法弄清楚。问题是我得到了所有问题和单选按钮的正确值,但从整个页面只能选择一个收音机!即从页面上的所有5个问题和20个单选按钮,我只能选择一个。我想从每个问题中选择一个单选按钮。

try{
            Statement st = DBConnection.DBConnection.DBConnect();
            String query = "SELECT * FROM test ORDER BY RAND() LIMIT 5";
            ResultSet rs = st.executeQuery(query);
            int i = 1;
            while(rs.next()){
                String ques = rs.getString(2);
                String opt1 = rs.getString(3);
                String opt2 = rs.getString(4);
                String opt3 = rs.getString(5);
                String opt4 = rs.getString(6);
                String ans = rs.getString(7);
            %>                
            <%=i%>. <%=ques%><br/>
            <input type="radio" name="ans" value="<%=ans%>"/><%=opt1%><br/>
            <input type="radio" name="ans" value="<%=ans%>"/><%=opt2%><br/>
            <input type="radio" name="ans" value="<%=ans%>"/><%=opt3%><br/>
            <input type="radio" name="ans" value="<%=ans%>"/><%=opt4%><br/>
            <br/><br/>
            <%
                i++;
            }
        }catch(Exception ex){
            out.print("Exception Caught"+ex);
        }

我也可以使用(这部分在后端完成)检查数据库的正确答案,但我如何为每个问题做到这一点

request.getParameter("ans");

并且SQL注入现在不是一个值得关注的问题。

3 个答案:

答案 0 :(得分:3)

您需要为每个单选按钮组指定不同的名称。如果您的test表具有主键列,那么这是创建唯一名称的良好候选者。此示例假设rs.getInt(1)将返回主键(请注意新的int pk = ...行以及对无线电中name=的更改):

while(rs.next()){
    int pk = rs.getString(1);
    String ques = rs.getString(2);
    String opt1 = rs.getString(3);
    String opt2 = rs.getString(4);
    String opt3 = rs.getString(5);
    String opt4 = rs.getString(6);
    String ans = rs.getString(7);
%>
<%=i%>. <%=ques%><br/>
<input type="radio" name="ans<%=pk%>" value="<%=ans%>"/><%=opt1%><br/>
<input type="radio" name="ans<%=pk%>" value="<%=ans%>"/><%=opt2%><br/>
<input type="radio" name="ans<%=pk%>" value="<%=ans%>"/><%=opt3%><br/>
<input type="radio" name="ans<%=pk%>" value="<%=ans%>"/><%=opt4%><br/>
<br/><br/>
<%
    i++;
}

或者你可以使用i变量,如果这对你来说更容易:

while(rs.next()){
    String ques = rs.getString(2);
    String opt1 = rs.getString(3);
    String opt2 = rs.getString(4);
    String opt3 = rs.getString(5);
    String opt4 = rs.getString(6);
    String ans = rs.getString(7);
%>
<%=i%>. <%=ques%><br/>
<input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt1%><br/>
<input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt2%><br/>
<input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt3%><br/>
<input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt4%><br/>
<br/><br/>
<%
    i++;
}

答案 1 :(得分:0)

我认为你应该为每组问题设置不同的名称(对于无线电标签),因此它们属于不同的组,所以你可以选择几个而不是一个。

    int i = 1;
    while(rs.next()){
        String ques = rs.getString(2);
        String opt1 = rs.getString(3);
        String opt2 = rs.getString(4);
        String opt3 = rs.getString(5);
        String opt4 = rs.getString(6);
        String ans = rs.getString(7);
    %>                
    <%=i%>. <%=ques%><br/>
    <input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt1%><br/>
    <input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt2%><br/>
    <input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt3%><br/>
    <input type="radio" name="ans<%=i%>" value="<%=ans%>"/><%=opt4%><br/>
    <br/><br/>
    <%
        i++;
    }

答案 2 :(得分:0)

您已经为所有单选按钮指定了相同名称"ans",这就是为什么您只能从中选择一个。您需要对它们进行分组,以便只有属于特定问题的选项具有相同的name属性值。因此,您可以按当前问题的索引对它们进行分组。

<input type="radio" name="ans_<%=i%>" value="<%=ans%>"/><%=opt1%><br/>
<input type="radio" name="ans_<%=i%>" value="<%=ans%>"/><%=opt2%><br/>
<input type="radio" name="ans_<%=i%>" value="<%=ans%>"/><%=opt3%><br/>
<input type="radio" name="ans_<%=i%>" value="<%=ans%>"/><%=opt4%><br/>