【发布时间】:2021-06-05 00:26:30
【问题描述】:
我有一个登录页面,当用户登录时,它会使用从 mySQL 数据库中获取的该用户的 id 启动会话。
$_SESSION['logged_in'] = $db_id;
在用户的个人资料页面上,可以选择更新他们的个人信息。此页面的 href 使用传递到 url 的用户名的 GET 参数
然后在配置文件编辑页面上完成数据库获取,以确保 GET url 参数 username 返回具有该用户名的人的用户 ID。
isset($_GET['username']) ? $username = $_GET['username'] : header("Location: index.php");
$stmt = $connection->prepare("SELECT * FROM users WHERE username=:username");
$stmt->execute([
':username' => $username
]);
if ($stmt->rowCount() !== 0 ) {
$row = $stmt->fetch();
} else {
header("Location: index.php");
}
$db_id = htmlspecialchars($row['id']);
然后进行检查以确保 $_SESSION 值与 $db_id 值匹配。这样做是为了防止有人在 url 中输入不同的用户名,以便他们可以更改该人的详细信息。
// EXIT IF NOT LOGGED IN USER
if ($db_id != $_SESSION['logged_in'] ) { header("Location: index.php"); exit; }
上述代码的最后一部分有效,但是当我使用 !== 表示“相同”而不是 != 表示等于时,代码会失败吗?
我已经使用 gettype() 检查了这两个值:
echo gettype($_SESSION['logged_in']);
echo gettype($db_id);
两者都返回为“整数”。
当!== 是相同的数值并且两个值都显示为整数数据类型时,为什么检查会失败,而!= 则不会?
【问题讨论】:
-
这能回答你的问题吗? Not equal to != and !== in PHP
标签: php types integer comparison-operators