为什么我的会话变量没有设置?

时间:2015-07-09 13:45:09

标签: php mysql forms

我最近在编写登录脚本时遇到了问题。看看我的代码:

<?php
if(isset($submit)){
    require 'db/connect.php';
    $sql = "SELECT id from users WHERE password='$password' AND email='$email'";
    $entered_user = mysql_query($sql);
    $num_rows = mysql_num_rows($entered_user);

    $errors = array();

    if( $num_rows != 1 )
    {
        $errors[] = '-Account does not exist ';
    }
    elseif( $num_rows == 1 )
    {
        session_start();
        while($row = mysql_fetch_array($entered_user)){
            $_SESSION['id'] = $row['id'];
            $_SESSION['email'] = $email;
            $_SESSION['user'] = $row['username'];
            $_SESSION['pass'] = $password;
            header('Location: profile.php');
            exit();
        }
    }
}   
?>

用户提交密码和电子邮件后,我尝试将以下内容存储在会话变量中:id,username,password和email。 但是由于某种原因,用户名不会在profile.php上存储和输出,在那里它们被重定向。这是我的profile.php代码:

<?php
session_start();
?>
<html>
<head>
  <title>Profile</title>
  <link href='css/main.css' rel='stylesheet' />
</head>
<body>
<div id='container'>
  <?php require 'include/header.php'; ?>

  <?= 'NJM ID # ==>'.$_SESSION['id'].'<br />'.'Username ==>'.$_SESSION['user'].'<br/>'.'Password ==>'.$_SESSION['pass'] ?>

  <?php require 'include/footer.php'; ?>
  </div>
</div>
</body>
</html> 

如果有人知道如何解决此问题,请提供帮助。我大约2个月前学过HTML,CSS,JS和PHP所以我是初学者:)

2 个答案:

答案 0 :(得分:1)

我对你的代码有一些评论,可能会解决你所有的问题。

  1. 应在执行任何其他代码之前启动会话。这样可以防止出现奇怪的问题。

  2. 检查会话是否尚未设置。

  3. 推荐的PHP版本&gt; = 5.4.0

    if ( session_status() == PHP_SESSION_NONE ) {
        session_start();
    }
    

    对于PHP的版本&lt; 5.4.0

    if (session_id() == '') {
        session_start();
    }
    
    1. 使用mysqli_*PDO进行查询。 mysql_*已被弃用且相当不安全。

    2. 您的查询未获取用户名

    3. 变化:

      $sql = "SELECT id
      from users
      WHERE password='$password'
      AND email='$email'";
      

      为:

      $sql = "SELECT
      id AS id,
      username AS username
      FROM users
      WHERE password='".$password."'
      AND email='".$email."'";
      

答案 1 :(得分:0)

更改此行

$sql = "SELECT id from users WHERE password='$password' AND email='$email'";

到这个

$sql = "SELECT id, username from users WHERE password='$password' AND email='$email'";

或者

$sql = "SELECT * from users WHERE password='$password' AND email='$email'";