我在尝试根据 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/