带有帐户激活检查的 PHP 登录页面 [重复]

Posted

技术标签:

【中文标题】带有帐户激活检查的 PHP 登录页面 [重复]【英文标题】:PHP login page with account activation check [duplicate] 【发布时间】:2016-03-02 06:10:56 【问题描述】:

我正在尝试编写一个登录页面,该页面只有在用户激活帐户时才会登录。如果他们还没有激活,他们应该被重定向到激活页面。我不明白为什么我的脚本不起作用,它只是显示“需要用户名”错误消息。我认为我的 if 语句可能是错误的? user.php 是成功登录后应该访问的用户配置文件 activation.php 是他们激活帐户的地方。

    <body>
<?php

if ($_POST['submit'])
 $getuser=$_POST['uname'];
 $getpass=$_POST['pword'];

if($getuser)
    if($getpass)
            require("./mysql.php");
            $query=mysqli_query($conn,"SELECT * FROM userdet WHERE username='$getuser'&& password='$getpass'");
            $numrows = mysqli_num_rows($query);
            if($numrows==1)
                $row =mysqli_fetch_assoc($query);
                $dbactive=$row['status'];
                if ($dbactive==1)
                    $query=mysqli_query($conn,"SELECT * FROM userdet WHERE username='$getuser'&& password='$getpass' && status='1'");
                    $_SESSION['username']=$getuser;
                    header("Location:user.php");
                
                else
                    //$errormsg = "Your account has not been activated";
                    header("Location:Activation.php")

            
            else
                $errormsg="Username not found";
            mysqli_close($conn);
        
        else
            $errormsg="Password is required";
               
    else
        $errormsg="Username is required";

else 

    $errormsg="";
echo "<form action='./login.php' method='post' >

<table>
<tr>
    <td> </td>
    <td> $errormsg</td>
</tr>
<tr>
    <td> Username:* </td>
    <td> <input type='text' id='uname' name='username'  value='$getuser' /></td>
</tr>
<tr> 
    <td> Password:* </td>
    <td><input type='password' name='pword' id='code'  value='$getpass' /></td>
<tr> 
    <td></td>
    <td><input type='submit' name='submit' value='Log in' /></td>
</tr>
</tr>
</table>
</form>";


?>
</body>

【问题讨论】:

似乎if($getpass) 条件返回false,因此显示“需要用户名”。提交登录表单后,您可以转储 $_POST 变量以查看其中的内容吗?在if ($_POST['submit']) 线下方使用此var_dump($_POST); 你的页面没有session_start();,你需要把它放在你的页面顶部 我在页面顶部添加了以下内容。就在我的html之上,它在哪里有区别吗? 【参考方案1】:

您正在访问的内容有错误。当您发布表单时,值参考是 name 而不是 id

 $getuser=$_POST['uname'];

应该是

$getuser=$_POST['username'];

正如您在此处看到的name='username',您还可以将id 定义为同名以避免混淆。

<input type='text' id='username' name='username'  value='$getuser' />

【讨论】:

谢谢沙门!这解决了问题,我错过了这样一个细节:)

以上是关于带有帐户激活检查的 PHP 登录页面 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查用户是不是激活了他/她的帐户的最有效方法?

PHP 帐户激活问题

PHP会话系统脚本重新加载页面没有消息[重复]

在 Swift 中重新加载/更新视图

带有沙盒帐户的PHP项目中的PayPal集成

当用户使用其他帐户登录时,如何防止激活应用内订阅?