重定向的用户级别问题

时间:2012-08-16 13:57:56

标签: php

  

可能重复:
  checklogin condition issue in php

我有这个简单的问题,

我有这段代码没有正常工作,有关语法的东西..你可以帮我解决一下吗?

我知道这可能听起来很愚蠢,但我正在努力理解!

谢谢!

<?php 
session_start();
require_once('db.php'); 
include('functions.php'); 
if (checkLogin('1 2')) {
    echo "hello ".$_SESSION['user_id']." You are now logged in."; 
} else if (checkLogin('3'))  {
echo "hey tst";
} else {}

?>


function checkLogin($levels)
    {
        if(!$_SESSION['logged_in'])
        {
            $access = FALSE;
        }
        else {
            $kt = split(' ', $levels);

            $query = mysql_query('SELECT Level_access FROM users WHERE ID = "'.mysql_real_escape_string($_SESSION['user_id']).'"');
            $row = mysql_fetch_assoc($query);

            $access = FALSE;

            while(list($key,$val)=each($kt))
            {
                if($val==$row['Level_access'])
                {//if the user level matches one of the allowed levels
                    $access = TRUE;
                }
            }
        }
        if($access==FALSE)
        {
            header("Location: login.php");
        }
        else {
        //do nothing: continue
        }

    }

CREATE TABLE `users` (
  `ID` int(11) NOT NULL auto_increment,
  `Username` varchar(255) NOT NULL,
  `Password` varchar(255) NOT NULL,
  `Temp_pass` varchar(55) default NULL,
  `Temp_pass_active` tinyint(1) NOT NULL default '0',
  `Email` varchar(255) NOT NULL,
  `Active` int(11) NOT NULL default '0',
  `Level_access` int(11) NOT NULL default '2',
  `Random_key` varchar(32) default NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Username` (`Username`),
  UNIQUE KEY `Email` (`Email`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

4 个答案:

答案 0 :(得分:0)

你的if statements需要围绕它们的括号:

if( checkLogin('1 2')) {
  ^                  ^

答案 1 :(得分:0)

试试这个

<?php 
session_start();
require_once('db.php'); 
include('functions.php'); 
if (checkLogin('1 2')) {
    echo "hello ".$_SESSION['user_id']." You are now logged in."; 
} else if (checkLogin('3'))  {
echo "hey tst";
} else {}

?>

答案 2 :(得分:0)

在浏览器中运行代码。你会收到一条错误信息。使用该错误消息找出错误。重复直到没有错误消息,程序按设计运行。

这就是我们在现实世界中调试事物的方式。

答案 3 :(得分:0)

你可以简化你的checkLogin()函数

function checkLogin($levels)
{

    $access = false;

    if (!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']) 
        return false;

  //use mysqli instead mysql
$con = new mysqli("localhost", "username", "password", "database");

$query = $con->query('SELECT Level_access FROM users WHERE ID = "'.$con->real_escape_string($_SESSION['user_id']).'"');
$row = $query->fetch_assoc();

$con->close();

    if (in_array($row['Level_access'], explode(" ", $levels))) $access = true;

    return $access;

}

此函数应返回true或false!

之后你的代码看起来像这样

session_start();
require_once('db.php'); 
include('functions.php'); 
if (checkLogin('1 2')) {
    echo "hello ".$_SESSION['user_id']." You are now logged in."; 
} else if (checkLogin('3'))  {
    echo "hey tst";
} else {
    header("Location: login.php");
}

希望这会对你有所帮助。