首页 > 解决方案 > 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);
}

我似乎无法弄清楚如何更改此代码以包括对第二个表中激活码的验证。有人可以偶然帮助我吗?非常感谢!

标签: phpmysql

解决方案


几点:

  • 附带一点:放在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 返回的其他数据。


推荐阅读