2011-10-13 33 views
0

我最近修改了一些代碼,以允許我的quiz.php腳本容納多個測驗而不僅僅是一個。爲此,我在用戶點擊測驗鏈接時發送了quiz_idquiz_title變量,並使用$ _GET接收它們。但是,一旦提交了測驗形式,quiz_id列不再在high_score表中更新。SQL INSERT查詢不會更新PHP Web應用程序的列

這裏是quiz.php

<?php 
    // Start the session 
    require_once('startsession.php'); 

    // Insert the Page Header 
    $page_title = "Quiz Time!"; 
    require_once('header.php'); 

    require_once('connectvars.php'); 

    // Make sure user is logged in 
    if (!isset($_SESSION['user_id'])) { 
     echo '<p>Please <a href="login.php">log in</a> to access this page.</p>'; 
     exit(); 
    } 

    // Show navigation menu 
    require_once('navmenu.php'); 

    // Connect to database 
    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

    // Declare $quiz_id 
    $quiz_title = $_GET['title']; 
    $quiz_id = $_GET['id']; 
    // print_r($quiz_title); 
    // print_r($quiz_id); 

    // Grab list of question_id's for this quiz 
    $query = "SELECT question_id FROM question WHERE quiz_id = '" . $quiz_id . "'"; 
    $data = mysqli_query($dbc, $query); 
    $questionIDs = array(); 
    while ($row = mysqli_fetch_array($data)) { 
     array_push($questionIDs, $row['question_id']); 
    } 


    // Create empty responses in 'quiz_response' table 
    foreach ($questionIDs as $questionID) { 
     $query = "INSERT INTO quiz_response (user_id, question_id) VALUES ('" . $_SESSION['user_id'] . "', '" . $questionID . "')"; 
     mysqli_query($dbc, $query); 
    } 


    // If form is submitted, update choice_id column of quiz_response table 
    if (isset($_POST['submit'])) { 
     // Inserting choices into the response table 
     foreach ($_POST as $choice_id => $choice) { 
      $query = "UPDATE quiz_response SET choice_id = '$choice', answer_time=NOW() " . 
      "WHERE response_id = '$choice_id'"; 
      mysqli_query($dbc, $query); 
     } 

     // Update the 'is_correct' column 
     // Pull all is_correct data from question_choice table relating to specific response_id 
     $total_Qs = 0; 
     $correct_As = 0; 
     foreach ($_POST as $choice_id => $choice) { 
      $query = "SELECT qr.response_id, qr.choice_id, qc.is_correct " . 
      "FROM quiz_response AS qr " . 
      "INNER JOIN question_choice AS qc USING (choice_id) " . 
      "WHERE response_id = '$choice_id'"; 
      $data=mysqli_query($dbc, $query); 
      // Update is_correct column in quiz_response table 
      while ($row = mysqli_fetch_array($data, MYSQLI_ASSOC)) { 
       $total_Qs ++; 
       if ($row['is_correct'] == 1) { 
        $query2 = "UPDATE quiz_response SET is_correct = '1' " . 
        "WHERE response_id = '$row[response_id]'"; 
        mysqli_query($dbc, $query2); 
        $correct_As ++; 
       } 
      } 
     }  

     // Update high_score table with $correct_As 
     $quiz_id = $_POST['quiz_id']; 
     $query = "INSERT INTO high_score " . 
     "VALUES ('0', '" . $_SESSION['user_id'] . "', '" . $quiz_id . "', '" . $correct_As . "', NOW())"; 
     mysqli_query($dbc, $query); 

     // Display score after storing choices in database 
     echo 'You got ' . $correct_As . ' out of ' . $total_Qs . ' correct'; 

     exit(); 
     mysqli_close($dbc); 
    } 



    // Grab the question data from the database to generate the form 
    $Q_and_Cs = array(); 
    foreach ($questionIDs as $questionID) { 
     $query = "SELECT qr.response_id AS r_id, qr.question_id, q.question " . 
      "FROM quiz_response AS qr " . 
      "INNER JOIN question AS q USING (question_id) " . 
      "WHERE qr.user_id = '" . $_SESSION['user_id'] . "' " . 
      "AND qr.question_id = '" . $questionID . "'"; 
     $data = mysqli_query($dbc, $query) 
      or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query"); 
     // Store in $questions array, then push into $Q_and_Cs array 
     while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) { 
      print_r($row); 
      $questions = array(); 
      $questions['r_id'] = $row['r_id']; 
      $questions['question_id'] = $row['question_id']; 
      $questions['question'] = $row['question']; 
      // Pull up the choices for each question 
      $query2 = "SELECT choice_id, choice FROM question_choice " . 
      "WHERE question_id = '" . $row['question_id'] . "'"; 
      $data2 = mysqli_query($dbc, $query2); 
      while ($row2 = mysqli_fetch_array($data2, MYSQL_NUM)) { 
       $questions[] = $row2[0]; 
       $questions[] = $row2[1]; 
      } 
      array_push($Q_and_Cs, $questions); 
     } 
    } 
    mysqli_close($dbc); 


    // Generate the quiz form by looping through the questions array 
    echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '">'; 
    echo '<h2>' . $quiz_title . '</h2>'; 
    $question_title = $Q_and_Cs[0]['question']; 
    echo '<label for="' . $Q_and_Cs[0]['r_id'] . '">' . $Q_and_Cs[0]['question'] . '</label><br />'; 
    foreach ($Q_and_Cs as $Q_and_C) { 
     // Only start a new question if the question changes 
     if ($question_title != $Q_and_C['question']) { 
      $question_title = $Q_and_C['question']; 
      echo '<br /><label for="' . $Q_and_C['r_id'] . '">' . $Q_and_C['question'] . '</label><br />'; 
     } 
     // Display the choices 
     // Choice #1 
     echo '<input type="radio" id="' . $Q_and_C['r_id'] . '" name="' . $Q_and_C['r_id'] . '" value="' . $Q_and_C[0] . '" />' . $Q_and_C[1] . '<br />'; 
     // Choice#2 
     echo '<input type="radio" id="' . $Q_and_C['r_id'] . '" name="' . $Q_and_C['r_id'] . '" value="' . $Q_and_C[2] . '" />' . $Q_and_C[3] . '<br />'; 
     // Choice #3 
     echo '<input type="radio" id="' . $Q_and_C['r_id'] . '" name="' . $Q_and_C['r_id'] . '" value="' . $Q_and_C[4] . '" />' . $Q_and_C[5] . '<br />'; 
     // Choice #4 
     echo '<input type="radio" id="' . $Q_and_C['r_id'] . '" name="' . $Q_and_C['r_id'] . '" value="' . $Q_and_C[6] . '" />' . $Q_and_C[7] . '<br />'; 
    } 
    echo '<br /><br />'; 
    echo '<input type="hidden" name="quiz_id" value"'.$quiz_id.'" />'; 
    echo '<input type="submit" value="Grade Me!" name="submit" />'; 
    echo '</form>'; 
    // echo 'Quiz_id: '.$quiz_id.'<br />'; 


    // Insert the page footer 
    require_once('footer.php'); 

