2011-11-09 45 views
0

當您單擊登錄時,它應該顯示註銷按鈕。單擊註銷按鈕應使其再次顯示登錄選項。目前它只是一直坐在登錄窗口上,即使它創建了一個會話並在我的服務器中填充了正確的信息。PHP登錄後不會更改要導入的內容

我不知道爲什麼我的代碼不工作。我有它的工作,然後它突然停止,我不知道我改變了什麼。此外,我知道這不是使用數據庫,我應該使用一個,但分配呼籲不使用一個。

這裏是index.php文件:

<?php 

    session_start(); 
    if(empty($_SESSION['email'])) 
    { 
     include("includes/login.php"); 
    } 
    else 
    { 
     include("includes/logout.php"); 
    } 

?> 

這裏是我的login.php:

<form id="login" method="post" action="index.php"> 
    <input name="email" type="email" placeholder="[email protected]" required="required"> 
    <input name="password" type="password" placeholder="Password" required="required"> 
    <input class="button" name="submit" type="submit" value="Submit"> 
</form> 

<?php 
    //if someone tries to log in 
    if (isset($_POST['email']) && isset($_POST['password'])) 
    { 
     $email=($_POST['email']); 
     $password=sha1($_POST['password']); 

     $users = file('includes/users.php', FILE_IGNORE_NEW_LINES); 

     for($i=0;$i<count($users);$i++) 
     { 
      $user = explode(',', $users[$i]); 
      if($user[0] === $email && $user[1] === $password) 
      { 
       session_start(); 
       $_SESSION['email']=$user[0]; 
       $_SESSION['pass']=$user[1]; 
       $_SESSION['name']="$user[2] $user[3]"; 
       $_SESSION['admon']=$user[4]; 
      } 
     } 
    } 
?> 

這裏是logout.php:

<form id="login" method="post" action="index.php"> 
    <input name="logout" type="submit" value="logout" /> 
</form> 

<?php 
    if($_POST['logout'] === 'logout') 
    { 
     session_destroy(); 
    } 
?> 

回答

1

在你的index.php,你檢查用戶是否已經登錄:

if(empty($_SESSION['email'])) 

如果不是,則包含登錄頁面,否則註銷。但是,如果您剛剛提交了表單,SESSION ['email']仍然爲空,並且您正在顯示錶單。但是你有你的登錄數據,所以如果你的詳細信息是正確的,你將會登錄 - 刷新後你會看到它。

您的註銷也是如此 - 如果您提交註銷表單,您的會話將針對最後一個請求(它將銷燬它)進行激活,因此註銷頁面將再次出現。您需要刷新您的瀏覽器,並且登錄將會更改。

要解決這兩個問題,請將一個重定向添加到兩個if -s的末尾。例如:

if($_POST['logout'] === 'logout') 
{ 
    session_destroy(); 
    header('Location: index.php); 
} 

這將在處理註銷後重新載入您的頁面,從而有效地爲您提供良好的結果。對登錄進行同樣的操作,它也會起作用。