-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

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

これがお役に立てば幸いです。

于 2012-08-16T16:34:00.840 に答える
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 に答える