php - 使用 isset() 检查值是否存储在数据库中
问题描述
如果用户不为内容付费(通过 Stripe),我想显示一个页面,因此如果他付费与否,则必须在 DB 中签入。如果他付款,我将字符串“ok”存储到状态中,如果他没有,它只是空白。
现在我不确定为什么以下代码不起作用:
<?php
if(!isset($_SESSION["username"])) {
?>
<a href="login.php">Login</a> to watch Satellite data.
<?php
$query = 'SELECT status
FROM users
WHERE username="'.$_SESSION["username"].'"';
$stmt = $conn->prepare($query);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$status = $row["status"];
if ($status !== "ok") {
$status_notpaid = true;
}
}
} elseif(isset($_SESSION["username"]) && isset($status_notpaid)) {
include("notpaid.php");
} else {
?>
<?php
$query = 'SELECT id
FROM users
WHERE username="'.$_SESSION["username"].'"';
$stmt = $conn->prepare($query);
$stmt->execute();
$result = $stmt->get_result();
?>
Hello <strong><?php echo $_SESSION["username"];?></strong> |
<?php
while ($row = $result->fetch_assoc()) {
echo $row["id"]; }
?>
我不确定为什么elseif(isset($_SESSION["username"]) && isset($status_notpaid)) { include("notpaid.php"); }不起作用。
解决方案
$_SESSION["username"]
如果登录成功,我假设登录脚本集。
放置 users 表会更有意义id
,因为我认为这是主键。如果你愿意,你也可以保持username
会话,这样可以节省你运行一些代码的时间。
<?php
if(!isset($_SESSION["userid"])) {
# user not logged in direct to login, and nothing else
echo '<a href="login.php">Login</a> to watch Satellite data.';
}
if (isset($_SESSION["userid"])) {
# then we are logged in
# So now we check if they paid
$query = 'SELECT status
FROM users
WHERE id=?';
$stmt = $conn->prepare($query);
$stmt->bind_param('i', $_SESSION["userid"])
$stmt->execute();
$result = $stmt->get_result();
# we had better only be getting one row as a resut of that query
# so a loop is totally unnecessary
$row = $result->fetch_assoc();
$status = $row["status"];
if ($status !== "ok") {
include("notpaid.php");
}
}
?>
Hello <strong><?php echo $_SESSION["username"];?></strong> | $_SESSION['userid']
推荐阅读
- griddb - 如何使用 matplotlib 为存储在 GridDB 容器中的推文数据绘制词云?
- docker - 在 Dockerfile 中更改 `/etc/passwd` 的权限
- python - 将 Glob 中的多个 CSV 与多索引连接起来
- javascript - HTML 和 Javascript 空表单验证不起作用
- airflow - DAG 在追赶时运行失败,但如果我清除它们 ro
- css - 带有 InputBase 的图标按钮
- python - 当日期范围在过滤器中时,如何抓取历史数据?
- laravel - 无法在 Laravel Vue Axios 中更新具有相同值的多行
- jpa - wildfly-preview-25.0.0.Final - Jakarta 'org.hibernate.ogm.jpa.HibernateOgmPersistence' 未找到
- microservices - 不共享数据库的微服务设计