Сделай один глобальный try... catch, так и узнаешь где ошибка и почему. И то что тебе показывается - это результат брошенного исключения, которое никак не обрабатывается.
Да как хочешь реализовывай. Стандартов нет. Есть только база знаний, которую надо применять. Программно определи точку A и точку B. Подсчитай расстояние между ними и сделай картинку линии такой ширины и как-то расположи имея координаты. При изменении размеров окна можешь пересчитать позицию.
Для этого нужен генератор календаря. Там генерируешь себе инфу о нужном месяце, в какой день начинается, сколько дней в нем и тд. Так и заполняешь. Пустые клетки заполняешь датами предыдущего и следующего.
Либо по клику обращаешься к api бэкенда, которые сгенерирует разметку, ее просто вставляешь.
Учитывая возможный функционал, придется использовать второй вариант. Нажал кнопку, получил html от бэкенда, заменил.
Достаточно в html создать форму с типом multipart/form-data и добавить поле file. При отправке файл будет загружен на твой сервер. Это и есть ответ на твой вопрос. Но твоя проблема не в загрузке файла, а в перемещении его в нужный тебе каталог. И не перемещается он потому что у тебя в скрипте ошибка, перемещать надо $_FILES['fl']['tmp_name'], а не то что ты там указал.
так как на хостинге есть ограничение на колво файлов
вали с этого хостинга, если там именно такое ограничение.
Статическому контенту, вроде картинок, не место в бд. Со статикой хорошо и быстро справляется веб сервер и для этого ему не нужен ни пхп, ни что либо еще. Если ты запихнешь их в бд, то по мимо веб сервера будет дергаться и пхп и бд. Скорость упадет в разы.
Покрась каждый элемент списка в отдельный цвет. Можешь еще по media менять его если размер окна разный. Если пристально не всматриваться, хитрость будет незаметна.