php - PHP:登录系统,查询第二张表?
问题描述
我有一个非常基本的 PHP 登录系统,我现在正在为产品进行更改。用户可以使用用户名/密码进行注册,并将信息存储到数据库中。但是,我有一个名为“act_codes”的单独表,其中有一个名为“act”的行。我想在该表中存储激活码。例如,我将在行为行中有“Code1”、“Code2”和“Code3”。用户将使用他们的用户名和密码登录,但他们还需要输入通过我的电子商务平台生成并通过电子邮件发送给他们的激活码。
到目前为止,我有这个用于验证用户名/密码,效果很好:
if(empty($username_err) && empty($password_err) && empty($code_err)){
$sql = "SELECT username, password FROM users WHERE username = ?";
if($stmt = mysqli_prepare($link, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;
if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION['username'] = $username;
$_SESSION['code'] = $code;
header("location: welcome.php");
} else{
$password_err = 'The password you entered was not valid.';
}
}
} else{
$username_err = 'No account found with that username.';
}
}
}
mysqli_stmt_close($stmt);
}
我似乎无法弄清楚如何更改此代码以包括对第二个表中激活码的验证。有人可以偶然帮助我吗?非常感谢!
解决方案
几点:
- 附带一点:放在
session_start()
脚本的顶部 - 并在你之后立即包含一个
die
声明header("Location:...);
这两行的顺序是否错误?
mysqli_stmt_bind_param($stmt, "s", $param_username); $param_username = $username;
它们应该首先设置然后绑定。
回答您的问题
您似乎想要一个MySQL JOIN
,例如:
SELECT users.username, users.password act.var_code
FROM users
LEFT JOIN act ON users.userid = act.userid
WHERE username = ?
这是一个粗略的结果,因为我看不到您的表格结构,但请随意阅读其他类似的 Stack Overflow 问题。
您使用哪种类型的 MySQL 连接完全取决于您。我LFET JOIN
只是用了一个例子。
正如d3t0x
他们在回答中所引用的那样,您还需要绑定 MySQL 返回的其他数据。
推荐阅读
- python - 垂直连接两个重叠的数据框
- r - 使用 Plotly 使饼图居中
- javascript - Vue 3 - 带有全局组件的“无法解析组件”
- python - 将图像 (JPEG) 转换为 PDF
- ipa - freeipa 从 v3 迁移到 v4
- python - 在 Python 中迭代的最佳对象类型
- javascript - 具有单个值的多个键名的 JSON 对象。我怎么读?
- google-app-engine - 将 webapp 连接到用户的 BigQuery 项目
- python - 为什么谷歌不推荐使用supervisord作为容器?在 kubernetes 中运行时,supervisord 是否能很好地处理 PID 1 问题?
- algorithm - 算法不是多项式递增