Почему PHP SESSION не переносит данные на другую страницу? - PullRequest
0 голосов
/ 01 ноября 2019


У меня PHP-проект по созданию расписания.

Я пытаюсь использовать SESSIONS для запоминания переменной, которая состоит из 1 объекта расписания класса, которое я написал.
1. index.php. На этой странице чистый HTML, просто форма с методом POST и действием для 2-й страницы.

<!DOCTYPE html>
<html lang="ru">
<head>
    <link rel="stylesheet" type="text/css" href="styles/styles.css">
    <meta charset="UTF-8">
    <title>Главная страница</title>
</head>
<body>
<form method="post" action="php-files/create_object_schedule.php" target="_blank">
    <div>
        Уровень образования:
        <select name="edu_level">
            <option>Бакалавриат</option>
            <option>Магистратура</option>
            <option>Аспирантура</option>
        </select>
    </div>
    <div>
        Форма обучения:
        <select name="edu_form">
            <option>Очная</option>
            <option>Очно-заочная</option>
            <option>Заочная</option>
        </select>
    </div>
    <div>
        Семестр:
        <select name = "edu_semester">
            <option>1 семестр (осенний)</option>
            <option>2 семестр (весенний)</option>
        </select>
        <select name = "edu_year">
            <option>2019-2020</option>
            <option>2020-2021</option>
        </select>
        учебного года.
    </div>
    <div>
    </div>
    <button type="submit" name="create_schedule">Создать расписание</button>
</form>
</body>
</html>
2-я страница "create_object_schedule.php" имеет следующий код:
<?php
session_start([
    'cookie_lifetime' => 86400,
]);
require "../classes/schedule.php";
$_POST['edu_semester'] = array_search($_POST['edu_semester'], array(1 => '1 семестр (осенний)', 2 => '2 семестр (весенний)'));
$edu_year_start = (int)substr($_POST['edu_year'], 0, 4);
$edu_year_end = (int)substr($_POST['edu_year'], -4, 4);
$_SESSION['schedule'] = 
     new schedule('schedule_' . $_POST['edu_semester'] . 'sem_' . $edu_year_start . 
     '_' . $edu_year_end, $_POST['edu_level'], $_POST['edu_form'], $_POST['edu_semester'], 
     $edu_year_start, $edu_year_end);
header('Location: schedule_create.php');

На этой странице я создаю объект класса с методом __construct, а затем сохраняю этот объект в SESSION. Затем он перенаправляет на schedule_create.php, где мы можем настроить параметры расписания, а также есть HTML-код для отображения информации об этом расписании. Код schedule_create.php:

<?php
session_start([
    'cookie_lifetime' => 86400,
    'read_and_close'  => true,
]);

require "../classes/schedule.php";
var_dump($_SESSION);
c
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <link rel="stylesheet" type="text/css" href="../styles/styles.css">
    <meta charset="UTF-8">
    <title>Новое расписание</title>
</head>
<body>
<p>
    <h3>Создание расписания с параметрами</h3>
    Уровень образования: <?=$_SESSION['schedule']->get_edu_year_start()?><br>
    Форма обучения: <?=$edu_form?><br>
    Семестр: <?=$edu_semester?><br>
    Учебный год: <?=$edu_year_start?>-<?=$edu_year_end?>
</p>
<div>
    <table>
        <colgroup>
            <col width="10">
            <col width="200">
            <col width="400">
        </colgroup>
        <tbody>
        <tr>
            <th colspan="6">Требуемые данные</th>
        </tr>
        <tr>
            <th>#</th>
            <th>Наименование</th>
            <th>Загрузка</th>
        </tr>
        <tr>
            <td>1</td>
            <td>РУП 2016 09.03.02</td>
            <td align="center">
                <form name="form1" enctype="multipart/form-data" method="POST">
                    <input type="file" name="path" title="Выберите файл"/> </br>
                    <input type="submit" name="button" value="Загрузить"/> </br>
                </form>
            </td>
        </tr>
        </tbody>
    </table>
</div>
<?php
move_uploaded_file($_FILES['path']['tmp_name'], '../rup/090302_o_2016.xls');
if(key_exists('button', $_POST))
{
    $_SESSION['schedule']->connect_to_excel('090302_o_2016.xls');
    $_SESSION['schedule']->db_record_departments();
}
?>
<br>
<div>
    <table>
        <colgroup>
            <col width="10">
            <col width="200">
            <col width="400">
        </colgroup>
        <tbody>
        <tr>
            <th colspan="6">Загруженные данные</th>
        </tr>
        <tr>
            <th>#</th>
            <th>Наименование</th>
            <th>Действия</th>
        </tr>
        </tbody>
    </table>
</div>
</body>
</html>

Поэтому я использую функцию session_start () на страницах create_object_schedule.php и schedule_create.php. Но когда он перенаправляет на последнюю страницу (schedule_create.php) var_dump($_SESSION) возвращает array(0) { }.
Я попытался установить cookie_lifetime, я просматривал php.ini и все кажется нормальным.

Iпрошу прощения за русские слова в коде и за неправильное именование файлов. Я новичок в PHP и учусь делать все это.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...