2017-11-30 18 views
0

질문과 그 옵션이있는 퀴즈를 만들고 있습니다. 질문과 옵션 모두 결과 집합의 데이터베이스에서 제공됩니다. 나는 루프와 결과에 문제가있다.PHP 퀴즈가 두 가지 다른 결과 집합의 질문과 답변을 가지고 있습니다.

1 - 각 질문에서 옵션을 선택할 수 없습니다. 질문 1의 옵션을 선택할 때마다 질문 2의 옵션을 선택할 수 없습니다.

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- question, 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 루프에 대해 다시 설정하십시오. Look in foreach 루프 ...

죄송 합니다만 귀하의 코드는 도움이되지 않습니다. 다른 논리 오류가 있기 때문에 완전히 다시 작성해야합니다. html <form>을 이해하고 양식을 하나만 제출하면됩니다. 또한 HTML에서 요소의 ID는 고유해야합니다. 하나의 질문 응답 만 제출할 수있는 이유가 될 수 있습니다. 또한 여러 가지 양식이 있으므로 질문에 대답 할 수있는 방법을 찾으면 그 중 하나만 제출하게됩니다.

거의 가능한 모든 코드 줄을 만들려고 한 것 같지만 아직 무엇을하고 있는지 이해하지 못합니다.

+0

답장을 보내 주셔서 감사합니다. 너의 관찰이 옳다. 나는 라디오 선택의 나의 첫번째 문제를 해결했다. 하지만, 여전히 두 번째 문제에 갇혀있다. 내 양식이 퀴즈에서 여러 가지 질문을 제출하고 있습니다. 나는 여러 번 양식을 제출하고있는 것처럼 보입니다. 어떻게해야합니까? 다시 한번 감사드립니다. – Avi

+0

@Avi가 있습니다. 많은 양식을 만들고 페이지가 제출하기 때문입니다. 모든 질문을 단일 형식으로 작성하십시오. – Ice76