Унаследовал веб-сайт, на котором запущена форма калькулятора, которая сломалась, когда хост обновил сервер до PHP7.2 с 5.6. Глядя на журналы ошибок, похоже, проблема связана с правильной передачей $data функции.
Ошибка, которую я получаю,
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function CalculateTitleFee()
В нем говорится, что он получает 1 аргумент, но ожидает 2. В моем браузере я вижу ошибку 500 в URL-адресе, который четко показывает 2 значения для данных.
Мое первоначальное предположение состоит в том, что либо GET работает неправильно, либо неправильно строит данные в массив.
Вот PHP, о котором идет речь.
Все начинается с:
$action = $_GET['action'];
$json_data = array();
$json_data['error_code'] = '0';
// Determine the action that the javascript is attempting to perform
switch ($action) {
case "display_main_menu":
case "back":
$json_data['html'] = display_main_menu();
break;
case "display_purchase_example":
$json_data['html'] = display_purchase_example();
break;
case "display_refinance_example":
$json_data['html'] = display_refinance_example();
break;
case "calculate":
$post_data = $_GET['data'];
$json_data['calc_data'] = calculate($post_data);
break;
}
echo json_encode($json_data);
Затем форма отправляет:
urltophp.php?action=calculate&data%5B%5D=80000&data%5B%5D=90000
Вот функция вычисления:
function calculate($data) {
$calc_data = array();
$title_premium = CalculateTitleFee(floatval($data[1])) + CalculateLoanPolicy(floatval($data[0]));
$title_premium_refi = CalculateTitleFeeRefi(floatval($data[0]));
}
В этой функции происходит много всего, что я не копировал, но происходит ошибка функции CalculateTitleFee(). Надеясь решить это, и все остальное работает правильно.
===== ОБНОВЛЕНИЕ =====
Вот функция CalculateTitleFee.
function CalculateTitleFee ($purchase_price, $loan_amount){
$title_premium0 = 0;
if ($purchase_price <= "100000") {
$title_premium0 = ((ceil((($purchase_price-30000)*0.00375)+180)-(ceil((($purchase_price-30000)*0.00325)+150)))+100);
}
else if ($purchase_price <= "200000") {
$title_premium0 = ((ceil((($purchase_price-100000)*0.00275)+442.5)-(ceil((($purchase_price-100000)*0.00225)+377.5)))+100);
}
else if ($purchase_price <= "300000") {
$title_premium0 = ((ceil((($purchase_price-200000)*0.002)+717.5)-(ceil((($purchase_price-200000)*0.00175)+602.5)))+100);
}
else if ($purchase_price <= "10000000") {
$title_premium0 = ((ceil((($purchase_price-200000)*0.002)+717.5)-(ceil((($purchase_price-200000)*0.00175)+602.5)))+100);
}
return $title_premium0;
}
ArtisticPhoenix - приводит к той же ошибке. Неустранимая ошибка PHP: Uncaught ArgumentCountError: Слишком мало аргументов для функции CalculateTitleFee(), 1 передан в /calculator/calculator.php в строке 147 и ровно 2 ожидается в /calculator/calculator.php:78\nТрассировка стека:\n#0 / калькулятор/calculator.php(147): CalculateTitleFee(90000)\n#1 /calculator/calculator.php(25): calculate(Array)\n#2 {main}\n брошено в /calculator/calculator.php в строке 78, ссылка: калькулятор/calculator.html
ну CalculateTitleFee() clear принимает 2 аргумента, вы даете один, так что эм...






Это не из-за $_GET. Это всегда было проблемой, но начало выдавать исключение только при обновлении до PHP 7. Слишком мало аргументов, чтобы вызвать предупреждение, начиная с PHP 7.1 вызывает ошибку.
В вашей функции calculate() вы вызываете CalculateTitleFee только с одним аргументом.
CalculateTitleFee(floatval($data[1]))
CalculateTitleFee() принимает второй аргумент, но он никогда не используется в функции. Удаление этого параметра из определения функции должно быть безопасным.
В этом есть смысл. Однако я предполагаю, что в прошлом функция вычислялась правильно. Я добавил эту функцию в свой OP. Надеюсь, это поможет поставить диагноз. Спасибо!
Догадаться. По.... глядя на функцию.... которую вы сказали. Ха! IDK, почему требовалось две переменные, когда в функции использовалась только одна. Спасибо!
Ах, только что обновил ответ, чтобы сказать это одновременно :-)
Может быть, функциональность, которая требовала эту переменную, была перемещена в функцию CalculateLoanPolicy, и они забыли удалить переменную? Кто знает
CalculateTitleFeeдействительно получает только один аргумент в этойcalculate()функции.