【问题标题】:php quiz having questions and answers in two different resultsetphp quiz 在两个不同的结果集中有问题和答案
【发布时间】:2017-11-30 17:30:46
【问题描述】:

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

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>';
}

感谢您的帮助。

【问题讨论】:

  • 通过更好的变量名...和缩进来帮助我们。
  • eid-考试 ID,qns- 问题,qid- 问题 ID
  • IMO,MySQL 查询的嵌套循环是非常糟糕的做法。您应该获取数据,然后显示该数据。老实说,我不知道从哪里开始......
  • 好的。感谢回复。第一个结果集用于提问。第二个结果集用于选项。
  • 我会在几分钟内好好看看

标签: php mysql resultset multiple-resultsets


【解决方案1】:

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

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

How can I prevent SQL injection in PHP?

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

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

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

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

【讨论】:

  • 感谢您的回复。你的观察是对的。我解决了我的第一个收音机选择问题。但是,仍然卡在第二个问题上。我的表格正在提交测验中的问题数量。好像,我多次提交表格。我应该怎么做?再次感谢。
  • @Avi 这是因为您正在创建许多表单并且页面会提交它们。将所有问题放在一个表格中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
相关资源
最近更新 更多