Реализация зависит от текущей структуры БД и проекта.
1. Если не нужно обновление сообщений у пользователей без перезагрузки страницы, то просто создаете табличку messsage с полями id, text, user_id (может еще какие-то Вам понадобятся) и форму для создания сообщения. Тут не вижу никаких сложностей.
Если обновлять сообщения нужно без перезагрузки страницы, наподобие чата, то посмотрите в сторону пуш-сообщений, либо тупо через js раз в несколько секунд проверяйте не появилось ли новых сообщений, если есть, то отрисовывайте.
2. Тут интереснее. Вариантов много самых разных. Из самых простых:
- На все страницы сайта повесить js скрипт, который на каждое событие отправляет запрос на какой-нибудь скрипт, но не чаще, например, 1 раза в 10 сек, чтобы не задосить себя. Хранить состояние юзера (онлайн/оффлайн) лучше в быстрой nosql базе. Также в базе хранить время последнего обновления состояния. Скриптом, например, по крону, отмечать всех оффлайн, кто не подавал признаков жизни более n кол-ва минут
- Аналогично предыдущему варианту, но не делать js, а отмечать онлайн при открытии страниц, совершении каких-то действий. Можно даже скрипт отметки онлайном пользователя повесить на событие init приложения.
3. Да просто перебирайте и отрисовывайте как нужно, тут тоже не вижу проблем, стандратное использование php.