PHP在线考试

时间:2017-01-05 21:13:05

标签: php jquery

我正在尝试建立一个在线考试系统。我想从数据库中提取问题并逐一显示。我的意思是,用户点击下一步'看下一个问题。我想使用JQuery。有什么想法吗?

这是我的PHP代码

$getTests = $conn->prepare("SELECT * FROM grammar_test WHERE active = ? ORDER BY RAND() LIMIT 20");
$getTests->execute(array(1));
$rowTests = $getTests->fetch(\PDO::FETCH_ASSOC);`

数据库有20多个问题,但我只想要20个随机问题。

这是HTML(转换为2个字段集,但它们实际上是20个)

<form action="" class="grammar-test-form " method="POST" accept-charset="utf-8">

<fieldset id="first">
    <?php if(!empty($rowTests['instructions'])){ echo '<h4>1. '.$rowTests['instructions'].'</h4>';}?>
    <?php if(!empty($rowTests['question'])){ echo '<h4>'.$rowTests['question'].'</h4>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_1'].'<br/>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_2'].'<br/>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_3'].'<br/>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_4'].'<br/>';}?>
    <hr/>
    <button class="next_btn btn btn-3d btn-green" name="next" type="button">Next &raquo;</button>
</fieldset>

<fieldset>
    <?php if(!empty($rowTests['instructions'])){ echo '<h4>2. '.$rowTests['instructions'].'</h4>';}?>
    <?php if(!empty($rowTests['question'])){ echo '<h4>'.$rowTests['question'].'</h4>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_1'].'<br/>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_2'].'<br/>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_3'].'<br/>';}?>
    <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_4'].'<br/>';}?>
    <hr/>
    <button class="pre_btn btn btn-3d btn-green" name="previous" type="button">Previous</button>
    <button class="next_btn btn btn-3d btn-green" name="next" type="button">Next &raquo;</button>
</fieldset>
</form>

这是从一个字段集移动到另一个字段集的JQuery

    $(document).ready(function() {
        $(".next_btn").click(function() { 

        $(this).parent().next().fadeIn('slow');
        $(this).parent().css({
        'display': 'none'
        });


        $('.active').next().addClass('active');
        });
        $(".pre_btn").click(function() { 
        $(this).parent().prev().fadeIn('slow');
        $(this).parent().css({
        'display': 'none'
        });


        $('.active:last').removeClass('active');
        });
    });

一切正常。问题是选择一个问题并重复20次。我想得到20个不同的问题。任何的想法? 有循环的想法,但我遇到第一个和最后一个字段集的问题,因为第一个,它只有一个按钮(下一个),接下来的18个有2个按钮(下一个和上一个),最后一个有2个按钮(上一个和提交)

1 个答案:

答案 0 :(得分:1)

我认为您的代码格式有点严重。从我所看到的,你只调用了一次fetch(只取第一行数据)。 您将需要在循环中进行提取以获取下一个问题,并将其构建到您的html或您拥有的内容。

示例#2在这里似乎显示出良好的模式。在你的时间内取得: PDOStatement::fetch

我的意思是该链接:

while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
  $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
  print $data;
}

添加了更多示例...这显示使用循环来获取每一行(问题)并输出问题。使用它而不是具有相同代码的20个几乎相同的副本。

<?php
while ($rowTests = $getTests->fetch(\PDO::FETCH_ASSOC)) {
?>
    <fieldset>
        <?php if(!empty($rowTests['instructions'])){ echo '<h4>1. '.$rowTests['instructions'].'</h4>';}?>
        <?php if(!empty($rowTests['question'])){ echo '<h4>'.$rowTests['question'].'</h4>';}?>
        <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_1'].'<br/>';}?>
        <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_2'].'<br/>';}?>
        <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_3'].'<br/>';}?>
        <?php if(!empty($rowTests['instructions'])){ echo '<input type="radio" name="'.$rowTests['question_id'].'"> '.$rowTests['choice_4'].'<br/>';}?>
        <hr/>
        <button class="next_btn btn btn-3d btn-green" name="next" type="button">Next &raquo;</button>
    </fieldset>
<?php
}//end of while loop
?>

为清晰起见,我没有提供关于第一,中,后问题按钮的任何逻辑。

要处理具有不同按钮的第一个和最后一个问题,您应该能够有条件地知道问题是第一个还是最后一个(是#1还是#20)并显示或隐藏相应的按钮。您可以使用jQuery执行此操作,或者不使用PHP创建按钮。再次,你的选择。