XP で Opera 12.15 を使用しており、XAMPP と localhost で実行されている Cookie が有効になっています。.htaccess はありません。
1) 次のセッション変数が Opera では持続しないのに、他の主流のブラウザーでは持続する理由がわかりません。Opera の場合のみ、フォームが受け入れられた後に (リンク経由で) ページに再度アクセスすると、セッション変数がなくなり、フォームが再び表示されます。ページを更新するだけで問題ありません (つまり、変数は保持されます)。
2) 2 つ目の質問もあります。以下に示すように、php タグを開いて「if」ステートメントを開始し、php タグを閉じ、html を入力し、新しい php タグを開き、「if」を閉じて、最後に 2 番目の php タグを閉じました。これは有効なコードですか?私は当初、「if」内で html をエコーし、php タグのセットを 1 つだけ持つように教えられましたか? 前者の方が簡単で機能します。他の場所で使用されているのを見ました。
前もって感謝します。
<?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>