Mysql结果设置会话变量

时间:2012-04-19 14:43:11

标签: php mysql session-variables

我想使用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变量不显示任何内容。

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

任何帮助都将不胜感激。

艾伦。

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

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

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

3 个答案:

答案 0 :(得分: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,所以我没有注意到//添加了这段代码中的“i”缺失了。当我将代码更改为:

$data = mysqli_fetch_assoc( $result );

生命中的一切都被激发了。

感谢您的帮助。

答案 1 :(得分:1)

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

$_SESSION['auth_lvl'] = $Auth_lvl;

它可能被指定为null。

答案 2 :(得分: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"; }

我希望有所帮助。

-Dan