-3

可能重复:
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

4 回答 4

0

您的if陈述需要括号括起来:

if( checkLogin('1 2')) {
  ^                  ^
于 2012-08-16T13:59:21.783 回答
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 {}

?>
于 2012-08-16T14:00:04.553 回答
0

在浏览器中运行代码。您将收到一条错误消息。使用该错误消息找出问题所在。重复直到您没有收到错误消息,并且程序按设计运行。

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

于 2012-08-16T14:10:50.217 回答
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;

}

这个函数应该返回真或假!

之后,您的代码可能如下所示

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");
}

希望这对您有所帮助。

于 2012-08-16T16:34:00.840 回答