我正在进行一个有问题及其选择的测验。问题和选项都来自结果集中的数据库。我在循环和结果集中遇到问题。
1 - 我无法从每个问题中选择选项。每当我从问题1中选择选项时,我都无法从问题2中选择选项。
2 - 我的页面正在重新加载等于测验中的问题数量。例如,我在测验中有两个问题然后页面重新加载两次,如果有5个问题则重新加载5次。
if(@$_GET['q']== 'quiz' && @$_GET['step']== 2) {
$eid=@$_GET['eid'];
$sn=@$_GET['n'];
$total=@$_GET['t'];
$a=1;
$b=0;
$q=mysqli_query($con,"SELECT count(*) FROM questions WHERE eid='$eid'" );
while($row=mysqli_fetch_array($q) ){
$b=$row['count(*)'];
}
echo '<div class="panel" style="margin:5%">';
for($a=1;$a<=$b;$a++){
$q=mysqli_query($con,"SELECT * FROM questions WHERE eid='$eid' AND sn='$a' " );
while($row=mysqli_fetch_array($q) )
{
$qns=$row['qns'];
$qid=$row['qid'];
echo '<b>Question '.$a.' :<br />'.$qns.'</b><br />';
$q=mysqli_query($con,"SELECT * FROM options WHERE qid='$qid' " );
echo '<form action="update.php?q=quiz&step=2&eid='.$eid.'&n='.$sn.'&t='.$total.'&qid='.$qid.'" method="POST" class="form-horizontal">
<br />';
while($row=mysqli_fetch_array($q) )
{
$option=$row['option'];
$optionid=$row['optionid'];
echo'<input type="radio" name="ans" value="'.$optionid.'">'.$option.'<br />';
}
echo '<br /><br />';
}
}
echo'<br /><button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span> Submit</button></form></div>';
}
感谢您的帮助。
答案 0 :(得分:0)
所以,在蝙蝠的右边,我看到了一些问题。
Easy SQL注入是最重要的。您使用GET请求,因此您从URL获取信息。我可以简单地转义引号,结束该查询并从URL运行删除。您在设置$q
时执行此操作。
How can I prevent SQL injection in PHP?
无需在count()
MySQL语句上执行while循环。它返回一行。
您设置$a
,然后再次为for
循环设置它。查看foreach
循环...
很抱歉,我无法帮助您处理代码。它需要完全重做,因为还有其他逻辑错误。您需要了解html <form>
并且您只能提交一个表单。此外,在HTML中,元素的id必须是唯一的。这可能是您只能提交一个问题回复的原因。此外,您有许多表单,以便一旦找到回答问题的方法,您将只提交其中一个。
看起来你似乎试图用尽可能少的代码行完成所有事情,但是你还不明白你在做什么。