2013-04-29 2 views
0

У меня есть Opera 12.15 на XP с включенными cookie, запущенными на XAMPP и localhost. Нет .htaccess.PHP Session Variable, созданная представлением формы, не сохраняется

1) Я не понимаю, почему следующая переменная сеанса не сохраняется в Opera, пока она работает в других браузерах. Только с Opera, если вы перейдете к странице (по ссылке) после того, как форма была принята, переменная сеанса исчезла, и форма снова отобразится. Это нормально (т. Е. Переменная сохраняется), если я просто обновляю страницу.

2) У меня также есть вторичный вопрос, как вы можете видеть ниже. Я открыл тэг php и запустил оператор «if», затем закрыл тег php, ввел некоторый html, открыл новый тег php, закрыл 'if' и, наконец, закрыл второй тег php. Является ли этот допустимый код, я изначально учил эхо html в «if» и просто имел один набор тэгов php? Первый легче и работает, я видел, что он используется в другом месте.

Заранее благодарен.

<?php 
// Turn on error reporting 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 

session_start(); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<title>Opera Session Variable</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 

<body> 
<?php 
// create a test variable to confirm other session variables outside of Form are persisting 
$_SESSION['test'] = 'Test'; 

// function to print session variables 
function print_array($_SESSION) 
{ 
echo '<pre>$_SESSION<br />' . "\n"; 
print_r($_SESSION); 
echo "</pre>\n"; 
} 

// process the submitted form 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
if (isset($_POST['formaccept'])) { 
$_SESSION['formaccepted'] = $_POST['formaccept']; 
} 
} 

// print the session variables 
print_array($_SESSION); 

// only display the form if it has not previously been accepted in this session 
if (!isset($_SESSION['formaccepted'])) { 
?> 
<p><b>This parargraph should only display if the form has not been accepted in the current session.</b></p> 
<br /> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<input type="submit" name="formaccept" value="Accept" /> 
</form> 
<?php 
} 
?> 

</body> 

</html> 

ответ

0

Должно быть так, как опера обрабатывает кеш, я не вижу ошибок с вашим кодом.

Что касается вашего второго вопроса, этот синтаксис работает, но обычно не рекомендуется, поскольку он делает макет грязным, заполненным фрагментами.

+0

Спасибо, это означает, что я могу что-то сделать с помощью .htaccess для преодоления проблемы или, возможно, для альтернативного подхода, я просто не хочу, чтобы форма снова появлялась в том же сеансе? Неужели у Опера должен быть способ сделать это? – martin

+0

Я сузил это до версий 11 и 12 Opera и только на XP. Не знаю, почему. Переменная сеанса сохраняется в Windows7. – martin

+0

Я думаю, вы можете записать это как ошибку для Opera, чтобы они могли ее рассмотреть, или я предполагаю, что у вас уже есть более новая версия, поэтому вам не нужно беспокоиться об этом. – Celestz