在while循环中获取单选按钮值

时间:2015-03-17 01:18:59

标签: php

我正在使用PHP做一个简单的考试计划。

以下是我参加测验的代码,它仍在测试中,所以不要介意设计。

这是参加测验的人的会话(这里没问题):

<?php
session_start ();
$_SESSION['username'];
?>
<div id="wrap">
    <?php
    $host="localhost"; // Host name 
    $username="root"; // Mysql username 
    $password=""; // Mysql password 
    $db_name="myproject"; // Database name 
    $tbl_name="q_quiz"; // Table name 

    // Connect to server and select databse.
    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");

    // get value of id that sent from address bar 
    $id=$_GET['q_id'];
    $sql="SELECT * FROM $tbl_name WHERE q_id='$id'";
    $result=mysql_query($sql);
    $rows=mysql_fetch_array($result);
    ?>

    <table width="100%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
        <tr>
            <td>
                <table width="100%" frame="box" cellpadding="3" cellspacing="1" bgcolor="#CCFFCC">
                    <tr>
                        <td bgcolor="#CCFFCC"><h3>Quiz Info : </h3></td>
                    </tr>
                    <tr>
                        <td bgcolor="#CCFFCC"><strong>Quiz Name : </strong><?php echo $rows['q_name']; ?></td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>

    <font size="6">
    <div style="font-weight: bold" id="quiz-time-left"></div>

    <script type="text/javascript">
    var max_time = <?php echo $rows['q_time'] ?>;
    var c_seconds  = 0;
    var total_seconds =60*max_time;
    max_time = parseInt(total_seconds/60);
    c_seconds = parseInt(total_seconds%60);
    document.getElementById("quiz-time-left").innerHTML='Time Left: ' + max_time + ' minutes ' + c_seconds + ' seconds';
    function init(){
        document.getElementById("quiz-time-left").innerHTML='Time Left: ' + max_time + ' minutes ' + c_seconds + ' seconds';
        setTimeout("CheckTime()",999);
    }
    function CheckTime(){
        document.getElementById("quiz-time-left").innerHTML='Time Left: ' + max_time + ' minutes ' + c_seconds + ' seconds' ;
        if(total_seconds <=0){
            setTimeout('document.quiz.submit()',1);
        } else {
            total_seconds = total_seconds -1;
            max_time = parseInt(total_seconds/60);
            c_seconds = parseInt(total_seconds%60);
            setTimeout("CheckTime()",999);
        }
    }
    init();
    </script>
    </font>

    <form action="result.php" method="post">
    <?php
    $score = 0;
    $tbl_name2="a_quiz"; // Switch to table "forum_answer"
    $sql2="SELECT * FROM $tbl_name2 WHERE q_id='$id'";
    $result2=mysql_query($sql2);
    while($rows=mysql_fetch_array($result2)){
        $q_question = $rows['q_question'];
        ?>
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
            <tr>
                <td>
                    <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
                        <tr style='overflow:hidden; word-wrap:break-word;'>
                            <input type="text" name="q_id" value="<?php echo $rows['q_id'];?>">
                            <td bgcolor="lightgreen"><strong>Question:</strong></td>
                            <td bgcolor="lightgreen">:</td>
                            <td bgcolor="lightgreen" style="max-width: 1000px;"><?php echo $rows['q_question']; ?></td>
                        </tr>
                        <tr>
                            <td bgcolor="lightgreen"><strong>A</strong></td>
                            <td bgcolor="lightgreen">:</td>
                            <td bgcolor="lightgreen"><input type="radio" name="<?php echo $q_question; ?>" value="a"><?php echo $rows['a'] ?></td>
                        </tr>
                        <tr>
                            <td width="18%" bgcolor="lightgreen"><strong>B</strong></td>
                            <td width="5%" bgcolor="lightgreen">:</td>
                            <td width="77%" bgcolor="lightgreen"><input type="radio" name="<?php echo $q_question; ?>" value="b"><?php echo $rows['b'] ?></td>
                        </tr>
                        <tr>
                            <td width="18%" bgcolor="lightgreen"><strong>C</strong></td>
                            <td width="5%" bgcolor="lightgreen">:</td>
                            <td width="77%" bgcolor="lightgreen"><input type="radio" name="<?php echo $q_question; ?>" value="c"><?php echo $rows['c'] ?></td>
                        </tr>
                        <tr>
                            <td bgcolor="lightgreen"><strong>D</strong></td>
                            <td bgcolor="lightgreen">:</td>
                            <td bgcolor="lightgreen"><input type="radio" name="<?php echo $q_question; ?>" value="d"><?php echo $rows['d'] ?></td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
        <?php
    }

    $connection=mysql_connect('localhost', 'root','');
    mysql_select_db('thesis');

    $username= $_SESSION['username'];

    $query6 = mysql_query("SELECT * FROM student WHERE username='$username'");
    $row6 = mysql_fetch_assoc($query6);
    $s_id = $row6['id'];
    $name = $row6['name'];
    $email = $row6['email'];
    $position = $row6['position'];
    ?>
    <input type="text" name="s_id" value="<?php echo $s_id ?>">
    <input type="submit" name="submit" value="Submit Answer" class="btn">
    </form>
