Webbserverprogrammering 1

Show sourcecode

The following files exists in this folder. Click to view.

Webserver1/Ovningar/Quiz/

account.php
create_quiz.js
create_quiz.php
fetch_table.php
frontpage.php
header.php
login.php
quiz.php
quiz_answer_finished.php
quiz_creation_finished.php
signup.php
style.css

quiz_answer_finished.php

124 lines UTF-8 Windows (CRLF)
<?php
session_start
();
include(
'../../incl/dbconnection.php');
/**
 * @var PDO $dbconn
 */

$questionAnswers = [];
$correctAnswers = [];
$questionNrToIdMap = [];
$score = 0;

// Spara fråga => val
foreach ($_POST as $key => $value) {
  switch (
true) {
    case 
preg_match("/^q\d+c\d+\z/", $key):
      echo 
$key;
      
sscanf($key, "q%dc%d", $questionNr, $choiceNr);

      
$questionAnswers[$questionNr] = ["text" => $value, "choiceNr" => $choiceNr];
      break;

    default:
      echo 
"<p>" . $value . " är något annat</p>";
      break;
  }
}

$insertView = "INSERT INTO quiz_views (quiz_id) values(?)";
$insertResults = "INSERT INTO quiz_quiz_results (user_id, quiz_id, score) values(?,?, ?)";
$insertAnswers = "INSERT INTO quiz_answers (quiz_result_id, question_id, option_id) values(?,?,?)";
$selectQuestions = "SELECT question_id, question_order FROM quiz_questions WHERE quiz_id=?";
$getOption = "SELECT option_id, is_correct FROM quiz_options WHERE question_id=? AND option_text=?";
$updateViews = "UPDATE quiz_quizzes SET total_views=total_views+1 WHERE quiz_id=?";

try {
  if (isset(
$_GET["success"]) && $_GET["success"] == 1) {
?>
    <div>
      Grattis och sånt, ditt svar är inskickat!
      <a href="./frontpage.php">
        <button>
          Tillbaka till startsidan
      </button>
    </a>
    </div>
<?php
  
} else {
    
// Begin transaction so that it wont break tables if exception occurs
    
$dbconn->beginTransaction();
    
    
$quizId = $_POST["quiz_id"];
    
    
$insertViewStmt = $dbconn->prepare($insertView);
    
$insertViewStmt->execute([$quizId]);
    
$updateViewsStmt = $dbconn->prepare($updateViews);
    
$updateViewsStmt->execute([$quizId]);

    
$questionStmt = $dbconn->prepare($selectQuestions);
    
$questionStmt->execute([$quizId]);

    
// Find correct answers
    
foreach ($questionStmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
      
$qNr = $row["question_order"];
      
$qId = $row["question_id"];
      echo 
"\n";
      
print_r($row);
      
$questionNrToIdMap[$qNr] = $qId;
      
$getOptionStmt = $dbconn->prepare($getOption);
      
$getOptionStmt->execute([$qId, $questionAnswers[$qNr]["text"]]);

      
$option = $getOptionStmt->fetch(PDO::FETCH_ASSOC);
      echo 
"<br>";
      
print_r($option);
      
$questionAnswers[$qNr]["choiceId"] = $option["option_id"];
      if (
$option && $option["is_correct"]) {
        
$correctAnswers[] = $questionAnswers[$qNr]["text"];
        
$score++;
      }
    }

    
// Insert quiz results
    
$insertResultsStmt = $dbconn->prepare($insertResults);
    
$insertResultsStmt->execute([$_SESSION["userId"], $quizId, $score]);
    
$resultId = $dbconn->lastInsertId();

    
// Insert Answers
    
$insertAnswersStmt = $dbconn->prepare($insertAnswers);

    foreach (
$questionAnswers as $qNr => $answer) {
      
$insertAnswersStmt->execute([$resultId, $questionNrToIdMap[$qNr], $answer["choiceId"]]);
    }
    
// // Commit once everything completed correctly
    
$dbconn->commit();
    echo 
"Data has been added successfully!";
    echo 
"<pre>";
    
print_r($_SESSION);
    echo 
"qAnswers \n";
    
print_r($questionAnswers);
    echo 
"score \n";
    
print_r($score);
    echo 
"\n correctAnswers \n";
    
print_r($correctAnswers);
    echo 
"</pre>";
    
header("Location: " . $_SERVER['PHP_SELF'] . "?success=1");
  }
} catch (
Exception $e) {
  
$dbconn->rollBack();
  echo 
"Exception: " . $e->getMessage();
}
?>
<!DOCTYPE html>
<html lang="sv">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Färdigt!</title>
</head>

<body>
</body>

</html>