0

我正在做一个有问题及其选项的测验。问题和选项都来自结果集中的数据库。我在循环和结果集中面临问题。

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 &nbsp;'.$a.'&nbsp;:<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>&nbsp;Submit</button></form></div>';
}

感谢您的帮助。

4

1 回答 1

0

所以,我马上就看到了一些问题。

简单的 SQL 注入是最重要的。您使用 GET 请求,因此您从 URL 获取信息。我可以简单地转义引用,结束该查询并从 URL 中运行删除。设置时执行此操作$q

如何防止 PHP 中的 SQL 注入?

无需对count()MySQL 语句执行 while 循环。它返回单行。

您设置$a然后再次为for循环设置它。看看foreach循环...

很抱歉,我无法帮助您处理您的代码。它需要完全重做,因为还有其他逻辑错误。您需要了解 html <form>,并且您只能提交一个表单。此外,在 HTML 中,元素的 id 必须是唯一的。这可能是您只能提交一个问题回复的原因。此外,您有许多表格,因此一旦您找到了回答问题的方法,您将只提交其中一个。

几乎看起来你试图用尽可能少的代码行来做所有事情,但你还不明白你在做什么。

于 2017-11-30T19:16:01.840 回答