У меня есть следующий код для викторины 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
). Сначала определите свои функции, затем напишите код, который их использует.