首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:登录系统,查询第二个表?

PHP:登录系统,查询第二个表?
EN

Stack Overflow用户
提问于 2018-05-13 19:24:06
回答 2查看 61关注 0票数 0

我有一个非常基本的PHP登录系统,我现在正在修改一个产品。用户能够使用用户名/密码进行注册,并且该信息被存储在数据库中。但是,我有一个名为"act_codes“的单独表,其中有一个名为"act”的行。我想把激活码存储在那个表中。例如,我在动作行中有"Code1“、"Code2”和"Code3“。用户将使用他们的用户名和密码登录,但他们还需要输入通过我的电子商务平台生成的激活码并通过电子邮件发送给他们。

到目前为止,我已经有了这个验证用户名/密码的方法,它工作得很好:

代码语言:javascript
复制
    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);
}

我似乎想不出如何修改这段代码,使其也包含来自第二个表的激活码的验证。有谁能碰巧帮我一下吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2018-05-13 19:37:33

以下是一些要点:

  • 作为侧重点:将session_start()放在script
  • 的顶部,并在header("Location:...);
  • 后面紧跟一条die语句。这两行的顺序是错误的吗?

mysqli_stmt_bind_param($stmt,"s",$param_username);$param_username = $username;

应该先设置它们,然后再进行绑定。

回答你的问题

您似乎想要一个这样的 JOIN

代码语言:javascript
复制
 SELECT users.username, users.password act.var_code 
 FROM users 
 LEFT JOIN act ON users.userid = act.userid
 WHERE username = ?

这是一个粗略的结果,因为我看不到您的表结构,但请随意阅读类似的other Stack Overflow questions

您使用的 of MySQL join完全由您决定。我只是简单地以LFET JOIN为例。

由于还被d3t0x in their answer引用,因此还需要绑定由MySQL返回的附加数据。

票数 2
EN

Stack Overflow用户

发布于 2018-05-13 19:43:51

为什么不使用内部连接,这将意味着您可以继续使用一个查询:

代码语言:javascript
复制
$sql1 ="SELECT users.username, users.password, codes.code FROM users INNER JOIN codes ON users.username = codes.username";

您还需要将返回的代码绑定到一个变量,以便将其与会话中的代码进行比较。

类似于:

代码语言:javascript
复制
mysqli_stmt_bind_result($username, $hashed_password, $code);

这里假设您的表结构是:

用户表=用户名,密码代码表=用户名,代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50315589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档