В течение 6-7 часов я жгла голову этой проблемой, но не могла найти ни проблему, ни решение.
Я работал над многоэтапной регистрационной формой на моем сервере, и мне нужно перенести ее на выделенный сервер Windows с php 5.2.17 и apache 2.2.
Проблема в том, что в этой новой среде она работает не так, как ожидалось. Логика моего сценария следующая (и это порядок в моем файле):
- Создайте мои 3 объекта формы (с методом = post и action = один и тот же файл)
- Проверьте каждую форму и, если true, поместите введенные данные в сеанс, а затем выполните
header("location: {$_SERVER['PHP_SELF']}?page=the_next_step");
- Начать отображение страницы и, в зависимости от
$_REQUEST['page']
, отобразить необходимый объект формы (если значение для страницы 1 не отображается, если значение для страницы = 2, отображать форму 2 и т. Д.).
В IE например; когда я заполняю первую форму и отправляю ее, она даже не доберется до утверждения if.
В Firefox я могу пройти через шаги, но в адресной строке я не вижу строки моего запроса (page = 2, page = 3).
Есть идеи, в чем может быть проблема?
Есть ли какие-либо настройки, которые должны быть выполнены на php / apache на сервере? Есть ли проблема с GET или POST или отправкой данных?
И еще я вижу очень странную вещь: исходный код моей страницы отображается в <framesets>
.
Запуск PHP 5.2.17 + Apache 2.2 Windows 2008 server
Ладно, после еще одного исследования я обнаружил, что могу иметь какое-то отношение к сессиям.
Я вижу, что в IE сессия не работает и разрушается.
Это код:
<?php
session_start();
if (!isset($fv)) $fv = &$_SESSION['rgform']['page1'];
if (!isset($fv1)) $fv1 = &$_SESSION['rgform']['page2'];
if (!isset($fv2)) $fv2 = &$_SESSION['rgform']['page3'];
Теперь я создаю свои объекты
if ($form->validate())
{
$_SESSION['rgform']['page1'] = $_POST;
header("location: {$_SERVER['PHP_SELF']}?page=step2");
}
if ($form2->validate())
{
$_SESSION['rgform']['page2'] = $_POST;
header("location: {$_SERVER['PHP_SELF']}?page=step3");
}
if ($form3->validate())
{
$_SESSION['rgform']['page3'] = $_POST;
header("location: {$_SERVER['PHP_SELF']}?page=step4");
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- load my css, js etc -->
<body>
if(!isset($_REQUEST['page']) )
{
$form->render('custom-template.php');
}
elseif( $_REQUEST['page']== "step2" && $_SESSION['rgform']['page1']['pagename']== "part_det" ) // on each form i have an hidden input with the name "pagename" and different value
{
$form2->render('custom-template-2.php');
}
elseif($_REQUEST['page']== "step3" && $_SESSION['rgform']['page2']['pagename']=="comp_det")
{
$form3->render('custom-template-3.php');
}
elseif($_REQUEST['page']== "step4" && $_SESSION['rgform']['page3']['pagename']== "buss_det")
{
echo "Thanks!!";
session_destroy();
}
</body>
</html>
Теперь, как я уже говорил, я печатаю свою сессию на странице, и когда я нажимаю на кнопку отправить, все данные POST должны быть записаны в сессии, но почему-то это не работает в IE, и поэтому я могу пойти и сделать форма 2.
Еще одна интересная вещь: я не могу увидеть строку запроса в адресной строке моего браузера, даже если после проверки формы 1 я сделаю: header("location: {$_SERVER['PHP_SELF']}?page=step2");
Это проблема с настройкой сервера?