2014-07-12 152 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