Как получить данные формы и отправить дальше?
Старый и идеологически уже не правильный способ, при формировании кода страницы 2 в значения value тегов input можно вставлять значения, принятые со страницы 1 (глобальная переменная $_POST или $_GET), но при этом необходимо пропустить эти данные через htmlspecialchars а для данных вне атрибутов, например для select или textarea, - более мощную htmlentities, но в любом случае с осторожностью, например \n там для html опций не конвертируется (а для xml да но другие нюансы), советую полистать комментарии под этими функциями.

Если из страницы 1 нужно было передать данные полей, которых нет на странице 2 но нужны на странице 3, то использовали скрытые input type=hidden

Очевидно, что это максимально идиотский и неэффективный метод передачи данных между страницами, и существовал он  исключительно потому, что браузеры не имели нормального скрипта в стандарте, но теперь есть javascript, есть куки, есть локальное браузерное хранилище, есть ajax, есть вебсокеты, любой из этих технологий достаточно чтобы не городить описанное мной многоуровневое убожество.
Если под страницей 3 вы имеете в виду файл action.php то все данные из страницы 2 будут лежать в суперглобальной переменной $_POST, бери не хочу и вставляй куда угодно.