Ошибка при переходе на версию php 8.0

Любые критические ошибки будут исправлены в течение 24-48 часов.
tradesu
Сообщения: 22
Зарегистрирован: 20 сен 2023, 12:21
Имя: Владимир Трейдер
Откуда: Москва

Ошибка при переходе на версию php 8.0

Сообщение tradesu »

Здравствуйте, ошибка не в самой версии программы, а в версии php. На версии php 7.4 все нормально работает, на версии 8.0 выскакивает ошибка.

Ошибка пояляется при клике на кнопку автоматизации.

Warning: Undefined array key 779 in C:\Users\TRADESU\Documents\OpenServer\OpenServer\domains\localhost\crm\modules\dashboard\actions\ajax_request.php on line 55

Warning: Trying to access array offset on value of type null in C:\Users\TRADESU\Documents\OpenServer\OpenServer\domains\localhost\crm\modules\dashboard\actions\ajax_request.php on line 55
Вложения
2024-01-14_123336.jpg
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 842
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: Ошибка при переходе на версию php 8.0

Сообщение Fait »

Переход на PHP требует некоторых изменений в своих написанных кодах.
Тут вам придётся переделать свой код скорее всего.
У меня при переходе на 8.2 потребовалось явно объявлять массивы, которые в 7.4 объявлять были необязательно.
Перестала корректно работать функция count(), некоторые формулы...
Пришлось переделывать
Аватара пользователя
support
Техническая поддержка
Сообщения: 9177
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Ошибка при переходе на версию php 8.0

Сообщение support »

Все верно. Необходимо переделать ваш код. Теперь необъявленные элементы массива не допускаются. С помощью функции isset() нужно проверять наличие элемента и затем выполнять действие.
tradesu
Сообщения: 22
Зарегистрирован: 20 сен 2023, 12:21
Имя: Владимир Трейдер
Откуда: Москва

Re: Ошибка при переходе на версию php 8.0

Сообщение tradesu »

Подскажите, что нужно сделать. На скрине показал пример.
Есть поля у которых свои айди, в автоматизации указываю айди этих полей в ручную.
При клике на кнопку автоматизации, всплывает форма для ввода данных. А над ней ошибки.
По сути сама автоматизация работает даже при выводе ошибки. Просто смущает что ошибка выскакивает.

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in C:\Users\TRADESU\Documents\OpenServer\OpenServer\domains\localhost\crm\modules\items\views\processes.php on line 318

Я не писал отдельного кода, просто использую поля из сущностей для автоматизации

1. Есть выпададющие поля, которые нужно выбирать в ручную
2. При выборе полей - остальные заполняются автоматом

Сама автоматизация отрабатывает как нужно, но из-за того, что мне нужно сначала выбрать поля из выпадающего списка - остальные поля не заполнены и система показывает ошибки. Или я ошибаюсь?

Как устранить ошибку или на край отключить ее вывод?
Вложения
2024-01-14_230542.jpg
2024-01-14_203745.jpg
2024-01-14_203225.jpg
2024-01-14_203041.jpg
2024-01-14_202955.jpg
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 842
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: Ошибка при переходе на версию php 8.0

Сообщение Fait »

Где-то в полях сущности используется функция str_replace, в которой есть переменная $replace, нужно проверить её и сделать обработку пустого значения.
Самое простое - объявить эту переменную в самом начале кода и назначить ей пустое значение. Примерно вот так:

Код: Выделить всё

$replace = '';
Сделайте это, потом посмотрим, что будет.
tradesu
Сообщения: 22
Зарегистрирован: 20 сен 2023, 12:21
Имя: Владимир Трейдер
Откуда: Москва

Re: Ошибка при переходе на версию php 8.0

Сообщение tradesu »

Спасибо огромное всем кто отвечает на мой вопрос! Отличная CRM система, отличное комьюнити и поддержка.

1. Создал Сущность Проекты.
2. Создал подсущность Акты
3. Поля, по которым появляются ошибки не имеют никаких формул и отдельного кода
4. Создал автоматизацию Акты, настроил процессы и заполнил значение полей.

Весь процесс по шагово показал на скринах.

В целом вывод ошибок никак не влияет на работу CRM все отрабатывает как нужно. Чтобы ошибки не радражали отключил их.

Отключил вывод ошибок в Open Server php 8.1
Поменял на:
было ;display_errors = "0"
стало: display_errors = "0"


