最近、ちょっとしたレポート管理システムを作ろうとしていました。この奇妙な問題に遭遇するまで、すべてがうまくいっていました。コードには多くの html が含まれているため、重要な部分のみを含めます。
基本的に、これはログインページです。SESSION変数に情報を保存しています。
ユーザー名とパスが一致しない場合、次の処理のためにエラー メッセージが以下の関数に渡されます。
編集:私のプロジェクトのすべてのページには、次の内容のconfig.phpが含まれています
// Start of config.php
session_start();
error_reporting(E_ERROR);
// ********************* Database Config **********************//
$dbHost = "localhost"; // MySQL host
$dbUser = ""; // MySQL username
$dbPass = ""; // MySQL password
$dbDatabase = ""; // MySQL main database name
login.php の一部を以下に示します。
//START OF PHP CODE//
include("config.php");
function gotError($msg)
{
$_SESSION['err'] = $msg;
header("Location: login.php");
die();
}
//CODE FOR EVALUATION OF DATA//
// END OF THE PHP CODE & BELOW THE HTML WILL START //
そして、同じページの開始 php コードの下に、ページの html コードがあります。HTML の間には、上記のデータ セットを使用するための PHP コードがいくつかあります。
----------- SOME HTML CODE HERE----
<?php
if(isset($_SESSION['err']))
{
$html.= "<script type='text/javascript'>";
$html.= '$.alert("'.$_SESSION['err'].'");';
$html.= "</script>";
print $html;
}
?>
----------------- SOME HTML CODE HERE--------
ここで奇妙な動作が発生します。ページはログインデータをそれ自体に投稿します。エラーが発生した場合、エラーはセッション変数 { $_SESSION['err'] } に設定され、再度ページ自体にリダイレクトされ、jquery メッセージボックスが表示されます。 $_SESSION[ 'err' ] は空ではありません。
上記のコードは元の形式では機能しませんが、以下に示すコードが気に入れば、コードは機能します。以前は機能しなかった条件付きコンポーネントを含むコード全体を意味します。その特定の行を削除するとすぐに、条件付き評価が機能しなくなります。
<?php
print($_SESSION['err']);
if(isset($_SESSION['err']))
{
$html.= "<script type='text/javascript'>";
$html.= '$.alert("'.$_SESSION['err'].'");';
$html.= "</script>";
print $html;
}
?>
誰もこれについて手がかりを持っていますか? PHP バージョン 5.3.8 を使用しています。
ありがとうございました。