2016-11-22 21 views
0

檢查後,沒有驗證我設置會話變量在我這裏header.php空()POST

<?php 

session_start(); 

if(empty($_SESSION['name'])) { 
    ?> 
    No name set! <br> 
    <form action="" method="post"> 
     <input type="text" name="textName"/> 
     <input type="submit" name="submitName" value="Log in"/> 
    </form> 

    <?php 
    if(isset($_POST['submitName'])) { 
     $_SESSION['name'] = $_POST['textName']; 

    } 
} 

並驗證了name變量被設置在我這裏指數:

<?php 

include 'header.php'; 

if(!empty($_SESSION['name'])){ 
    ?> 
<a href="session_kill.php">Log out</a> 
<?php 
} 

?> 

我可以確認會話變量存在,因爲出現了logout鏈接。

通過表單提交名稱後,會話變量更新,但empty()檢查不再發生,這意味着textarea停留在頁面上,除非我刷新。

誰能告訴我爲什麼會發生這種情況?

+0

你必須在顯示它之前處理數據,否則你會顯示未處理的數據......假設你有登錄表單,在檢查用戶登錄前是否顯示登錄表單,那麼你將不得不刷新頁面檢查您是否已登錄。 – 2016-11-22 11:32:48

+0

爲什麼不使用isset();? –

回答

5

採取這一部分:

if(isset($_POST['submitName'])) { 
    $_SESSION['name'] = $_POST['textName']; 

} 

高於此:

if(empty($_SESSION['name'])) {} 

當您提交表單,開頭;因爲會話是空的,因此表單保持在那裏,然後會話被初始化。當你刷新頁面時,會話檢查工作。

+0

哇,我是個白癡,謝謝! –

+0

很高興幫助。解釋添加:) –