У меня есть страница, которая проверяет, установлен ли $_POST, а затем сохраняет данные сообщения в переменную сеанса $_SESSION. Когда страница перенаправляется, она не отображает данные сеанса на странице результатов. Когда я делаю print_r($_SESSION), он показывает пустой массив. На каждой странице я добавляю файл include.php. На этой странице я делаю следующее
<?php session_start(); ?>
index.php
<?php
include 'assets/include.php';
require 'assets/dbinfo.php';
$query = "SELECT * FROM Authors ORDER BY first_name";
$resultObj = $connection->query($query);
if (count($_POST))
{
$_SESSION['formPostData'] = $_POST;
header('Location: final.php');
}
?>
<!DOCTYPE html>
<html>
<head>
<title>PHP Fundamentals</title>
<link href = "assets/styles.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<div id = "Header">
<img src = "assets/Dickens_Gurney_head.jpg" border = "0" alt = "">
<h2>
Join Our Literature Mailing List
</h2>
</div>
<div id = "Body">
<form method = "post" action = "index.php" >
<div>
<label>Favorite Author:</label>
<select name = "author">
<?php while($row = $resultObj->fetch_assoc()): ?>
<option value = "<?=$row['id']?>"><?=$row['first_name']?> <?=$row['last_name']?></option>
<?php endWhile; ?>
</select>
</div>
<div class = "multiple">
<label>Favorite Century:</label>
17th Century <input type = "checkbox" name = "century[]" value = "17th">
18th Century <input type = "checkbox" name = "century[]" value = "18th">
19th Century <input type = "checkbox" name = "century[]" value = "19th">
</div>
<div>
<label>Comments:</label>
<textarea name = "comments"></textarea>
</div>
<div>
<label>Name:</label>
<input type = "text" name = "name" />
</div>
<div>
<label>E-mail Address:</label>
<input type = "text" name = "email" />
</div>
<div class = "multiple">
<label>Receive Newsletter:</label>
Yes <input type = "radio" name = "newsletter" value = "yes">
No <input type = "radio" name = "newsletter" value = "no">
</div>
<div class = "multiple">
<label> </label>
<input type = "submit" name = "submit" value = "Join Mailing List">
</div>
</form>
</div>
</body>
</html>
финал.php
<?php
include 'assets/include.php';
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
$postedData = $_SESSION['formPostData'];
?>
<!DOCTYPE html>
<html>
<head>
<title>PHP Fundamentals</title>
<link href = "assets/styles.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<div id = "Header">
<img src = "assets/Dickens_Gurney_head.jpg" border = "0" alt = "">
<h2>
Mailing List Information
</h2>
</div>
<div id = "Body">
<div>
<label>Favorite Author:</label>
<span><?=$postedData['author']?> </span>
</div>
<div>
<label>Favorite Century:</label>
<span><?=$postedData['century']?> </span>
</div>
<div>
<label>Comments:</label>
<span><?=$postedData['comments']?> </span>
</div>
<div>
<label>Name:</label>
<span><?=$postedData['name']?> </span>
</div>
<div>
<label>E-mail Address:</label>
<span><?=$postedData['email']?> </span>
</div>
<div>
<label>Receive Newsletter:</label>
<span><?=$postedData['newsletter']?> </span>
</div>
</div>
</body>
</html>






Похоже, ваша форма публикуется непосредственно в final.php, поэтому вы должны иметь доступ к опубликованным данным в $_POST.
Он не будет установлен для сеанса, потому что код в index.php не запущен (форма отправляется в другой файл)
Если вы хотите установить данные в сеанс, вы должны сделать это в final.php.
Я больше не включаю session_start(); в index.php, но final.php по-прежнему показывает пустой массив. Массив ( [formPostData] => Массив ( ) )
Вы должны получать данные публикации из $_POST вот так: $postedData = $_POST
Спасибо атимик. Я обновил свой код в вопросе, чтобы отразить рабочую копию.
В соответствии с вашим действием формы, которое находится в index.php, ваша форма публикуется в final.php, где вы не устанавливаете никаких данных сеанса, поэтому ваши данные сеанса представляют собой пустой массив.
Если вы хотите, чтобы ваши данные сеанса печатались в final.php, поэтому вам нужно изменить действие формы на index.php после настройки данных сеанса, которые вам нужно перенаправить на final.php Затем вы получите данные сеанса.
Нужно ли устанавливать данные сеанса в final.php или index.php для печати в final.php?
Вам нужно установить сеанс в final.php
Я бы изменил
include 'assets/include.php'наrequire_once 'assets/include.php'У вас, вероятно, есть куча ошибок уровня уведомлений для этого ... / вызов запуска сеанса несколько раз.