Как правильно реализовать оформление заказа на нескольких страницах?
Есть два пути:
1. Записывать данные в таблицу orders каждом шаге и отдельно валидировать каждый шаг, но установить у заказа статус "черновик". Переводить в активный статус, только если отправлен третий шаг и валидны все три (надо проверить)
2. Писать состояние заказа в сессию и валидировать все данные один раз на последнем шаге. 
Первый вариант позволит продолжить оформление заказа в другой сессии + вы будете видеть так называемые "брошенные корзины", менеджеры потом смогут связаться с клиентом и узнать что не так и, может быть, повысить продажи.
Я решил записыванием данных в корзину заказа. Или в сессию( если не зарегистрирован). Поскольку корзина для каждого пользователя по факту одна, как и "шаги заказа".