echo '</div>'; } if (isset($update['stat'])) { echo '<div id=stat>'; $noq = $db->getValue("select NoQ from oes_Exam where ID = {$exam}"); $result = $db->query("select\n\t\t\t\tT.ID as Test,\n\t\t\t\tIDCode,\n\t\t\t\tLastName,\n\t\t\t\tFirstName,\n\t\t\t\tDoB,\n\t\t\t\tT.TimeSpent,\n\t\t\t\t(select count(distinct ID) from oes_Answer join oes_TQ on ID = TQ\n\t\t\t\t\t\twhere Test = T.ID)\n\t\t\t\t\t\tas Done\n\t\t\tfrom oes_Student join\n\t\t\t\t(select * from oes_Test where Exam = {$exam}) as T\n\t\t\t\ton T.Student = oes_Student.ID"); $nor = mysql_num_rows($result); if ($nor == 0) { echo "<div id=sum>Chưa có bài dự thi nào</div>"; } else { echo "<div id=sum>Tổng số {$nor} bài dự thi</div>"; echo '<table class=examtable cellspacing="0"><tr>'; echo '<th>MSV<th>Họ tên<th>NS<th>Hết<th>Làm<th>Đúng<th>XS<th>Điểm'; $c = 0; while ($row = mysql_fetch_array($result)) { echo $c++ & 1 ? "<tr class=alt>" : "<tr>"; $correct = getCorrectCount($db, $row['Test']); echo '<td>' . $row['IDCode']; echo '<td>' . $row['LastName'] . ' ' . $row['FirstName']; echo '<td>' . $row['DoB']; echo '<td align=right>' . $row['TimeSpent'] . ' phút'; echo '<td align=right>' . $row['Done'] . ' câu'; echo '<td align=right>' . $correct . ' câu'; echo '<td align=right>' . ($row['Done'] ? round(100 * $correct / $row['Done']) . '%' : '---'); echo '<td align=right>' . round(round(40 * $correct / $noq) / 4, 2); } echo '</table>'; } echo '</div>'; mysql_free_result($result); }
function getData($code, $connection) { if (!isTokenUser()) { $code = 4; } switch ($code) { //////////////////////CASE -1///////////////////////////////////// //Si entra aqui es porque ningun dato de S_POST coincide con una acción valida. Ya que el $dataCode por defecto es -1 case -1: $response = array("error" => 1030, "description" => "Error no se ejecuto ninguna acción, verifica los parametros de entrada."); break; //////////////////////CASE 0///////////////////////////////////// //Obtenemos las opciones a mostrar de un pregunta y las devolvemos en un array en formato json //////////////////////CASE 0///////////////////////////////////// //Obtenemos las opciones a mostrar de un pregunta y las devolvemos en un array en formato json case 0: if ($connection) { $id_pregunta = $_POST["id_pregunta"]; $dataOptions = $connection->query("SELECT * FROM " . TABLE_PREFIX . TABLE_OPCIONES . " where id_pregunta = " . $id_pregunta); $data; /* * obtenemos los datos de la base de datos en un array asociativo. */ while ($fila = $dataOptions->fetch_assoc()) { $data[] = $fila; } //dado que los valores de la base de datos vienen en codificacion utf-8, hay que transformar aquellas columnas con campos de texto. $dataResponse = codificationArray($data, "m_option"); //para la variable m_option de la tabla n_opciones se codifica en utf-8 $response = $dataResponse; } else { $response = array("error" => 1020, "description" => "Error conexión no establecida"); } break; //////////////////////CASE 1///////////////////////////////////// //Devolvemos la pregunta dado una paginacion ( con un LIMIT en la select filtramos la paginación) . //////////////////////CASE 1///////////////////////////////////// //Devolvemos la pregunta dado una paginacion ( con un LIMIT en la select filtramos la paginación) . case 1: if (!isTokenTest()) { createTokenTest(getTokenUser()); } else { if (isTokenTest() && isset($_POST["isFirstSelectedTest"]) && $_POST["isFirstSelectedTest"] == "true") { //$response = array("error" => 1200, "Error token desincronizado"); $response = array("error" => 1200, "desError" => "Test desincronizado", "page" => getPage(), "category" => getCategory(), "token_test" => getTokenTest(), "token_user" => getTokenUser()); break; } } //sincronizamos el avanze de paginas if (!isPage()) { createPage(intval($_POST["pagination"])); } else { if (isset($_SESSION["is_page_refresh"]) && $_SESSION["is_page_refresh"] && getPage() < intval($_POST["pagination"])) { createPage(intval(getPage()) + 1); } else { if (isset($_SESSION["is_page_refresh"]) && $_SESSION["is_page_refresh"]) { createPage(intval(getPage())); } else { createPage(intval(getPage()) + 1); } } } if (!isCategory()) { //si no esta sincroniada la categoria se sincroniza createCategory(intval($_POST["id"])); } if ($connection) { $pagination = getPage(); //numero de pagina. $id = $_POST["id"]; //id categoria: 1- ingles, 2- aleman... $result = $connection->query("SELECT * FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " where id_title = " . $id . " LIMIT " . $pagination . ",1"); $countLengthData = $connection->query("SELECT count(id) as count FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " where id_title = " . $id); $data = array(); while ($fila = $result->fetch_assoc()) { $data[] = $fila; } $dataResponse = codificationArray($data, "question"); //para la variable question de la tabla n_preguntas se codifica en utf-8 $dataLength = $countLengthData->fetch_assoc(); $dataResponse[1] = $dataLength; //numero de preguntas para la categoria actual if (!isCountQuestion()) { createCountQuestion($dataLength); } $dataResponse[2] = getTokenTest(); $dataResponse[3] = getTokenUser(); $response = $dataResponse; } else { $response = array("error" => 1020, "description" => "Error conexión no establecida"); } break; //////////////////////CASE 2///////////////////////////////////// // Actualizamos el progresso del cliente. //////////////////////CASE 2///////////////////////////////////// // Actualizamos el progresso del cliente. case 2: if (isPage()) { $canContinue = false; if (isset($_POST["pageUpdate"]) && $_POST["pageUpdate"]) { if (intval(getPage()) == intval($_POST["pageUpdate"])) { $canContinue = true; } else { $canContinue = false; } } else { $canContinue = true; } if ($canContinue === true) { if (isset($_SESSION["u_email"])) { $emailClient = $_SESSION["u_email"]; $id_question = $_POST["id_question"]; $id_option = $_POST["id_option"]; if ($connection) { if (!isset($_SESSION["id_cliente"])) { $resultQueryClientes = $connection->query("select id from " . TABLE_PREFIX . TABLE_CLIENTES . " WHERE email = '{$emailClient}'"); $responseQueryClientes = $resultQueryClientes->fetch_assoc(); $_SESSION["id_cliente"] = $responseQueryClientes["id"]; } $query = "SELECT count(o.id) as count\n\t\t\t\t\t\t\t\t\t\t FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " p inner join " . TABLE_PREFIX . TABLE_OPCIONES . " o\n\t\t\t\t\t\t\t\t\t\t on o.id_pregunta = p.id\n\t\t\t\t\t\t\t\t\t\t where {$id_option}. = (select id_opcion from " . TABLE_PREFIX . TABLE_RESPUESTA . " where id_pregunta = {$id_question})"; $resultCountCorrect = $connection->query($query); $countCorrectOption = $resultCountCorrect->fetch_assoc(); $codeTemp = getTokenTest(); $id_client = $_SESSION["id_cliente"]; $id_category = getCategory(); $date_update = date("Y-m-d H:i:s"); $insert = $connection->query("INSERT INTO " . TABLE_PREFIX . TABLE_HISTORY_TEST . " (id_client,id_option,id_question,id_title,code_validation,m_date) VALUES({$id_client},{$id_option},{$id_question},{$id_category},'{$codeTemp}','{$date_update}')"); //obtenemos el numero de preguntas de esta categoria. $countQuestionResult = $connection->query("SELECT count(id) as count FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " where id_title = " . $id_category); $countQuestionTemp = $countQuestionResult->fetch_assoc(); $countQuestion = $countQuestionTemp["count"]; if (intval($countCorrectOption["count"] > 0)) { //si es mayor que cero significa que es la que tenemos marcada como buena en la base de datos. if (!isset($_SESSION["correctCount"])) { //si el correctCount no está creado aún lo creamos con valor a 1 porque yá tenemos una respuesta correcta. $_SESSION["correctCount"] = 1; } else { //si ya estaba activo, solo incrementamos su valor en 1. $_SESSION["correctCount"] = intval($_SESSION["correctCount"]) + 1; } $dataUpdate = array("check" => $_SESSION['correctCount']); } else { $dataUpdate = array("check" => -1); //editamos el mensaje de respuesta. } } else { $dataUpdate = array("error" => 1020, "description" => "Error conexión no establecida"); } } else { $dataUpdate = array("error" => 1050, "description" => "Error de session, la sessión ha expirado."); } } else { $dataUpdate = array("error" => 1200, "desError" => "Test desincronizado", "page" => getPage(), "category" => getCategory(), "token_test" => getTokenTest(), "token_user" => getTokenUser()); } $response = $dataUpdate; break; } else { $response = array("error" => 1050, "description" => "Error de session, la sessión ha expirado."); break; } case 3: //aqui el cliente a finalizado el test y mostramos el detalle de los resultados. $id_client = $_SESSION["id_cliente"]; $date_update = date("Y-m-d H:i:s"); $id_category = getCategory(); $puntuacion = $_SESSION["correctCount"]; $token_test = getTokenTest(); $result = $connection->query("INSERT INTO " . TABLE_PREFIX . TABLE_HISTORY . " (id_client,id_title,code_validation,m_date,points) VALUES ({$id_client},{$id_category},'{$token_test}','{$date_update}',{$puntuacion})"); if ($result) { $response = array("check" => "register inserted.", "data" => array("num_question" => getCountQuestion(), "correctCount" => getCorrectCount())); } else { $response = array("error" => $connection->error); } $dataEndTest = isEndTest($id_category, $token_test, $connection); if ($dataEndTest) { $_SESSION["end_test"] = true; sendResult($_SESSION["u_email"], "Resultado del Test en GRUPOIOE", showResume($dataEndTest, $connection)); } break; case 4: //aqui no existe el token de usuario, la sesion posiblemente haya expirado. $response = array("error" => 1100, "description" => "Error token expirado"); break; case 5: //aqui devolvemos si hay un test activo o no. $response = array("isTestActive" => isTokenTest()); break; case 6: //aqui estamos devolviendo los datos desde la cache de la sesion. if (isTestFinished()) { $response = array("cache" => "get data from cache.", "data" => array("num_question" => getCountQuestion(), "correctCount" => getCorrectCount())); } else { $response = array("page" => getPage(), "category" => getCategory(), "token_test" => getTokenTest(), "token_user" => getTokenUser()); } break; //////////////////////DEFAULT///////////////////////////////////// //cualquier accion no contemplada entrara aqui. //////////////////////DEFAULT///////////////////////////////////// //cualquier accion no contemplada entrara aqui. default: $response = array("error" => 1040, "description" => "Error de PHP, error inesperado"); break; } $connection->close(); echo json_encode($response); }