我正在写一个测验,从数据库中提取问题。它随机排列问题,但是当前正确的答案始终是最后一个答案。我将如何重写答案,以便将正确答案随机放置在选择中。我在while循环中考虑过for循环,但不确定如何编写
代码如下:
<?php
$sql = 'SELECT * FROM quizquestions ORDER BY rand() LIMIT 5';
$result = $db->query($sql); ?>
<?php
while($row = $result->fetch_assoc())
{?>
<div class="questions">
<p><?php echo $row['Question'] ?></p>
<p><input type="radio" name="<?php echo $row['Ans1Name'] ?>" /><?php echo $row['Ans1'] ?></p>
<p><input type="radio" name="<?php echo $row['Ans2Name'] ?>" /><?php echo $row['Ans2'] ?></p>
<p><input type="radio" name="<?php echo $row['Ans3Name'] ?>" /><?php echo $row['Ans3'] ?></p>
<p><input type="radio" name="<?php echo $row['CorrectAnsName'] ?>" /><?php echo $row['CorrectAns'] ?></p>
</div>
<?php }?>
我已经走得更远,并且正在检查分数
我的问题是如何检查所有字段是否都已填写,因为我正在使用此代码
<form action="quiz_submitted.php" method="POST">
<?php $keys = array('Ans1','Ans2','Ans3','CorrectAns');
while ($row = $result->fetch_assoc())
{
shuffle($keys);
printf('<div class="questions">');
printf('<p>%s</p>', $row['Question']);
foreach ($keys as $k)
{
printf('<p><input type="radio" name="%s" value="%s" />%s</p>', $row['QuesName'], $row[$k.'Value'], $row[$k]);
}
printf('</div>');
}
?>
<input type="submit" name="quiz" value="Get Score!" style="margin-left: 475px;" />
</form>
如何定位$ _POST数组中的名称?我尝试使用
if(isset($_POST['quiz'])) {
if(!isset($_POST[$row['QuesName']])) {
die('Please answer all questions');
}
}
但它每次都会杀死该页面。
您应该考虑您的数据库模型,可以添加一个引用表来存储所有答案,并用标记标记正确答案。
使用像现在这样的数据库模型,您将被限制为每个问题x个答案(与您为之准备的列一样多)。
但是,对于这个现有的数据库模型,我建议像这样解决问题(将数组混合混洗):
$sql = 'SELECT * FROM quizquestions ORDER BY rand() LIMIT 5';
$result = $db->query($sql);
$keys = array(
'Ans1',
'Ans2',
'Ans3',
'CorrectAns'
);
while ($row = $result->fetch_assoc()) {
shuffle($keys);
printf('<div class="questions">');
printf('<p>%s</p>', $row['Question']);
foreach ($keys as $k) {
printf('<p><input type="radio" name="%s" />%s</p>', $row[$k.'Name'], $row[$k]);
}
printf('</div>');
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句