?> 

下面的代碼爲quizlist.php

// Determine number of quizes based on title in quiz table 
    $query = "SELECT * FROM quiz"; 
    $data = mysqli_query($dbc, $query); 
    // Loop through quiz titles and display links for each 
    while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) { 
    echo '<a href="quiz.php?id='.$row['quiz_id'].'&amp;title='.$row['title'].'">' . $row['title'] . '</a><br />'; 
    } 

    mysqli_close($dbc); 

的代碼我的問題有一段代碼做

$query = "INSERT INTO high_score " . 
      "VALUES ('0', '" . $_SESSION['user_id'] . "', '" . $quiz_id . "', '" . $correct_As . "', NOW())"; 

它用於替換$quiz_id處的數字(即2),但爲了使腳本t o爲不同的測驗工作,我需要能夠爲不同的測驗使用不同的quiz_id。

我無法使用$ _GET從quizlist.php中獲取變量,然後在提交表單時將它作爲隱藏值傳遞。 我做錯了什麼?或者我錯過了一些完全明顯的東西?我會很感激任何幫助!謝謝...

+0

僅供參考此頁面上的任何用戶時,我在表單的隱藏輸入元素之外留下等號... – Abundnce10

回答

1

在第一條線索,在我看來,你讓你的$ quiz_id形式的GET請求(這是正確的),但你有一個條件

if (isset($_POST['submit'])) { 

這是隻有滿足表單提交時(POST請求),而不是鏈接點擊。因此,當您點擊鏈接

+0

我編輯了我的代碼根據你的線索,但仍不能成功更新quiz_id列。我在測驗表單中添加了一個隱藏值,然後嘗試使用$ _POST函數訪問它...還有什麼想法? – Abundnce10

+0

請解釋您的腳本的工作原理,標記等。 單擊鏈接時,您可以在提交表單時從$ _GET或從$ _POST取得變量,具體取決於方法屬性的表單元素 –