В настоящее время я собираю небольшой проект для клиента. Поскольку клиентский веб-хост не поддерживает PHP, мне нужно было iframe формы с другого хоста. Это не идеально, но это то, с чем мне нужно работать в данный момент.
Обычно у меня не было бы большой проблемы с формами, за исключением того, что эта форма многостранична. Он также требует PHP, потому что он содержит ключи API.
Вот основная часть кода.
<?php
echo file_get_contents("make.html");
if (isset($_POST['devicemake']))
{
$deviceMake = $_POST['devicemake'];
echo "<script type='text/javascript'>\n";
echo "document.body.innerHTML = ''";
echo "</script>";
echo $deviceMake;
echo file_get_contents("model.html");
}
if (isset($_POST['devicemodel']))
{
$deviceModel = $_POST['devicemodel'];
echo "<script type='text/javascript'>\n";
echo "document.body.innerHTML = ''";
echo "</script>";
echo $deviceMake . $deviceModel;
echo file_get_contents("description.html");
}
?>
Он загружает первую страницу формы, а затем, как только пользователь выбрал вариант, он помещает свой ответ в переменную, очищает страницу и загружает следующую.
Я тестировал каждую страницу по отдельности и, похоже, мог поместить каждое значение в переменную после отправки, но одна проблема, которую я, похоже, не могу понять, - это то, что она будет отражать только последнюю сохраненную переменную. Например, если я отправлю вторую страницу формы, теперь я должен иметь две переменные. Но при повторном отображении только эхо отражается только переменная deviceModel.
Почему это? Я искал и искал это и просто не мог найти, почему он не будет содержать переменные на разных страницах. Сам файл PHP не перезагружается, поэтому это не должно быть проблемой, не так ли?
PHP - это серверный язык, поэтому даже если вы не перегружаете всю страницу каждый раз, когда вы отправляете новый запрос POST на PHP-скрипт, он будет рассматривать его как отдельный запрос и не будет помнить какие-либо значения из вашего предыдущего запроса.
Что вам нужно будет сделать, вы должны сохранить более раннее значение в php-сессии.
Например, если вы хотите сохранить значение $_POST['devicemake']
в первом запросе и $_POST['devicemodel']
на втором. Вы можете сохранить первое значение, используя следующий код.
session_start();
if (isset($_POST['devicemake']))
{
$_SESSION['deviceMake'] = $_POST['devicemake'];
echo "<script type='text/javascript'>\n";
echo "document.body.innerHTML = ''";
echo "</script>";
echo $_SESSION['deviceMake'];
echo file_get_contents("model.html");
}
По следующему запросу вы можете получить это, используя $_SESSION['deviceMake']
.
Второй POST сбрасывает переданные переменные. Вы можете переключиться на GET и $deviceMake
переменные, или вы можете отправить $deviceMake
в качестве скрытой переменной во второй раз.
session_start()
находится в самом начале вашего php-кода.