我正在尝试这样做,所以我可以将“staff panel”限制为“member_level”位于“3”的用户,以便其他人被重定向到account_page.php,但我目前收到的错误只会出现1小时以前,这出现了,我没有改变它刚刚出现的任何东西。
这是职员小组的代码:
<?php
ob_start();
mysql_connect('localhost', 'u1908470_cms', 'BeingX1309X')or die("Error: ".mysqlerror());
mysql_select_db('u1908470_cms');
$query1 = mysql_query("SELECT 'member_level' FROM `users` WHERE `username` = '" . mysql_real_escape_string ($_SESSION['user']['username'])."'");
$query2 = mysql_result($query1,0,'member_level') or die(mysql_error());
switch ($query2)
{
case 3:
{
echo "<p>Now Logged into Staff Panel!</p>";
}
break;
case 2:
{
header("location: http://www.cookiedenied.com/account_page.php");
}
break;
case 1:
{
header("location: http://www.cookiedenied.com/account_page.php");
}
break;
}
?>
答案 0 :(得分:1)
正确转义字段和表格名称
而不是
SELECT 'member_level', ....
...请使用......
SELECT `member_level`, ....
验证您的查询。
重写你的代码:
$SQL = "SELECT `member_level`
FROM `users`
WHERE `username` = '"
. mysql_real_escape_string($_SESSION['user']['username'])
. "'";
$MyQ = mysql_query($SQL);
$MyR = mysql_result($MyQ,0,'member_level') or die(mysql_error());
...和var_dump($SQL);
查看您的陈述是否有效。使用另一个MySQL工具(Workbench,phpMyAdmin,SQLyog或其他)执行它时检查它,看它是否生成任何结果。也许$_SESSION
变量没有正确设置或类似的东西,你会发现这种方式。
请改用MySQLi或PDO。
从手册:
不鼓励使用mysql扩展。相反,MySQLi或 应该使用PDO_MySQL扩展名。
重新格式化switch
- 阻止。
与您的问题无关,但您的switch
- Block看起来过于复杂,无法轻松实现某些目标。试试这个:
switch ($query2) {
case 3:
echo "<p>Now Logged into Staff Panel!</p>";
break;
default:
header("location: http://www.cookiedenied.com/account_page.php");
}
答案 1 :(得分:0)
试试这个:
$R = mysql_fetch_assoc($query1);
$query2 = $R["member_level"]
但您可能应该检查您的查询至少返回1行。
答案 2 :(得分:0)
首先尝试避免mysql_query。这已经过时,养成了使用PDO的习惯。
在您的查询中,您使用引号包围了表名。删除引号并尝试。
更改代码。并替换为以下代码。
<?php
ob_start();
try {
$pdo = new PDO('mysql:host=localhost;dbname=u1908470_cms', 'u1908470_cms','BeingX1309X');
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$username = $_SESSION['user']['username'];
$statement = $pdo->prepare("select `member_level` from `users` where username = :username");
$statement->execute(array(':username' => $username));
$row = $statement->fetch();
$member_level = $row['member_level'];
switch ($member_level)
{
case 3: {
echo "<p>Now Logged into Staff Panel!</p>";
break;
}
default:{
header("location: http://www.cookiedenied.com/account_page.php");
break;
}
}
您实际上可以删除switch语句,只需输入if-else条件。
if($member_level == 3) {
echo "<p>Now Logged into Staff Panel!</p>";
}else{
header("location: http://www.cookiedenied.com/account_page.php");
}
?>
答案 3 :(得分:0)
为什么您的查询中'
周围table name
,可能会返回
$query1 = mysql_query("SELECT `member_level` FROM `users` WHERE `username` = '" . mysql_real_escape_string ($_SESSION['user']['username'])."'") or die(mysql_error());
使用or die(mysql_error());
检查查询中的错误。