我正在尝试建立一个在线考试系统。我想从数据库中提取问题并逐一显示。我的意思是,用户点击下一步'看下一个问题。我想使用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 »</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 »</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个按钮(上一个和提交)
答案 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 »</button>
</fieldset>
<?php
}//end of while loop
?>
为清晰起见,我没有提供关于第一,中,后问题按钮的任何逻辑。
要处理具有不同按钮的第一个和最后一个问题,您应该能够有条件地知道问题是第一个还是最后一个(是#1还是#20)并显示或隐藏相应的按钮。您可以使用jQuery执行此操作,或者不使用PHP创建按钮。再次,你的选择。