Можно ли передать данные из PHP в «отдельностоящий» HTML?
Есть PHP-обработчик данных из HTML-формы: в form.htm вводятся данные и делается POST к process.php, который их обрабатывает и в конце через header выдает result.htm
Содержимое result.htm – статика: «спасибо, что ввели данные, бла-бла-бла», но сама страница собирается через SSI (шапка, подвал, блоки второстепенной информации, присутствующие на каждой странице сайта).
Встала задача: result.htm кроме статичного текста должен выдавать и результат обработки данных, условно: «спасибо, что ввели данные, из них получено Х байт новых данных, бла-бла-бла». X без проблем считается в process.php (на самом деле это не цифра, а текст), а вот передать его оттуда в result.htm оказалось проблемой.
Тупо вызвать значение $bytes из result.htm не работает – вне process.php эта переменная не существует.
«Распечатать» весь result.htm «внутри» process.php через echo – много «но»: как внутрь PHP встроить вызов SSI? У фактического result.htm остается URL от process.php (не смертельно, но и не феншуй). И т.д.
Сохранить $bytes в отдельный файл, затем через header вызвать result.htm, в который через SSI встроить еще и этот отдельный файл – можно. Криво, но будет работать, но до тех пор, пока одновременно двое клиентов не воспользуются process.php, но получат одинаковые значения $bytes в связи с перезаписью пресловутого отдельного файла последним клиентом. Либо придется вводить уникальные ID для каждого полученного значения, а затем еще как-то понимать, что данный уникальный файл со значением больше не нужен и его можно стирать…
В общем, все способы удаления гланд нетрадиционным образом я, кажется, перебрал, надеюсь, упустив простой и традиционный, который рассчитываю узнать от опытных пэхэпэводов ;)
Выбрав SSI ты заранее создал себе проблемы.
Собирать страницу из кусочков можно на самом php, прямо в твоем process.php (именно так и делают), а с помощью mod_rewrite веб сервера скрывают .php от пользователя, оставив /process
Так же совершенно нормально (с оговорками про поисковые системы, роботы еще не очень хорошо читают такие страницы но все решаемо) формировать страницу не на сервере а на клиенте, с помощью javascript (такой подход активно используется в SPA веб приложениях), в этом и похожих случаях необходимые переменные передаются с сервера на клиент с помощью технологии ajax (на основе fetch или XMLHttpRequest, сам ajax реализован в популярном jquery) а еще лучше с помощью websocket (но нужно на сервере уже бакэнд с его поддержкой), ведь это позволит не только клиенту запрашивать данные но и серверу оперативно передавать данные клиенту по своему желанию а не когда спросят.
Чем больше знаю, тем лучше понимаю, как мало знаю.
Используйте Javascript, его вполне можно статично вписать в result.html. А данные для отображения храните или в localStorage браузера (вот и персонализированный вывод, для каждого пользователя свой), или в cookie опять-же браузера, но туда много данных - не влезет.
Можно ещё прописать PHP код внутрь этого result.html, хранить данные на самом сервере, ну и собирать страницу динамически, хотя для обращающихся она будет выглядеть статичной.
Но в обоих вариантах дать ссылку на result.html другому человеку не получится, он на этой странице данных не увидит. Разве что ссылку result.html?data_id=0388473, но это сразу всё усложняет.
Можно ещё прописать PHP код внутрь этого result.html, хранить данные на самом сервере, ну и собирать страницу динамически, хотя для обращающихся она будет выглядеть статичной.
Но как, Холмс? Вопрос в том и заключается: как result.html получить значение $bytes из process.php Что ссылку другим передать не получится - не проблема. Переменная содержит текстовое описание проблемы с формой или ее обработкой (если она возникает), конкретно для этого пользователя. Статичное "что-то пошло не так - попробуйте угадать, что именно" - знаю как, но это не решение.
ifap, как передать идентификатор результата? localStorage, cookie, $_SESSION, аргумент в URL, finвыбирайте.IP+UserAgent - выбирайте! Или опять не понятно, и надо опять перечислить?
Мне не нравится, что URL у конечного файла остается от PHP-обработчика, но это уже чистый феншэй, на который можно и забить, особенно если сравнить с предложенным Вами решением.