PHP забывает значения переменных

0

В настоящее время я собираю небольшой проект для клиента. Поскольку клиентский веб-хост не поддерживает 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 не перезагружается, поэтому это не должно быть проблемой, не так ли?

Теги:
echo

2 ответа

1

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'].

  • 1
    Чтобы уточнить хороший ответ. Убедитесь, что session_start() находится в самом начале вашего php-кода.
1

Второй POST сбрасывает переданные переменные. Вы можете переключиться на GET и $deviceMake переменные, или вы можете отправить $deviceMake в качестве скрытой переменной во второй раз.

  • 0
    Я попробую, ура. Я потратил некоторое время на использование GET, но было трудно обойтись без использования вложенных фреймов или перезагрузки файла PHP после каждой отправки. Просто понял, что я случайно разместил это здесь вместо SO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню