Перейти к публикации

Ошибка при установке плагина


Рекомендованные сообщения

Установил модуль DLE simple forum скачивал отсюда для более актуальной версии dle. Проблема в том, что модуль не поддеривает php 8.1. Выдаёт ошибку:

Fatal error: Uncaught TypeError: mysqli_fetch_assoc(): Argument #1 ($result) must be of type mysqli_result, array given in /var/www/fastuser/data/www/site.com/engine/classes/mysql.php:166 Stack trace: #0 /var/www/fastuser/data/www/site.com/engine/classes/mysql.php(166): mysqli_fetch_assoc(Array) #1 /var/www/fastuser/data/www/site.com/engine/cache/system/plugins/1deba61e6bc03c02be6ebfaebcafd82d.php(113): db->get_row(Array) #2 /var/www/fastuser/data/www/site.com/engine/cache/system/plugins/c10c5c4e6adf629db7154873a7a8855a.php(1076): include_once('/var/www/fastus...') #3 /var/www/fastuser/data/www/site.com/engine/init.php(1072): include_once('/var/www/fastus...') #4 /var/www/fastuser/data/www/site.com/index.php(25): require_once('/var/www/fastus...') #5 {main} thrown in /var/www/fastuser/data/www/site.com/engine/classes/mysql.php on line 166

Был способ зайди в файлы engine/classes/mysql.php, 1deba61e6bc03c02be6ebfaebcafd82d.php, c10c5c4e6adf629db7154873a7a8855a.php, engine/init.php, index.php. Но боюсь что что-то наковыряю и поломаю весь сайт. Автор модуля судя по всему не ответит.

Кто-то может помочь с решением проблемы? Что и где необходимо добавить/исправить? Спасибо.

Изменено пользователем nezov134
Ссылка на сообщение
Поделиться на других сайтах

Ошибка не связана именно с тем что php 8.1, он в принципе какие то неверные данные передает в класс работы с БД, вместо результатов работы БД передает в класс какой то массив, чего делать никогда нельзя было, независимо от версии PHP, просто PHP 8.1 критично относится к некорректным данным и выдает фатальную ошибку. Тут нужно сам код модуля изучать, просто по ошибке непонятно что там передается и почему данные некорректные.

Ссылка на сообщение
Поделиться на других сайтах

Он ругается на этот код:

Имя файла: engine/modules/show.short.php

Найти:

$sql_result = $db->query( $sql_select );

Заменить на:

if ($cat_info[$category_id]['is_forum_cat'] == 1 ) {
  $is_forum = true;
  if ($cat_info[$category_id]['parentid'] == 0) {
    $is_main_forum = true;
    $tpl->load_template( 'modules/forum/main.tpl' );
    $tpl->compile('content');
  }
  else $is_main_forum = false;
} else $is_forum = false;

if ($is_main_forum) $sql_result = array();
else $sql_result = $db->query( $sql_select );

 

Ссылка на сообщение
Поделиться на других сайтах

И правильно делает, потому что он неверен. Вы меняете безусловный запрос к базе данных а именно строку

$sql_result = $db->query( $sql_select );

на свой код, где 

if ($is_main_forum) $sql_result = array();
else $sql_result = $db->query( $sql_select );

где как видно запрос выпооняется не всегда в в ряде случаев переменной назначается массив. Только результат обращения к базе данных это не массив!!!! и как следствие следующий код, который потом идет ниже сделан на работу с результатами полученными от БД, а вы ему подсовываете массив. И как результат ошибка, что вполне логично.

Вам нужно к автору модуля обратиться для переделки самой логики, чтобы логика кода была написана корректно, в зависимости от того что там ему нужно, например уже ниже проверять если массив то не работать с данными и т.д.

Т.е. ошибка не в самом коде который вы привели как таковом, а в его логике изначально, он отдает ниже следующему коду некорректные данные, который потом уже не работает.

В чем разница между PHP 8.1 и более ранними версиями PHP. Скажу максимально просто и понятно, раньше он видел некорректные данные, говорил про себя "херня какая то" и пропускал кусок кода, которые не мог выполнить с этими данными, а PHP 8.1. смотрит что данные некорректны и теперь вместо тихого пропуска говорит "Эй брат, так не пойдет, херня какая то с данными" и останавливает работу выдавая ошибку.

Эта ошибка в логике была изначально, просто раньше PHP пропускал ее, теперь нет.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...