2016-12-06 1 views
0

こんにちは、私のデータが複製され、エコーされる原因となっているエラーを3回ではなく3回確認しているようです。もし誰かが私にこの問題を解決するのを助けることができた。データは1回ではなく3回エコーされています

<?php 

session_start(); 
//Connect to database 

if(!isset($_SESSION['username'])) { //check if user-name is not given 

    echo('you are not authorised to veiw this page, log in with admin account to view it'); 

    //show login page 
    include 'login.html'; 
} 
$con=mysqli_connect("localhost:3307","root","usbw","degreeproject"); 

//check if query sucessful else report error 
$classid = $_GET['classid']; 
$studentid = $_GET['userid']; 
$sql3 = "SELECT usernames.username, quizzes.QuizID, results.score, results.QuizID,enrolledclasses.UserID, quizzes.ClassID FROM `results`, enrolledclasses, usernames, quizzes 
       WHERE usernames.username = results.username 
       AND quizzes.QuizID = results.QuizID    
       AND enrolledclasses.UserID = $studentid 
       AND quizzes.ClassID = $classid;"; 


if (!$result3=mysqli_query($con,$sql3)) { 
    die('Error: ' . mysqli_error($con)); 
}  
else { 
    //count the number of records from the query result 
    $count=mysqli_num_rows($result3); 
} 

if($count>=1) { 
    $result3 = mysqli_query($con,$sql3); 
    while(list($Username, $QuizID, $Score) = mysqli_fetch_row($result3)) { 
      $sql = "SELECT COUNT(Question) as total FROM questions WHERE QuizID = $QuizID"; 
      $result = mysqli_query($con, $sql); 
      $numquestions; 
      if($result->num_rows > 0) { 
       $numquestions = $result->fetch_assoc()['total']; 
      } 

      echo"<table>"; 
      echo "<tr>"; 
       echo "<th>Username: </th>"; 
       echo "<th>QuizID: </th>"; 
       echo "<th>Score: </th>"; 
       echo "<th>Go Back: </th>"; 
      echo "</tr>"; 

      echo "<tr>"; 
      echo("<td>$Username</td>"); 
      echo("<td>$QuizID</td>"); 
      echo("<td>$Score/$numquestions</td>"); 
      echo("<td></td>"); 
      echo "<td><a href ='../CurrentlyBeingWorkedOn/index.php'> Go Back Home &nbsp; &nbsp;</a></td>"; 
      echo"</tr>"; 
      echo"</table>"; 
     } 
    } 


$con->query($sql3); 

echo("<p>Successfully Retrieved The Results For The Quizzes Students Have Taken.</p>"); 
echo("<p><a href='javascript:history.back(1);'>Return To Previous Page</a></p>"); 



?> 

これはコードの結果であり、ユーザーに出力される内容です。

[出力結果] [1] [1]:私はあなたの参加条件に問題がある見るものからhttps://i.stack.imgur.com/hn5jm.png

+2

」は、あなたが望むものでない限り、whileループ内にあります。 –

+0

これは、クエリに基づいて見つかった各結果の結果の新しいテーブルをエコーすることになっています。また、他のページのループ内のテーブルと同じコードを持ちますが、この問題は発生しません。 –

+3

通常はSQLの問題のb/cですが、結合によっておそらく余分なデータが返され、コードがそのセットをループしています。あなたはデータベース内のSQLだけを実行して、生の結果を見ることができますか? – dpp

答えて

0

。ユーザー名と結果、クイズと結果の間には関係があります。登録されたクラスと他のテーブルとの間には関係がありません。 where句に関係を追加すると、目的の出力が見つかります。

SELECT usernames.username, quizzes.QuizID, results.score, results.QuizID,enrolledclasses.UserID, quizzes.ClassID FROM `results`, enrolledclasses, usernames, quizzes 
WHERE usernames.username = results.username 
AND quizzes.QuizID = results.QuizID 
AND enrolledclasses.UserID = usernames.UserID   
AND enrolledclasses.ClassID= quizzes.ClassID   
AND enrolledclasses.UserID = $studentid 
AND quizzes.ClassID = $classid; 
+0

どういう意味ですか? –

+0

申し訳ありません。あなたが尋ねたものが得られなかった – reza

+0

どのように私はenrolledclasses.UserID = usernames.UserIDを入れようとしたとしてwhereステートメントに関係を置くと、それは動作しませんでした。 –

0

明示JOINステートメントを使用して、あなたにSQLクエリを書き直すようにしてください:

"SELECT usernames.username, quizzes.QuizID, results.score, 
    results.QuizID,enrolledclasses.UserID, quizzes.ClassID 
FROM usernames u 
    JOIN results r ON u.username=r.username 
    JOIN quizzes q ON q.QuizID=r.QuizID 
    JOIN enrolledclasses ec ON ec.?=?.? 
WHERE q.ClassID = $classid AND ec.UserID=$studentid" 

あなたのenrolledclassesテーブルのジョイン基準を必要とする、私はあなたの特定のコードから見ることができない - 多分あなたはそれに参加することができますユーザー名などのusers表へ上記のコードで疑問符を置き換えるだけです。あなたが参加できる基準がない場合は、enrolledclasses表に1つを導入する必要があります。

+0

私は登録されたテーブルの中にuserIDを持っています。 –

+0

'ec.userID = u.userID' – Andreas

+0

現在のDBのセットアップ - https://gyazo.com/488b9afcfaa5dd59b4c53112015f0c3c SQLコードを入力した後に表示されている –

関連する問題