0

最近、ちょっとしたレポート管理システムを作ろうとしていました。この奇妙な問題に遭遇するまで、すべてがうまくいっていました。コードには多くの 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 を使用しています。

ありがとうございました。

4

2 に答える 2

0

session_start()実際にセッションを有効にするために呼び出していますか? それがなければ、ただ時間を無駄にするだけです。セッションを開始しない限り、php は書き込みデータを に保存せ$_SESSIONず、以前に別の場所に保存されたデータをロードしません。

于 2012-07-14T15:39:31.820 に答える
0

この問題を解決しました。HTML 間の php スクリプトの位置を頭から本文に変更するとうまくいくことがわかりました。

于 2012-07-15T07:53:29.147 に答える