2015-09-27 2 views
-3

Я полностью смущен переменными сеанса. Я думал, что если я установил переменную сеанса, то эта переменная будет доступна в любом php-документе, который начинается с session_start. Но это не работает.Можно изменить переменную сеанса php, и если да, то как?

Форма:

<?php 
session_start(); 
if(isset($_POST['hour'])) { 
$_SESSION['hour'] = $_POST['hour']; 
} 
?> 
<!DOCTYPE html> 
<html> 
<body> 
<form action='viewA.php' method='post'> 
<input type="text" name='hour' value='24'> 
<input type ='submit' name= 'submit' value='submit'> 
</form> 
</body> 
</html> 

я отправляю к viewA.php, и она работает:

<?php 
$hour = $_POST['hour']; 
echo 'I am view A, and hour is '.$hour; 

?> 
<html> 
<a href='View_B.php'>See View B</a> 
<a href='TEST_form.php' >Choose another hour</a> 
</html> 

Файл viewA.php имеет ссылку на View_B.php; вот код View_B в:

<?php 
session_start(); 
print_r($_SESSION); 
//$hour = $_SESSION['hour']; 
//echo '... and in view B, hour is '.$hour; 
?> 
<html> 
<a href='aatestform.php' >Choose another hour</a> 
</html> 

Независимо от того, что я ставлю на вход в форме, print_r($_SESSION); View_B выводит только Array ([hour] => 13), что первый час я выбрал путь назад, когда. Я набираю «22»; он выводит 13. I типа в "08", он выводит 13.

Согласно W3Schools, "To change a session variable, just overwrite it"

Что я делаю неправильно? Пожалуйста помоги!

+0

вы можете включить error_reporting (E_ALL) и посмотреть, есть ли ошибка «не перезаписать заголовки»? – jdog

+0

Когда вы отправляете форму в 'ViewA.php', она будет выполнять' ViewA.php', поэтому часть PHP в вашей форме не будет оцениваться. – frz3993

ответ

1

В вашем viewA.php вы не храните/не перезаписываете переменную сеанса с помощью значения $_POST.

Вы просто сделаете это в своем TEST_form.php, который не получает $_POST, поэтому ваш if(isset(... бесполезен.

+0

ах да, это было ... $ _SESSION ['hour'] = $ _POST ['hour']; принадлежит viewA.php - МНОГО СПАСИБО! это сводило меня с ума – prokaryote

1

Ваше почтовое отправление (действие) - viewA.php, это значит, что ваш запрос будет сделан по адресу viewA.php.

Вы используете сеансовые переменные только на странице form и в View_B.php.

Если вы внимательно посмотрите на свой код в ViewA.php, вы увидите, что вы работаете только с переменными POST, а не с переменными сеанса.

Этот PHP-код, который вы имеете в вашем form странице

<?php 
session_start(); 
if(isset($_POST['hour'])) { 
$_SESSION['hour'] = $_POST['hour']; 
} 
?> 

должны быть перемещены в viewA.php. Выполнение этого, viewA.php будет проверять, установлена ​​ли переменная POST «часы». В этом случае он перезаписывает (или создает) переменную сеанса «часы».

+0

Да, сделано, и это работает. Большое спасибо за ваш ответ. – prokaryote