Использование GET для передачи аргументов функции PHP

Унаследовал веб-сайт, на котором запущена форма калькулятора, которая сломалась, когда хост обновил сервер до 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;

    }
CalculateTitleFee действительно получает только один аргумент в этой calculate() функции.
Don't Panic 07.03.2019 00:17

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

C Porter 07.03.2019 00:22

ну CalculateTitleFee() clear принимает 2 аргумента, вы даете один, так что эм...

user10051234 07.03.2019 00:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
279
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не из-за $_GET. Это всегда было проблемой, но начало выдавать исключение только при обновлении до PHP 7. Слишком мало аргументов, чтобы вызвать предупреждение, начиная с PHP 7.1 вызывает ошибку.

В вашей функции calculate() вы вызываете CalculateTitleFee только с одним аргументом.

CalculateTitleFee(floatval($data[1]))

CalculateTitleFee() принимает второй аргумент, но он никогда не используется в функции. Удаление этого параметра из определения функции должно быть безопасным.

В этом есть смысл. Однако я предполагаю, что в прошлом функция вычислялась правильно. Я добавил эту функцию в свой OP. Надеюсь, это поможет поставить диагноз. Спасибо!

C Porter 07.03.2019 00:24

Догадаться. По.... глядя на функцию.... которую вы сказали. Ха! IDK, почему требовалось две переменные, когда в функции использовалась только одна. Спасибо!

C Porter 07.03.2019 00:26

Ах, только что обновил ответ, чтобы сказать это одновременно :-)

Don't Panic 07.03.2019 00:27

Может быть, функциональность, которая требовала эту переменную, была перемещена в функцию CalculateLoanPolicy, и они забыли удалить переменную? Кто знает

Don't Panic 07.03.2019 00:30

Другие вопросы по теме