@tokyodead

Поможете с функцией PHP?

Учусь по какому то старому уроки, создание системы тестирования, и выходит ошибка
Fatal error: Cannot re-assign auto-global variable _POST in C:\OpenServer\domains\testing\functions.php on line 80
Это из за того что используется глобальная переменная $_POST
Что можно сделать вместо этого?

Функция
function get_test_data_result($test_all_data, $result, $_POST) {
  foreach($result as $q => $a) {
    $test_all_data[$q]['correct_answer'] = $a;
  }
  return $test_all_data;
}

Условие
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);
  $test_all_data_result = get_test_data_result($test_all_data, $result, $_POST);
  die;
}
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
@galaxy
Суперглобальные переменные ($_GET, $_POST и т.д.) потому так и называются, что доступны всегда и из любого места.
Вы назвали параметр своей функции _POST и таким образом пытаетесь перезатереть суперглобальную переменную. Так делать нельзя.
Все будет работать, если убрать _POST из параметров (и не передавать его при вызове - он и так отовсюду доступен).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@v__V__v
Разработчик
По поводу самой ошибки вам уже подсказали, хочу только подчеркнуть один момент: передавая внутрь функции значения глобальных и суперглобальных переменных в явном виде, вы поступаете правильно. Делайте так всегда и игнорируйте тех, кто говорит, что это - ошибка, т.к. они доступны везде. Это сэкономит вам кучу времени и нервов. И тем, кто будет поддерживать ваш код после вас тоже.
Ответ написан
Комментировать
ssenj
@ssenj
HTML, CSS, PHP, WordPress, Bitrix
В ошибке четко написано `Невозможно повторно назначить автоглобальную переменную _POST`
При объявлении функции переименуй параметр $_POST, например так:
function get_test_data_result($test_all_data, $result, $post) { ... }

Либо, как советуют выше, убери его из параметров. Глобальные переменные доступны везде и внутри функции тоже.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы