Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在线考试_Php_Jquery - Fatal编程技术网

PHP在线考试

PHP在线考试,php,jquery,Php,Jquery,我正在尝试建立一个在线考试系统。我想从数据库中获取问题并逐一显示。我的意思是,用户点击“下一步”查看下一个问题。我想使用JQuery。有什么想法吗 这是我的PHP代码 $getTests = $conn->prepare("SELECT * FROM grammar_test WHERE active = ? ORDER BY RAND() LIMIT 20"); $getTests->execute(array(1)); $rowTests = $getTests->fetc

我正在尝试建立一个在线考试系统。我想从数据库中获取问题并逐一显示。我的意思是,用户点击“下一步”查看下一个问题。我想使用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个)

一切正常。问题是选择一个问题并重复20次。我想问20个不同的问题。有什么想法吗?
虽然有while循环的想法,但我发现第一个和最后一个字段集有问题,因为第一个字段集只有一个按钮(Next),接下来的18个字段集有两个按钮(Next和Previous),最后一个字段集有两个按钮(Previous和Submit)

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

这里的例子2似乎显示了一个很好的模式。在以下时间提取:

我的意思是,从这个链接中:

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创建按钮。同样,这是您的选择。

对于问题“问题是选择了一个问题并重复了20次”:检查SQL query是否给出了20个不同的问题。我认为循环有问题,可能采用相同的问题id,请尝试foreach。如果你能提供更多的代码来获得更准确的答案,请。请让你的标题描述一个独特的问题。“一切都很好。问题是“那么就不行了,是吗?”)顺便说一下,使用PDO和参数的道具。你会惊讶地发现很少有人这样做。你是如何循环通过
$rowTests
?如果你得到了20个相同的结果,那么你的循环很可能有问题。这个答案看起来很有趣,信息量也很大。谢谢但我不太明白。请你再清楚一点或者举个例子。顺便说一句,我还没有遇到PDO::FETCH_ORI_NEXT。新学到的东西。很appreciated@Neville我添加了另一个示例,以更好地说明我对您的情况的循环的意思。请注意,while围绕着问题,因此您只需要将问题编码一次,并填充从fetch操作检索到的数据。
while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
  $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
  print $data;
}
<?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
?>