2017-11-30 8 views
0

質問とそのオプションを持つクイズを作成しています。質問とオプションの両方が結果セットのデータベースから来ています。私はループと結果セットの問題に直面しています。2つの異なる結果セットで質問と回答を持つPHPクイズ

1 - 各質問のうち選択できません。質問1からオプションを選択しているときは、質問2からオプションを選択できませんでした。

2 - 私のページがクイズ内の質問の数と同じに読み込まれています。たとえば、5つの質問があり、5回リロードすると、ページが2回リロードされます。

if(@$_GET['q']== 'quiz' && @$_GET['step']== 2) { 
[email protected]$_GET['eid']; 
[email protected]$_GET['n']; 
[email protected]$_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>'; 
} 

ありがとうございます。

+0

より良い変数名とインデントをお手伝いします。 – Ice76

+0

eid-exam ID、qns-質問、qid-質問Id – Avi

+0

IMO、MySQLクエリのネストされたループは非常に悪い習慣です。データを取得し、そのデータを表示する必要があります。私は正直にどこから始めるべきかわかりません... – Ice76

答えて

0

だから、バットの右に私はいくつかの問題を参照してください。

簡単なSQLインジェクションが最優先です。 GET要求を使用するので、URLから情報を取得します。見積もりをエスケープして、そのクエリを終了し、URLからすべて削除を実行するだけです。これは、$qを設定するときに行います。

How can I prevent SQL injection in PHP?

count()のMySQL文のwhileループを実行する必要はありません。これは、単一の行を返します。

$aを設定し、forループのために再度設定します。 foreachループを参照してください...

私は申し訳ありませんが、あなたのコードであなたを助けません。それは他の論理的な誤りがあるので完全にやり直す必要があります。 htmlの<form>を理解する必要があり、1つのフォームしか提出できないことに注意してください。また、HTMLでは、要素のIDは一意でなければなりません。これは、あなたが1つの質問応答のみを提出できる理由である可能性があります。また、あなたはあなたの質問に答える方法を見つけると、あなたはそれらのうちの1つだけを提出するように、多くのフォームを持っています。

ほとんどすべてのことをできるだけ小さなコード行で実行しようとしていたようですが、まだ何をやっているのか分かりません。

+0

返信ありがとうございます。あなたの観察は正しいです。私はラジオの選択の最初の問題を解決しました。しかし、まだ2番目の問題にはまっています。私のフォームはクイズの質問の数を提出しています。ように、私は何度もフォームを提出しています。どうすればいいですか?再度、感謝します。 – Avi

+0

@Aviは、多くのフォームを作成していて、ページからそれらを送信しているためです。すべての質問を単一の形式にする – Ice76

関連する問題