Не знаю правильно ли отключать вывод ошибок или нужно как-то устранить проблему.
Вложения
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
Аватара пользователя
support
Техническая поддержка
Сообщения: 9177
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Ошибка при переходе на версию php 8.0

Сообщение support »

Ошибка обнаружена. Файлы из архива замените в папке где установлена программа.
Сообщите результат.
Вложения
process_fix.zip
(24.14 КБ) 50 скачиваний
tradesu
Сообщения: 22
Зарегистрирован: 20 сен 2023, 12:21
Имя: Владимир Трейдер
Откуда: Москва

Re: Ошибка при переходе на версию php 8.0

Сообщение tradesu »

Да, проблема с сущностью акты исчезла. Спасибо огромное!

Сохранилась другая ошибка, но так же все работает, просто она отображается.
Жалуется на actions\ajax_request.php кричит на поля 779 и 781

Прикрепил скрины сущностей и настроек.

Еще описал доп поля, которые есть в этих сущностях, не знаю влияют ли они на ошибку или нет но описал, чтобы была видна более полная картина.



В сущности ФИКСАЦИЯ ВРЕМЕНИ есть еще 2 поля:

850 (тайминг) ajax запрос с кодом:

$value = ''; //Переменная в которой будет хранится значение из списка
$tsc_id = [848]; //Получаем ID выбранного элемента из списка

$item_query = db_query("SELECT seconds FROM app_ext_timer WHERE entities_id=38 and items_id={$tsc_id}");
if($item = db_fetch_array($item_query)){
$value = $item['seconds'];
if ($value == 0){
echo '<b style="color:red">' . "Вы не зафиксировали время!" . '</b>';
} else {
echo $value;
$form_field_value = $value;
}
}


849 (время) ajax запрос с кодом:
$value = ''; //Переменная в которой будет хранится значение из списка
$tsc_id = [848]; //Получаем ID выбранного элемента из списка

$item_query = db_query("SELECT seconds FROM app_ext_timer WHERE entities_id=38 and items_id={$tsc_id}");


if($item = db_fetch_array($item_query)){
$value = $item['seconds'];
}


$seconds = $value;

if (is_numeric($seconds)) {
$minutes = floor($seconds / 60);
$seconds %= 60;

$hours = floor($minutes / 60);
$minutes %= 60;

$time = sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);

/*echo "Время: $hours часов, $minutes минут, $seconds секунд";*/
echo $time; // Время (в формате ЧЧ:ММ:СС):*/
$form_field_value = $time;
} else {
echo '<b style="color:red">' . "Не выбрана задача" . '</b>';
}


В сущности ЗАДАЧИ есть еще 1 поле:

795 (время) ajax запрос с кодом:

$item_id = $_GET['item_id'];// получить айди текущей записи
$item_query = db_query("SELECT SUM(field_794) AS total FROM app_entity_51 WHERE parent_item_id = $item_id");

if ($item = db_fetch_array($item_query)) {
$total = $item['total'];

echo $total;
} else {
$form_field_value = "таймер не запускался";
}

$seconds = $total;

if (is_numeric($seconds)) {
$minutes = floor($seconds / 60);
$seconds %= 60;

$hours = floor($minutes / 60);
$minutes %= 60;

$time = sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);

$form_field_value = $time;
} else {
echo "Некорректное значение времени";
}
Вложения
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
tradesu
Сообщения: 22
Зарегистрирован: 20 сен 2023, 12:21
Имя: Владимир Трейдер
Откуда: Москва

Re: Ошибка при переходе на версию php 8.0

Сообщение tradesu »

При выполнении поиска отображается вот такая надпись:
Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in C:\Users\TRADESU\Documents\OpenServer\OpenServer\domains\localhost\crm\plugins\ext\classes\global_search.php on line 121

оно выводит если в запросе 3 символа и он наход текст, если 3 символа и не находит текст, то не выдает надпись
Вложения
2024-01-15_151040.jpg
Аватара пользователя
support
Техническая поддержка
Сообщения: 9177
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Ошибка при переходе на версию php 8.0

Сообщение support »

tradesu писал(а): 15 янв 2024, 15:12 При выполнении поиска отображается вот такая надпись:
Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in C:\Users\TRADESU\Documents\OpenServer\OpenServer\domains\localhost\crm\plugins\ext\classes\global_search.php on line 121

оно выводит если в запросе 3 символа и он наход текст, если 3 символа и не находит текст, то не выдает надпись
Для исправления файл из архива замените в plugins\ext\classes\
Вложения
global_search.zip
(1.98 КБ) 53 скачивания
Ответить