Если разбирать все ошибки и глупости, содержащиеся в коде, можно целую статью написать на несколько страниц A4.
Пробегусь вкратце:
1) Дублирование условия после подключения к БД. Если вы делаете "or die", то код в случае выполнения этого условия будет завершён, повторно проверять переменную не нужно (она уже была проверена там, где вы сделали "or die")
2) Двойной запрос для двух колонок отдельно. Открою секрет: SQL позволяет возвращать много столбцов, и более того - он позволяет объединить таблицы самыми разными способами. Отдельно выбирать сообщения и их авторов не нужно.
3) Результат mysqli_query будет false только в том случае, если запрос завершился ошибочно (например, текст запроса неправильный). Если таблица пуста - будет всё равно возвращён объект, а не false.
4) Зачем в одном и том же месте перемешивать echo и print?
5) При записи - не происходит ни проверки данных, ни экранирования. Можно легко передать в БД любой запрос, в том числе удаление всех таблиц.
6) Про то, что идёт обращение к полям массива $_POST, но они даже не проверяются на существование, я промолчу.
7) Дублирование кода, в каждом файле отдельно подключение к БД, логичнее вынести в отдельный файл, а логины-пароли держать в конфиге, недоступном для чтения никому кроме скрипта.