2

我想使用 mysql 查询的结果来设置会话变量,但是目前我正在努力设置它。

我的代码是:

<?php

ob_start("ob_gzhandler");

?>
<?php 
// Include required MySQL configuration file and functions 
require_once('config.inc.php'); 
require_once('functions.inc.php'); 

// Start session 
session_start(); 

// Check if user is already logged in 
if ($_SESSION['logged_in'] == true) { 
          // If user is already logged in, redirect to main page 
          redirect('../index.php'); 
} else { 
          // Make sure that user submitted a username/password and username only consists of alphanumeric chars 
          if ( (!isset($_POST['username'])) || (!isset($_POST['password'])) OR 
               (!ctype_alnum($_POST['username'])) ) { 
                        redirect('../login.php'); 
          } 

          // Connect to database 
          $mysqli = @new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
// Check connection 
          if (mysqli_connect_errno()) { 
                        printf("Unable to connect to database: %s", mysqli_connect_error()); 
                        exit(); 
          } 

          // Escape any unsafe characters before querying database 
          $username = $mysqli->real_escape_string($_POST['username']); 
          $password = $mysqli->real_escape_string($_POST['password']); 

          // Construct SQL statement for query & execute 
          $sql              = "SELECT * FROM users WHERE username = '" . $username . "' AND password = '" . md5($password) . "'"; 
          $result = $mysqli->query($sql); 

// If one row is returned, username and password are valid 
          if (is_object($result) && $result->num_rows == 1) { 
                        // Set session variable for login status to true 

                        $_SESSION['auth_lvl'] = $Auth_lvl;
                        $_SESSION['logged_in'] = true;


                        redirect('../index.php'); 
          } else { 
                        // If number of rows returned is not one, redirect back to login screen 
                        redirect('../login.php'); 
          } 
} 
?>

然后我正在测试会话变量:

<?php 
session_start(); 
echo "Login Status is:".$_SESSION['logged_in'];
echo "<br/>";
echo "Auth status is level:".$_SESSION['auth_lvl'];
?> 

在我的测试页面上,登录的会话可以正常显示正确的信息,但是 auth lvl 变量什么也不显示。

我只能假设我没有正确调用我首先设置变量的信息。

任何帮助,将不胜感激。

艾伦。

我注意到并且我一直在尝试的建议是,如果我设置一个定义而不是尝试从数据库中检索一个值,那么该值将返回到我的测试页面上。IE

$_SESSION['auth_lvl'] = 'test';

这告诉我这是我从数据库中提取数据并尝试将其设置为 $_SESSION['auth_lvl'] 的方式导致了问题。

4

3 回答 3

2

发现了问题。

代码如下:

$result = $mysqli->query($sql); 

// If one row is returned, username and password are valid 
if (is_object($result) && $result->num_rows == 1) { 

// ADD THIS SET OF LINES
$data = mysql_fetch_assoc( $result );

// Replace auth_lvl with the name of your database column name
$Auth_lvl = $data['Auth_lvl'];


// Set session variable for login status to true 
$_SESSION['auth_lvl'] = $Auth_lvl;
$_SESSION['logged_in'] = true;

因为我在这段代码上使用了 mysqli,所以我没有注意到在 //ADD THIS SET OF LINES 代码中缺少“i”。当我将代码更改为:

$data = mysqli_fetch_assoc( $result );

一切都在生活中燃烧。

谢谢你们的帮助。

于 2012-04-21T09:00:13.823 回答
1

我看不到您为 $Auth_lvl 分配了值的任何地方,所以当您这样做时:

$_SESSION['auth_lvl'] = $Auth_lvl;

它可能被分配为null。

于 2012-04-19T14:54:15.630 回答
0

我没有看到你在哪里设置 $Auth_lvl。在检查结果和行之后,您将直接针对空变量设置会话变量。

      if (is_object($result) && $result->num_rows == 1) { 
                    // ADD THIS SET OF LINES
                    $data = mysql_fetch_assoc( $result );

                    // Replace auth_lvl with the name of your database column name
                    $Auth_lvl = $data['auth_lvl']'

                    // Set session variable for login status to true 

                    $_SESSION['auth_lvl'] = $Auth_lvl;
                    $_SESSION['logged_in'] = true;


                    redirect('../index.php'); 

然后使用您的 logged_in 会话变量,将其设置为布尔值 true,然后尝试将其作为普通文本回显。

if ( $_SESSION['logged_in'] ) { echo "Login status is: True"; }

我希望这会有所帮助。

-担

于 2012-04-19T14:54:02.160 回答