Intereting Posts
Загрузите данные двоичного потока из браузера с помощью PHP с веб-службой «загруженный файл поврежден» Дешифрование данных с помощью RSA Private Key Почему, если я зарегистрировался на своем веб-сайте как зарегистрированный пользователь, я не могу получить доступ к другим страницам после установки правил сеанса? Контроллер Zf3 не может получить доступ к таблице классов модели, расположенной в другом модуле Переместить элемент массива с определенным ключом в первую позицию в массиве, PHP PHP New Line не будет работать Как преобразовать строку в boolean php setlocale не влияет на PHP Использование функции find () в Active Record с несколькими условиями where Петля из категории в подкатегорию в PHP Обратный ассоциативный массив с сохранением ключей в PHP PHP и <noscript> для обнаружения включенного JavaScript в браузере ОШИБКА: SQLSTATE Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от него Сохранение метки времени в таблице mysql с использованием php PHP: объединение массивов одинаковой длины в многомерный массив, где оба заканчиваются как значения (а не ключи)?

Неустранимая ошибка: вызов неопределенной функции tally ()

У меня есть следующий код для викторины php.

if(isset($_POST['submit'])) { //Check to make sure that the name field is not empty if(($_POST['q_1'] == '') || ($_POST['q_2'] == '') || ($_POST['q_3'] == '') || ($_POST['q_4'] == '') || ($_POST['q_5'] == '')) { $nameError = 'Please choose an option'; $hasError = true; } else { for ($i=1; $i<=$types; $i+=1) { $nowval[$i] = 0; } for ($i=1; $i<=$questions; $i+=1) { $qvar = "q_$i"; //echo $qvar; tally($_POST[$qvar]);// LINE THAT CAUSES ERROR } $dominant = 1; $domval = $nowval[1]; for ($i=2; $i<=$types; $i+=1) { if ($domval < $nowval[$i]) { $dominant = $i; $domval = $nowval[$i]; } } function tally ($question) // TALLY FUNCTION { global $nowval; $nowval[$question]++; } if (is_file("$quiz.rsl")) { $fp = fopen("$quiz.rsl", 'r'); $line = fgets($fp, 1024); fclose($fp); $people = explode("|", $line); $people[$dominant-1] += 1; $timestaken = 0; foreach($people as $tally) { settype($tally, 'integer'); $timestaken += $tally; } $fp = fopen("$quiz.rsl", 'w'); for($i=0; $i<$types; $i++) { fwrite($fp, $people[$i]."|"); } fclose($fp); } else { for($i=0; $i<$types; $i++) { $people[] = 0; } $people[$dominant-1] += 1; $timestaken = 1; $fp = fopen("$quiz.rsl", 'w'); for($i=0; $i<$types; $i++) { fwrite($fp, $people[$i]."|"); } fclose($fp); } $percentage = ($people[$dominant-1] / $timestaken) * 100; $dec=2; $format="%.$dec" . "f"; $number=sprintf($format,$percentage); $percentage=strtok($number,"."); $dc=strtok("."); if ($dec!=0) { $percentage = "$percentage" . ".$dc"; } $emailSent = true; }//else }//main if 

Когда я POST данные формы в другой файл, т. Е. Если вышеуказанный код написан в отдельном файле, все работает отлично.

но когда я POST данные формы на страницу, я получаю

 Fatal error: Call to undefined function tally() 

Я не понимаю причину этой проблемы.

Когда я попытался использовать

  $this->tally($_POST[$qvar]); 

Я получаю следующую ошибку.

 Fatal error: Using $this when not in object context 

Это происходит потому, что вы объявляете функцию после попытки ее вызова:

 tally($_POST[$qvar]);// LINE THAT CAUSES ERROR function tally ($question) // TALLY FUNCTION DECLARATION COMES LATER 

Я бы поставил либо раньше, if(isset($_POST['submit'])) { или как первое, что внутри.

  if (!function_exists('tally')) { function tally ($question) // TALLY FUNCTION { global $nowval; $nowval[$question]++; } } 

$ this-> tally не будет работать, потому что это не объект, вы хотите дефрагментировать функцию.

Вы определяете функцию после ее вызова. Более того, вы только определяете его условно (т. if..else Внутри if..else ). Сначала определите свои функции, затем напишите код, который их использует.