При этом нужно сделать возможность восстановления пароля после прохождения шага 1, чтобы пользователь не попал в ситуацию, что его почта занята, а восстановить пароль к ней нет возможности т.к. незаполнен профиль.
Вариантов опять же несколько:
1. Хранить статус заполнения регистрации в отдельном поле модели профиля.
2. Проверять заполненность полей у профиля.
3. Проверять существование связанной записи, если данные из шагов 2 и 3 сохраняются в связанных таблицах (моделях).
В зависимости от критичности этих данных редиректить на нужный шаг или выводить сообщение с предложением дозаполнить профиль и ссылкой на нужный шаг.
Т.е. я прошел шаг 1 и закрыл браузер.
Зашел повторно и начал заполнять шаг 1 повторно или авторизовался со своим логином и паролем, система видит, что у меня не заполнен шаг 2 и либо жестко редиректит меня, либо допускает к работе и выводит алерт со ссылкой и предложением дозаполнить профиль.
Я бы делал как то так.
c5c5: Человек, купи мозг, или возьми на прокат! Я не знаю, почему этот вопрос, вместе с вашей учёткой, еще не в бане, но изучать языки программирования, не понимая как и что происходит - это грустно, что растут такие "специалисты".
Рано нажал отправить. В итоге получим Таблица1 - таблица с ID тега и его значением, Таблица2 - Таблица с книгами, Таблица3 - таблица связи, в которой хранится ID тегов и ID книг. Это даст возможность легко вешать к книге неограниченное кол-во тегов, выбирать по ним, да и сама структура БД так выглядит правильно.
Мсье не знает толк, а дело говорит! Теги прописать через таблицу связей (pivot table вроде в Yii2) и все проблемы отвалятся сами собой. Извращение - это как раз то, что делаете Вы.
Абсолютно согласен! Еще можно это красиво скрыть правилом для rewrite чтоб ссылки на изображения остались вида site1.ru/images/img1.jpg и site2.ru/images/img1.jpg, но при этом фактически были site3.ru/images/1.jpg или типа того, где site3.ru выступает в роли стораджа изображений. Но это уже как тюнинх!
Второй вариант — симлинк на папку на сервере.
Пример:
[mysql]
character-sets-dir = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets"
no-auto-rehash
no-beep
skip-name-resolve