我的问题是我要查询从登录请求的行中获取id并将$ _SESSION名称设置为该行的id,但我不确定如何正确获取它,因为我的常用方法似乎不是工作
所以我试试..
if (isset($_POST['username']) && ($_POST['password'])) {
$username = trim($_POST['username']);
$username = strtolower($username);
$password = trim($_POST['password']);
$password= hash('sha256', $password);
$stmt = $dbh->prepare("SELECT `id` FROM `1_users` WHERE username=? AND password=? LIMIT 1");
$stmt->bindValue(1, $username, PDO::PARAM_STR);
$stmt->bindValue(2, $password, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->rowCount();
if ($row) {
// Match
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$_SESSION['user'] = $result['id'];
$_SESSION['logged_in'] = TRUE;
$_SESSION['ip'] = hash('sha1', "{$_SERVER['REMOTE_ADDR']}");
echo $result['id'];
//header ("location: staff.php");
}
不幸的是$result['id']
错误的是一个未完成的索引..
并且echo $result['id'];
没有输出任何内容。但是我知道行被发现所以我在尝试将该行的id变为变量时我做错了什么?
答案 0 :(得分:1)
所以fetchAll()
返回一个行数组(即使只有一行),它们本身就是一个列数组,所以你需要:
$_SESSION['user'] = $result[0]['id'];
或者如评论中所述,使用fetch()
:
$result = $stmt->fetch(PDO::FETCH_ASSOC);
返回一行作为列数组,然后这将起作用:
$_SESSION['user'] = $result['id'];
答案 1 :(得分:1)
if (isset($_POST['username']) && $_POST['password']) {
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$password = hash('sha256', $password);
$stmt = $dbh->prepare("SELECT id FROM 1_users WHERE username=? AND password=?");
$stmt->execute([$username,$password]);
$id = $stmt->fetchColumn(); // <-- here you go
if ($id) {
$_SESSION['user'] = $id;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
header ("location: staff.php");
exit;
}
}