Конечно код не очевидный, но попробуем прочитать как есть
if($data_dbr >= $data_kom && $msg != "")
Если текущая дата, больше либо равна дате последнего сообщения и сообщение не пустое.
elseif($data_dbr < $data_kom)
Если текущая дата меньше даты последнего комментария
При этом время которое записывается как время сообщения это текущее + 20 секунд. это уже само по себе обсурд потому, что зачем то в базу заводить лишнее поле, если можно просто сравнивать с текущим+20.
Если вы иного мнения, просто сделайте вывод всех значений из условия на экран и увидите где ошибка.
Ошибка или при получении данных из БД, либо вообще не в этом участке кода.
Вообще игра с датами какая-то совсем странная.