我有一个简单的数据库表"帐户",有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/');
?>
echo $_SESSION['id']没有输出。我试着回显$id[' id ']本身,它也不工作。
在我的index1.php页面上,我确实设法用相同的代码位检索信息,除了$result不使用WHERE和and子句的选择语句。
实际上是获取前两行(每次调用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注入非常开放。仔细阅读准备好的语句来防止这种情况,或者手动清理变量(不建议这么做!)。
似乎您正在两次获取数据:一次在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'];
}