1

我正在努力做到这一点,这样我就可以将“员工面板”限制为“3”为“member_level”的用户,这样其他人就会被重定向到 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;

}
?>
4

4 回答 4

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-Block。

与您的问题无关,但您的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"); 
}
于 2012-10-30T08:40:22.287 回答
0

尝试这个 :

$R = mysql_fetch_assoc($query1);
$query2 = $R["member_level"]

但也许您应该检查您的查询是否返回至少 1 行。

于 2012-10-30T08:30:40.953 回答
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"); 

}
?>
于 2012-10-30T08:30:50.467 回答
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());检查查询中的错误。

于 2012-10-30T08:30:55.443 回答