0

我有一个简单的数据库表“帐户”,其中包含 3 个条目:“用户”、“通行证”和“ID”。ID 为整数。

我正在尝试从表中检索 ID 并将其存储到 $_SESSION['id'] 中,但我没有运气。

这是代码:

session_start();  

// Checks to see if the input account is valid
$result = mysqli_query($con,"SELECT * FROM accounts 
 WHERE user='$_POST[user]'
 AND pass='$_POST[pass]'");

//Check to see if account exists
if(!mysqli_fetch_array($result))
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $id = mysqli_fetch_array($result);
    $_SESSION['id'] = $id['ID'];
    echo $_SESSION['id'];
  }

 //header('Location: index1.php/');

?>

回声 $_SESSION['id'] 没有任何内容。我试图回显 $id['ID'] 本身,但它也不起作用。

在我的 index1.php 页面上,我确实设法用相同的代码检索信息,除了 $result 不使用 select 语句的 WHERE 和 AND 子句。

4

2 回答 2

1

似乎您正在获取数据两次:一次在if语句中,一次在else. 考虑使用这个:

//Check to see if account exists
if($id!=mysqli_fetch_array($result))
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $_SESSION['id'] = $id['ID'];
    echo $_SESSION['id'];
  }

或这个:

//Check to see if account exists
if(!$result)
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $id = mysqli_fetch_array($result);
    $_SESSION['id'] = $id['ID'];
    echo $_SESSION['id'];
  }
于 2013-04-23T20:32:09.010 回答
1

您实际上是在获取前两行(每次调用mysqli_fetch_array()都会为您获取一行结果),这可能不是您想要的。只需获取一次并重用结果:

// ...

//Check to see if account exists
$row = mysqli_fetch_array($result);
if(!$row)
  {
    $_SESSION['loggedin'] = false;
  }
else
  {
    $_SESSION['loggedin'] = true;
    $_SESSION['user'] = $_POST['user'];
    $_SESSION['id'] = $row['ID'];
    echo $_SESSION['id'];
  }
// ...

正如评论中提到的,您的代码对 SQL 注入是开放的。阅读准备好的语句以防止这种情况或手动清理变量(不推荐!)。

于 2013-04-23T20:32:39.583 回答