nezov134 31 Опубликовано: 3 января 2023 Рассказать Опубликовано: 3 января 2023 (изменено) Установил модуль 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. Но боюсь что что-то наковыряю и поломаю весь сайт. Автор модуля судя по всему не ответит. Кто-то может помочь с решением проблемы? Что и где необходимо добавить/исправить? Спасибо. Изменено 3 января 2023 пользователем nezov134 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 3 января 2023 Рассказать Опубликовано: 3 января 2023 Ошибка не связана именно с тем что php 8.1, он в принципе какие то неверные данные передает в класс работы с БД, вместо результатов работы БД передает в класс какой то массив, чего делать никогда нельзя было, независимо от версии PHP, просто PHP 8.1 критично относится к некорректным данным и выдает фатальную ошибку. Тут нужно сам код модуля изучать, просто по ошибке непонятно что там передается и почему данные некорректные. Цитата Ссылка на сообщение Поделиться на других сайтах
nezov134 31 Опубликовано: 9 января 2023 Рассказать Опубликовано: 9 января 2023 Автор Он ругается на этот код: Имя файла: 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 ); Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 9 января 2023 Рассказать Опубликовано: 9 января 2023 И правильно делает, потому что он неверен. Вы меняете безусловный запрос к базе данных а именно строку $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 пропускал ее, теперь нет. 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.