Страница 1 из 2

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

Добавлено: 14 янв 2024, 12:37
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

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

Добавлено: 14 янв 2024, 19:21
Fait
Переход на PHP требует некоторых изменений в своих написанных кодах.
Тут вам придётся переделать свой код скорее всего.
У меня при переходе на 8.2 потребовалось явно объявлять массивы, которые в 7.4 объявлять были необязательно.
Перестала корректно работать функция count(), некоторые формулы...
Пришлось переделывать

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

Добавлено: 14 янв 2024, 19:58
support
Все верно. Необходимо переделать ваш код. Теперь необъявленные элементы массива не допускаются. С помощью функции isset() нужно проверять наличие элемента и затем выполнять действие.

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

Добавлено: 14 янв 2024, 20:43
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. При выборе полей - остальные заполняются автоматом

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

Как устранить ошибку или на край отключить ее вывод?

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

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

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

$replace = '';
Сделайте это, потом посмотрим, что будет.

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

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

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

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

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

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


Не знаю правильно ли отключать вывод ошибок или нужно как-то устранить проблему.

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

Добавлено: 15 янв 2024, 13:51
support
Ошибка обнаружена. Файлы из архива замените в папке где установлена программа.
Сообщите результат.

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

Добавлено: 15 янв 2024, 14:44
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 "Некорректное значение времени";
}

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

Добавлено: 15 янв 2024, 15:12
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 символа и не находит текст, то не выдает надпись

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

Добавлено: 16 янв 2024, 07:22
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\