Проще просто проверить. Сначала разместите карусель из документации, чтобы убедиться, что всё нормально подключилось. Потом понемногу изменяйте и смотрите, когда поломается.
В принципе, тоже понятно, почему join не работает.
ON usr.id = msg_.from_id
or usr.id = msg_.whom_id
Один из них - 9, а другой, например - 7. И не понятно, с каким из них скрещивать. Возможно, так:
ON (usr.id = msg_.from_id AND msg_.from_id != 9)
OR (usr.id = msg_.whom_id AND msg_.whom_id != 9)
Запрос получается слишком перегруженный. Возможно, быстрее (да и проще) будет выполнить два отдельных запроса, с from_id = 9 и с whom_id = 9, и получить нужные данные уже в скрипте.
Да, считается. Всем правилам соответствует. Если нужно, чтобы не соответствовало, нужно решить, на что заменять. Если на дефис, последнюю строку заменить на newValue = newValue.replace(/[\-\s]{2,}/g, '-');
Ну, или наоборот. Тут имеет значение ещё и порядок этих операций
И ещё дополню, что передавать без проверки данные, получаемые от пользователей, категорически нельзя. Почитайте про SQL-инъекции. Лучше так: $vidreds = (int)$_POST['id'];
Туда, куда вы хотите вставить это значение. В данном случае, сюда. sum: document.querySelector('[name="sum"]').value
Полностью делать вашу работу тут никто не будет.