php - 根据 $_SESSION UserLevel 显示不同的内容

标签 php mysql session

我在尝试根据 UserLevel 显示不同的菜单选项时遇到问题。我有一个带有用户表的 mysql 数据库。用户表包含一个 UserLevel,它将被设置为 0 或 1。但由于某种原因,我的 php 无法正常工作。事实上,当我将 php 添加到菜单时,它不会在菜单下方的网站上显示任何内容。任何建议将不胜感激。

启动 session 的代码

<?php  
if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username']))  
{  

 ?>

<?php include "mainNav.php"; ?>  


<center>

    <h2> Campaign Updates</h2>

</center>

<div id="campaignPostWrap">
<div id="campaignScrollBox">

<?php
$con=mysqli_connect("localhost","dorians","ds2953!b67P$","aldentec");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM campaigns ORDER BY postDate desc");

while($row = mysqli_fetch_array($result))
  {
  echo "<div id='campaignPostContainer'>";
  echo "<ul class='campaignPostBox'>";
  echo "<p class='postInfo'>";
  echo "Posted on:";
  echo "<li>" . $row['postDate'] . "</li>";
  echo "</p>";
  echo "<p class='postInfo'>";
  echo "Posted by:";
  echo "<li>" . $row['postName'] . "</li>";
  echo "</p>";
  echo "<li class='postEntry'>" . $row['postEntry'] . "</li>";
  echo "</ul>";
  echo "</div>";
  echo "<hr>";
  }


mysqli_close($con);
?>

</div>
<?php include "campaignPost.php"; ?>
</div>


<?php include "chat.php"; ?>  

<?php
}  
elseif(!empty($_POST['username']) && !empty($_POST['password']))  
{
$username = mysql_real_escape_string($_POST['username']);  
$password = md5(mysql_real_escape_string($_POST['password']));     

    $checklogin = mysql_query("SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'");  

    if(mysql_num_rows($checklogin) == 1)  
    {  
        $row = mysql_fetch_array($checklogin);  
        $email = $row['EmailAddress'];  
        $userlevel = $row['UserLevel'];

        $_SESSION['Username'] = $username;  
        $_SESSION['EmailAddress'] = $email;  
        $_SESSION['LoggedIn'] = 1;
        $_SESSION['UserLevel'] = $userlevel;  

        echo "<h1>Success</h1>";  
        echo "<p>We are now redirecting you to the member area. If you are not automatically redirected <a href='index.php'>Click here</a></p>";  
        header( "refresh:10;url=index.php" );  
    }  
else  
    {  
        echo "<h1>Error</h1>";  
        echo "<p>Sorry, your account could not be found. Please <a href=\"index.php\">click here to try again</a>.</p>";  
    }  
}  
else  
{  
    ?>  

无效的菜单代码

<?php session_start(); ?>

<?php

$userlevel = $_SESSION['UserLevel'];

if($userlevel == 0) {
    echo "<ul class="mainNav">
        <a href="characterRoll.php"><li> Create Character</li></a>
        <a href="questCreate.php"><li> Create Quest</li></a>
        <a href="characterView.php"><li> View Characters</li></a>
        <a href="questList.php"><li> View Quests</li></a>
        <a href="booksView.php"><li> Book List</li></a>
    </ul>";

} elseif($userlevel == 1) {

    echo "<a href="dmTools.php"><li> DM Tools</li></a>";
}
?>

<?php include "greeter.php"; ?>

最佳答案

你的引述无疑是这里的问题:

if($userlevel == 0) {
    echo "<ul class="mainNav">
        <a href="characterRoll.php"><li> Create Character</li></a>
        <a href="questCreate.php"><li> Create Quest</li></a>
        <a href="characterView.php"><li> View Characters</li></a>
        <a href="questList.php"><li> View Quests</li></a>
        <a href="booksView.php"><li> Book List</li></a>
    </ul>";

} elseif($userlevel == 1) {

    echo "<a href="dmTools.php"><li> DM Tools</li></a>";
}

请注意,上面突出显示的语法显示了字符串中的问题。看到它到达 mainNav 时如何变黑了吗?那是因为 mainNav 不再是字符串的一部分。这是一件坏事。

查看您的 echo 的第一行:

echo "<ul class="mainNav">

您打开一个引号,然后在 class=" 处关闭它。现在,它正在尝试将 mainNav 评估为常量或其他语言结构。最重要的是,它不知道如何处理 mainNav,因为您没有提供任何类型的运算符。

相反,你应该这样做:

if($userlevel == 0) {
    echo '<ul class="mainNav">
        <a href="characterRoll.php"><li> Create Character</li></a>
        <a href="questCreate.php"><li> Create Quest</li></a>
        <a href="characterView.php"><li> View Characters</li></a>
        <a href="questList.php"><li> View Quests</li></a>
        <a href="booksView.php"><li> Book List</li></a>
    </ul>';

} elseif($userlevel == 1) {

    echo '<a href="dmTools.php"><li> DM Tools</li></a>';
}

或者,您可以转义每个有非字符串终止引号的位置,例如 \"

另一种选择是使用 Heredoc语法。

关于php - 根据 $_SESSION UserLevel 显示不同的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485935/

相关文章:

mysql - 对于像 Wufoo 这样的应用程序,使用关系数据库还是基于文档的数据库更好?

CodeIgniter session 类在Chrome中不起作用

php - 仅匹配数字/波斯字符和拉丁字符

php - 数据库设计 - 建议

mysql - '0000-00-00 00 :00:00' as an invalid timestamp

mysql - 如何从存储过程中的单个选择查询设置多个输出变量值

php - 将 PHP 重定向到登录页面,而不是强制登录

java - ADF session 超时自动重定向而不弹出对话框

php - 照片上传和显示 PHP, MySQL

php - CakePHP 外壳单元测试