Можно ли передать данные из 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 внезапно может принимать параметры GET например. Каждый клиент может иметь сессию, и дальше вы можете делать что хотите
Ответы:
Выбрав 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 - выбирайте! Или опять не понятно, и надо опять перечислить?
- AUser0, в итоге сделал так:
readfile('header.htm'); echo $bytes; readfile('footer.htm');
readfile('header.htm'); echo $bytes; readfile('footer.htm');
Мне не нравится, что URL у конечного файла остается от PHP-обработчика, но это уже чистый феншэй, на который можно и забить, особенно если сравнить с предложенным Вами решением.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Да, конечно, можно передать данные из PHP в «отдельностоящий» HTML. Для этого существует несколько способов.
Один из способов - это использование PHP для генерации HTML кода с помощью echo или print. Например:
<?php $variable = "Hello, World!"; echo "<p>$variable</p>"; ?>
В данном примере мы используем переменную $variable, которая содержит строку "Hello, World!", и с помощью echo выводим эту строку в тег
на странице.
Еще один способ - это использование PHP внутри HTML файла с расширением .php. Например:
<title>PHP in HTML</title> <?php $variable = "Hello, World!"; echo "<p>$variable</p>"; ?><title>PHP in HTML</title> <?php $variable = "Hello, World!"; echo "<p>$variable</p>"; ?>
В этом примере мы используем PHP код внутри HTML файла, что позволяет нам взаимодействовать с данными на сервере и динамически генерировать контент для пользователя.
Также можно использовать AJAX запросы для передачи данных из PHP в HTML. Например, с помощью jQuery:
<title>AJAX Example</title> <div id="result"></div> $.get("data.php", function(data) { $("#result").html(data); });<title>AJAX Example</title> <div id="result"></div> $.get("data.php", function(data) { $("#result").html(data); });
В этом примере мы отправляем AJAX запрос на сервер к файлу data.php, который возвращает данные, и затем отображаем эти данные на странице.
Таким образом, есть несколько способов передачи данных из PHP в HTML, и выбор конкретного зависит от конкретной задачи и предпочтений разработчика.