2014-07-12 94 views
1

當您通過我的登錄表單登錄時,authentication.php將檢查來自輸入的數據是否在數據庫中存在。當有匹配時,用戶將被定向到他的角色的頁面,因此可以說用戶是管理員,他將被引導到admin.php。當用戶成功登錄時,我想顯示歡迎名字姓氏等消息。在我的數據庫中,我有一個名爲firstname的字段和一個名爲lastname的字段。我希望有人能幫助我這個,因爲我似乎無法弄清楚:(根據會話從數據庫獲取數據

authentication.php

<?php 
    session_start(); 
    // Making a connection with the database. 
    $mysqli=new MySQLi("localhost", "root", "root", "portfolio"); 
    $role=""; 

    // Declaring the username and password input. 
    $username=filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); 
    $password=filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING); 

    // If role from members where username and password from inputs exicts in database bind parameters. 
    // If given parameters not excists in database die 
    if($query=$mysqli->prepare("SELECT `role` FROM members WHERE username=? AND password=?")) { 
     $query->bind_param("ss", $username, $password);           
     $query->execute();                 
     $query->bind_result($role); 
     $query->fetch(); 
    } else {                      
     echo "Errors in the Query. ".$mysqli->error;            
     die(); 
    } 

    // If $role is filled make session for username to check if logged in and session role for redirect page. 
    // If $role and $username is not filled invalid password, username combination. 
    if($role!="") {                   
     $_SESSION['ingelogt']=$username;               
     $_SESSION['user_role']=$role;             
     $location="$role.php";                 
     header("location: $location");               
    } else {                     
     echo "Invalid password, username combination"; 
     echo "<br/><a href='login.html'>Click to go back</a>";           
    } 
?> 

頁的管理員將被引導到被稱爲admin.php的

<?php 
    session_start(); 
    // If session is not ingelogt lead back to index.php. 
    if(!isset($_SESSION['ingelogt'])) { 
     header("location: index.php"); 
    } 

    // The role that has access to this page. 
    $page_role="admin"; 
    $role=$_SESSION['user_role']; 
    // If a user with a different role visits wrong page. 
    if($role!=$page_role) 
    { 
     echo "You are not supposed to be here."; 
     die(); 
    } 

    // Start new DOMDocument and load html file. 
    $dom = new DOMDocument(); 
    libxml_use_internal_errors(true); 
    $dom->loadHTMLFile("admin.html"); 
    libxml_use_internal_errors(false); 

    // If user is logged in add logg out icon in the menu. 
    if($_SESSION['ingelogt']) { 
     $oUl = $dom->getElementById('navUl'); 
      $oList = $dom->createElement('li'); 

       $oLink = $dom->createElement('a'); 
       $oLink->setAttribute('href','logout.php'); 

        $oI = $dom->createElement('i'); 
        $oI->setAttribute('class','icon-logout'); 

        $oLink->appendChild($oI); 

       $oList->appendChild($oLink); 

      $oUl->appendChild($oList); 
    } 
    // Save DOMDocument with html document. 
    echo $dom->saveHTML(); 
?> 
+1

請注意,客戶端可能會在HTTP響應中跳過一個Location信頭......這只是「請求」瀏覽器重定向的一種方式,但這並不意味着他們必須「聽」。如果要確保用戶無法通過代碼中的那一點,請始終在'header(「Location:some_uri」)'後面使用'die()'或'exit()''。 – Max

+0

好的!虐待使用,在未來:-) –

回答

1

如果我以任何方式誤解了你,只是給我一個提示,我會刪除這個答案。儘管我假設你想要做的是在頁面上的某處打印問候語,基於用戶的名字和姓氏

基本上,一旦您聲明瞭$_SESSION -element,就可以在不同的頁面訪問它(類似於$_COOKIE,但不完全相同)。因此,最好的解決方案是使用從數據庫收到的名和姓來初始化$_SESSION變量,然後在所需頁面上打印這些變量(與您在角色中使用的方法相同)。

首先,你需要獲取數據庫的名稱,它可以通過改變if語句來在authentication.php做到以下幾點:

if($query=$mysqli->prepare("SELECT `role`, `firstname`, `lastname` FROM members WHERE username=? AND password=?")) //assuming that your columns are called `firstname` and `lastname` 

要提取這些,還需要進一步改變行到:

$query->bind_result($role, $first, $last); 

當在下一行使用fetch,您的變量將被放入其相應的約束的。這樣的語句之後,你可以做以下(最好是後$_SESSION['user_role']=$role;):

$_SESSION["firstname"] = $first; 
$_SESSION["lastname"] = $last; 

在這之後,你可以不管你想要echo一級和姓氏(這取決於你希望它是放...)。如果你想讓它出現在admin.php的的頂部,例如,你可以簡單地$dom = new DOMDocument();之前把這個:

echo "Hello " . $_SESSION["firstname"] . " " . $_SESSION["lastname"] . "!"; 

如果你困惑在哪裏放東西,然後嘗試重新閱讀給出說明。我的大部分示例都只是要替換的東西(在這種情況下,您只需要找到相應的代碼),如果不是這樣,我試圖重定向您。雖然認識到像這些事情是非常重要的知道沒有得到你的手中的代碼,所以我建議你嘗試理解。

+0

謝謝這麼多@max!我會再次嘗試這個時候,我再次看着荷蘭vs巴西利!我總是明白它是如何工作的!如果出現問題,請將它放在這裏,但現在謝謝分配! –

+0

它的工作原理:)但你有任何想法,如果有可能將回聲放在H1的值在domdocument? $ oDiv = $ dom-> getElementById('ttWelcomeText'); $ _SESSION [「lastname」]。「!」;'); $ _HESS1 = $ oDiv-> appendChild($ oH1); 然後它只是顯示回顯純文本@Max –

+1

@KingMike很高興聽到它的作品(也,如果是這樣,你可以接受答案,以節省一些其他人的時間)。對於其他問題,請嘗試:'$ oH = $ dom-> createElement('h1'); $ oGreeting = $ dom-> createTextNode(「Hello」。$ _SESSION [「firstname」]。「」。$ _SESSION [「lastname」]。「!」); $ oH-> appendChild($ oGreeting);',然後將它附加到你想要的元素上(當然,你應該在這些語句之間使用換行符,我不能在註釋中這樣做)。 – Max