2012-07-14 163 views
0

我正在嘗試最近製作一個小報告管理系統。一切都很順利,直到我遇到這個奇怪的問題。由於代碼包含很多html,因此我只會包含重要的部分。代碼塊沒有執行

基本上這是一個登錄頁面。我將信息存儲在SESSION變量中。

當用戶名和密碼不匹配時,錯誤消息被提供給下面的這個函數進行進一步處理。

編輯:在我的項目的每一頁都包括與下列內容

// 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中的一部分如下所示的config.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 [「犯錯」]},然後再重定向到自身如果$ _SESSION ['err']不爲空,它將顯示一個jquery消息框。

上述代碼在原始表單中無效,但是,如果我確實喜歡下面顯示的代碼,代碼就可以工作。我的意思是整個代碼包括以前沒有用過的條件組件。只要我刪除特定行,條件評估就不起作用。

 <?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。

謝謝。

+0

你在腳本的開頭有'session_start()'嗎? – PeeHaa 2012-07-14 15:58:34

+0

我已添加附加信息。問題不在於session變量沒有被設置,而只是在我打印某些東西時才評估if條件。 – Nick 2012-07-14 16:11:53

回答

0

您是否打電話session_start()實際啓用會話?沒有這些,你只會浪費你的時間。除非你開始會話,否則PHP將NOT保存您寫入$_SESSION的任何數據,而不會加載以前保存在別處的任何數據。

+0

很明顯,我打電話給他。每個頁面都包含具有session_start()的配置文件。 我沒有包含該信息,因爲我認爲這很明顯,當我編寫它的工作並在添加該打印語句時顯示會話變量的內容,但我現在已經添加了該信息。謝謝。 – Nick 2012-07-14 16:04:45

0

我解決了這個問題。出來,改變PHP腳本之間的HTML從頭到身體的位置做了伎倆。