</div>

我提供了一张图片(我输入了两个问题,这是上面代码的输出):

http://i60.tinypic.com/2lu8doh.jpg

2是测验ID,没有问题,提交按钮附近的12是考官ID)

上面的代码没有问题。

我的问题从这里开始。我只得到问题编号1的(考官/参加测验的人)的答案,我已经找到了我的错误。

点击提交按钮后,以下代码启动:

if(isset($_POST['submit']))
{
    $con = mysql_connect ("localhost","root","");
    if (!$con)
    {
        die("Error:".mysql_error());
    }
    mysql_select_db("myproject",$con);
}

由于这个原因,我只能在考官的问题1中得到答案。这不是一个循环,所以我只得到一个答案,即使还有2-3个答案。

$stud_id = $_POST['s_id'];
$quiz_id = $_POST['q_id'];
$score = 0;

$tbl_name2="a_quiz"; 
$sql2="SELECT * FROM $tbl_name2 WHERE q_id='$quiz_id'";
$result2=mysql_query($sql2);
while($rows=mysql_fetch_array($result2)){
    $q_question=$rows['q_question'];
    $question1 = $rows['answer'];

    echo $q_question;
    echo '<br>';
    echo $question1;
    echo '<br>';
    if(isset($_POST[$q_question])){
        $s_answer = $_POST[$q_question];
        echo $s_answer;
        if ($question1 == $s_answer){
            $score = $score + 1;
        }
    }
}
echo $score;

所以,例如,我得到了问题1和问题2,我选择了正确的答案,我得到了$score++但是当我在问题2中的回答也是正确的时候是没有&#39 ; t $score++

我的问题是:如何在循环中获取我输出的单选按钮的值?我还需要做一个while循环的答案吗?怎么样?

1 个答案:

答案 0 :(得分:0)

首先,您使用每个问题作为单选按钮的名称属性,这远非完美。您可以考虑在表格中添加一列&#39; a_quiz&#39;每个问题都有一个唯一命名空间,但没有空格(例如问题一,问题二......)并调用此列&#39;命名空间&#39;。

完成此操作后,您的问题循环应如下所示:

<?php
$score = 0;
$tbl_name2="a_quiz"; // Switch to table "forum_answer"
$sql2="SELECT * FROM $tbl_name2 WHERE q_id='$id'";
$result2=mysql_query($sql2);

while($rows=mysql_fetch_array($result2)){

    $q_question = $rows['q_question'];
    $namespace = $rows['namespace'];

?>

<table width="100%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr style='overflow:hidden; word-wrap:break-word;'>
    <input type="text" name="q_id" value="<?php echo $rows['q_id'];?>">
<td bgcolor="lightgreen"><strong>Question:</strong></td>
<td bgcolor="lightgreen">:</td>
<td bgcolor="lightgreen" style="max-width: 1000px;"><?php echo $rows['q_question']; ?></td>
</tr>

<tr>
<td bgcolor="lightgreen"><strong>A</strong></td>
<td bgcolor="lightgreen">:</td>
<td bgcolor="lightgreen"><input type="radio" name="<?php echo $namespace; ?>" value="a"><?php echo $rows['a'] ?></td>
</tr>
<tr>
<td width="18%" bgcolor="lightgreen"><strong>B</strong></td>
<td width="5%" bgcolor="lightgreen">:</td>
<td width="77%" bgcolor="lightgreen"><input type="radio" name="<?php echo $namespace; ?>" value="b"><?php echo $rows['b'] ?></td>
</tr>
<tr>
<td width="18%" bgcolor="lightgreen"><strong>C</strong></td>
<td width="5%" bgcolor="lightgreen">:</td>
<td width="77%" bgcolor="lightgreen"><input type="radio" name="<?php echo $namespace; ?>" value="c"><?php echo $rows['c'] ?></td>
</tr>
<tr>
<td bgcolor="lightgreen"><strong>D</strong></td>
<td bgcolor="lightgreen">:</td>
<td bgcolor="lightgreen"><input type="radio" name="<?php echo $namespace; ?>" value="d"><?php echo $rows['d'] ?></td>
</tr>


</table></td>
</tr>
<hr>
</table><br>
 <?php
}
?>

然后,对于结果部分,请使用以下代码:

$stud_id = (int)$_POST['s_id'];
$quiz_id = (int)$_POST['q_id'];
$score = 0;

$tbl_name2 = "a_quiz"; 

$sql2 = "SELECT * FROM $tbl_name2 WHERE q_id='$quiz_id'";
$result2 = mysql_query($sql2);

$result = '';

while($rows=mysql_fetch_array($result2)){

    $q_question = $rows['q_question'];
    $question1 = $rows['answer'];
    $namespace = $rows['namespace'];

    $result .= $q_question;
    $result .= <br>;
    $result .= $question1;
    $result .= <br>;

    if(isset($_POST[$namespace])){

        $s_answer = $_POST[$namespace];

        $result .= $s_answer;

        if ($question1 == $s_answer)
            $score++;

    }

}

$result .= $score;

echo $result;

}
?>