Давай попробуем декомпозировать задачу на самом примитивном примере.
Определим действия, которые должен совершить покупатель для покупки.
1-Зайти на главную страницу магазина. Должна быть [Главная страница магазина]
2-Увидеть каталог всевозможных товаров. Должна быть [Страница каталога товаров] на которой можно увидеть список доступных для покупки товаров. Также в БД должна быть [таблица товаров].
3-Перейти к описанию конкретного товара. Должна быть [Страница описания конкретного товара]
4-На странице описания товара нажать на кнопку "Купить"
4.1 По нажатию на кнопку "Купить" совершается действие помещения товара в корзину покупателя.
Здесь надо где-то хранить эту корзину (выбранные к покупке товары), например, будем добавлять в куки браузера ид только что выбранного товара.
5-По нажатию на кнопку "Корзина" загружается страница с выбранными покупателем товарами. Должна быть страница [Корзина покупателя]
6-По нажатию на кнопку "Оформить заказ" загружается страница со списком выбранных к покупке товаров, формой данных покупателя (адрес и т.п.) и кнопкой подтверждения заказа. Должна быть страница [Оформление заказа].
7.1 По нажатию на кнопку "Подтвердить покупку" в системе создается новая сущность Заказ. В БД должна быть [таблица заказов]
Владелец магазина должен иметь возможность просмотреть эту таблицу, но это уже админка, ее рассматривать не будем.
Итого, при первом приближении имеем:
БД:
--таблица товаров
--таблица заказов
Открытая часть магазина (то, что доступно покупателю):
1--главная страница. Содержит:
-ссылка на каталог товаров
-ссылка на корзину
-ссылка на оформление заказа
2--страница каталога товаров. Содержит:
-список товаров, где напротив каждого товара стоит ссылка на страницу конкретного товара
3--страница описания конкретного товара. Содержит:
-описание товара
-кнопку "купить"
4--страница корзины. Содержит:
-список выбранных для покупки товаров
-кнопку "оформить заказ"
5--страница оформления заказа. Содержит:
-список выбранных для покупки товаров
-поле адреса для доставки
-кнопку "подтвердить заказ"
Т.е. уже можем нарисовать структуру страниц открытой части сайта, которые можно представить в виде отдельных квадратиков, со стрелками друг на друга, например
---главная страница---
каталог товаров ---> [страница каталога]
корзина ---> [страница отображения корзины]
и т.д.
----------------------
Углубляемся дальше на примере 1-помещения товара в корзину и 2-отображения корзины:
1-помещение товара в корзину.
Находясь на странице описания товара и нажав на кнопку "купить", необходимо проделать следующее.
(храним выбранные товары в куках)
--прочитать куки пользователя
--извлечь из них идешки уже имеющихся в куках товаров
--добавить к этому списку ид выбранного товара
--перезаписать этот список в куки
Что для этого надо (углубляемся еще):
На странице описания товара надо иметь ссылку типа /product.php?action=add-to-cart&id={ид-товара}, по нажатию на которую передается управление скрипту product.php c действием add-to-cart.
product.php, определив, что задано действие add-to-cart
--читает параметр _GET[id]
--читает из кук пользователя уже сохраненные там идешки (их может там еще не быть)
--добавляет к списку сохраненных идешек только что прочитанный параметр _GET[id]
--перезаписывает в куки пользователя новый список идешек
--отображает страницу описания этого же продукта, как-то оформляем, что товар уже добавлен в корзину.
2-отображение корзины:
Где-то на главной странице имеем ссылку на корзину типа /cart.php
Скрипт cart.php:
--читает из кук пользователя сохраненные там идешки (мы уже это делали выше, значит это можно оформить в отдельную функию)
--делает из таблицы товаров выборку тех товаров, идешки которых записаны в куках
--отображает страницу корзины, в которой выводятся только что выбранные из БД товары
И т.д. и т.п. по каждому пункту.
Т.е.
-сначала делаем описание всех возможных действий пользователя
-по нему формируем набор страниц, с соответствующим интерфейсом (ссылки, кнопки, формы, списки, деревья и т.д.), на которых эти действия он может реализовать.
-для каждого действия пользователя на сервере/фронте создаем соответствующие обработчики, которые, исходя из собственно заданного действия и состояния системы на тот момент, выполняют какие-то действия: читают/записывают что-то в БД/куки, запрашивают что-то у пользователя или что-то ему отображают.
-каждый пункт можно оформить в любую графическую схему со стрелками/алгоритм или словесное описание.
-каждый пункт можно детализировать в подпункты, в под-подпункты и т.д.
ps
для начала рекомендую начать с чего-то более простого, например, с простейшего блога, гостевой книги или т.п.