Добрый день друзья, пишу систему тестирования, столкнулся с ошибкой: Fatal error: Cannot re-assign auto-global variable _POST in W:\domains\KKOLLEGE\Functions.php on line 78
Вот собственно содержимое файла Functions.php
<?php
// Распечатка массива
function print_arr($arr){
echo '<pre>' . print_r($arr, true) . '</pre>';
}
// Получение списка тестов
function get_tests(){
global $db;
$query = "SELECT * FROM test WHERE enable = '1' ";
$res = mysqli_query($db, $query);
if(!$res) return false;
$data = array();
while($row = mysqli_fetch_assoc($res)){
$data[] = $row;
}
return $data;
}
// Получение данных теста
function get_test_data($test_id){
if( !$test_id ) return;
global $db;
$query = "SELECT q.question, q.parent_test, a.id, a.answer, a.parent_question
FROM questions q
LEFT JOIN answers a
ON q.id = a.parent_question
LEFT JOIN test
ON test.id = q.parent_test
WHERE q.parent_test = $test_id AND test.enable = '1' ";
$res = mysqli_query($db, $query);
$data = null;
while ($row = mysqli_fetch_assoc($res)) {
if( !$row['parent_question'] ) return false;
$data[$row['parent_question']][0]= $row['question'];
$data[$row['parent_question']][$row['id']] = $row['answer'];
}
return $data;
}
// Получение id вопрос-ответы
function get_correct_answers($test){
if( !$test ) return false;
global $db;
$query = "SELECT q.id AS question_id, a.id AS answer_id
FROM questions q
LEFT JOIN answers a
ON q.id = a.parent_question
LEFT JOIN test
ON test.id = q.parent_test
WHERE q.parent_test = $test AND a.correct_answer = '1' AND test.enable = '1'";
$res = mysqli_query($db, $query);
$data = null;
while($row = mysqli_fetch_assoc($res)){
$data[$row['question_id']] = $row['answer_id'];
}
return $data;
}
// Строим пагинацию
function pagination($count_questions, $test_data){
$keys = array_keys($test_data);
$pagination = '<div class="pagination">';
for($i = 1; $i <= $count_questions; $i++){
$key = array_shift($keys);
if($i == 1){
$pagination .= '<a class="nav-active" href="#question-' . $key . '">' . $i . '</a>';
}else {
$pagination .= '<a href="#question-' . $key . '">' . $i . '</a>';
}
}
$pagination .= '</div>';
return $pagination;
}
// Итоги
// 1- Массив Вопрос/ответы 2- Правильные ответы 3- Ответы пользователя
function get_test_data_result($test_all_data, $result, $_POST){
// Заполняем массив $test_all_data правильными ответами и данными о неотвеченных вопросах
foreach ($result as $q => $a){
$test_all_data[$q]['correct_answer'] = $a;
// Добавим в массив данные о неотвеченных вопросах
if( !isset($_POST[$q]) ){
$test_all_data[$q]['incorrect_answer'] = 0;
}
}
// Добавим неверный ответ если таковой был
foreach ($_POST as $q => $a) {
// Удалим из $_POST "левые" значения вопросов
if( !isset($test_all_data[$q]) ){
unset($_POST[$q]);
continue;
}
// Если есть "левые" значения ответов
if( !isset($test_all_data[$q][$a]) ){
$test_all_data[$q]['incorrect_answer'] = 0;
continue;
}
// Добавляем неверный ответ
if( $test_all_data[$q]['correct_answer'] != $a ){
$test_all_data[$q]['incorrect_answer'] = $a;
}
}
return $test_all_data;
}
// Печать результатов
function print_result($test_all_data_result){
// Переменные результатов
$all_count = count($test_all_data_result); // количество вопросов
$correct_answer_count = 0; // количество верных ответов
$incorrect_answer_count = 0; // количество неверных ответов
$percent = 0; // процент верных ответов
// Подсчёт результатов
foreach ($test_all_data_result as $item) {
if( isset($item['incorrect_answer']) ) $incorrect_answer_count++;
}
$correct_answer_count = $all_count - $incorrect_answer_count;
$percent = round ( ($correct_answer_count / $all_count * 100), 2);
// вывод результатов
$print_res = '<div class="questions">';
$print_res .= '<div class="count-res">';
$print_res .= "<p>Всего вопросов: <b>{$all_count}</b></p>";
$print_res .= "<p>Из них отвечено верно: <b>{$correct_answer_count}</b></p>";
$print_res .= "<p>Из них отвечено неверно: <b>{$incorrect_answer_count}</b></p>";
$print_res .= "<p>% верных ответов: <b>{$percent}</b></p>";
$print_res .= '</div>';
$print_res .= '</div>';
return $print_res;
}
?>
Вот содержимое файла Tests.php
<?php
ini_set("display_errors", 1);
error_reporting(-1);
require_once "db.php"; // подключение к базе данных для регистрации, авторизации через RedBeanPHP
require_once "functions.php"; // подключение файл с функциями
require_once "bdfortests.php"; // Подключение базы данных для вывода тетсов
if( isset($_POST['test']) ){
$test = (int)$_POST['test'];
unset($_POST['test']);
$result = get_correct_answers($test);
if( !is_array($result) ) exit('Ошибка');
// Данные теста
$test_all_data = get_test_data($test);
// 1- Массив Вопрос/ответы 2- Правильные ответы 3- Ответы пользователя
$test_all_data_result = get_test_data_result($test_all_data, $result,$_POST);
// print_r($_POST);
// print_r($result);
// print_r($test_all_data_result);
echo print_result($test_all_data_result);
die;
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="=ie=edge">
<link rel="stylesheet" type="text/css" href="css/Login.css">
<link rel="stylesheet" type="text/css" href="css/test.css"> <!-- Стили для тестов -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<title>Тесты ЧУ ККК</title>
</head>
<body>
<?php
require "blocks/TestHeader.php"; // Подключаем Head файл
// Получение списока тестов
$tests = get_tests();
if( isset($_GET['test']) ){
$test_id = (int)$_GET['test'];
$test_data = get_test_data($test_id);
if ( is_array($test_data) ){
$count_questions = count($test_data);
$pagination = pagination($count_questions, $test_data);
}
}
?>
<!-- Вывод тестов на страницу -->
<div class="wrap">
<?php if( $tests ): ?>
<h3 class="my-0 mr-md-auto font-weight-normal">Варианты тестов</h3>
<?php foreach($tests as $test): ?>
<p><a class="btn btn-outline-primary" href="?test=<?=$test['id']?>"><?=$test['test_name']?></a></p>
<?php endforeach; ?>
<!-- Если тест есть и на него нажали, тогда будем выводить -->
<br><hr><br>
<div class="content">
<?php if( isset($test_data) ): ?>
<p>Всего вопросов: <?=$count_questions?></p>
<?=$pagination?>
<span class="none" id="test-id"><?=$test_id?></span>
<!-- Получаем каждый конкретный вопрос + ответы -->
<div class= "test-data">
<h6 class="my-0 mr-md-auto font-weight-normal">Вывод вопросов и ответов</h6>
<?php foreach($test_data as $id_question => $item): ?>
<div class="question" data-id="<?=$id_question?>" id="question-<?=$id_question?>">
<?php foreach($item as $id_answer => $answer): // проходимся по массиву вопрос-ответы ?>
<?php if( !$id_answer ): // выводим вопрос ?>
<p class="q"><?=$answer?></p>
<?php else: // выводим варианты ответов ?>
<p class="a">
<input type="radio" id="answer-<?=id_answer?>" name="question-<?=$id_question?>" value="<?=id_answer?>">
<label for="answer-<?=id_answer?>"><?=$answer?></label>
</p>
<?php endif; // $id_answer ?>
<?php endforeach; //$item ?>
</div> <!-- .question -->
<?php endforeach; // $test_data ?>
</div> <!-- .test-data -->
<div class="buttons">
<button class="center btm" id="btn">Закончить тест</button>
</div>
<?php else: // isset($test_data) ?>
<h6 class="my-0 mr-md-auto font-weight-normal">Выберите тест</h6>
<?php endif; //isset($test_data) ?>
</div> <!-- .content -->
<?php else: // $tests ?>
<h3 class="my-0 mr-md-auto font-weight-normal">Нет тестов</h3>
<?php endif; // $tests ?>
</div> <!-- стиль .wrap -->
<!-- Подключаем библиотеку jquery и java скрипты -->
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="js/scripts.js"></script>
</body>
</html>
Если я просто убираю $_POST то всё работает, однако POST собирает Ответы пользователя и в итоге если я закончу тест, то у меня не идёт подсчёт правильных ответов и процент верных ответов