通过类进行PHP用户验证

时间:2017-03-12 07:24:42

标签: php validation class object login

我正在上PHP课,我们正在学习对象类。我被告知要创建一个名为' LoginBox'的对象类。这将验证用户并将其重定向到新页面,具体取决于他们的信息是否正确。我的问题是我们还没有研究像MYSQL这样的东西,而这正是大多数人似乎用来解决这些问题的原因。我被告知我可以使用静态用户名和密码来解决这个特定问题,因为我们还没有研究数据库。

我的代码如下。当然,我显然不确定如何解决这个问题,而且这段代码还远未完成,可能还没有保存,但这至少可以让你知道我尝试了什么。如果有人能指出我正确的方向,我会非常感谢你的帮助,因为我一直试图弄清楚这几个小时没有成功。我为之后的代码乱七八糟地道歉。

class LoginBox {

    public $userName = "user123";
    public $password = "pass123";

    public $var1;
    public $var2;


    public function makeTable() {
        echo '<form action="loggedin.php" method="post">
             Name: <input type="text" name="username"><br>
             E-mail: <input type="text" name="password"><br>
             <input type="submit">
             </form>';
    }

    public function __construct() {
        $this->var1=isset($_POST['username']) ? $_POST['username'] : null;
        $this->var2=isset($_POST['password']) ? $_POST['password'] : null;
    }

    public function SuccessRedirect() {
        if ($var1 = $userName) {
            if ($var2 = $password) {
                echo "Welcome back!";
            }
        }
    }

    public function FailRedirect() {
        if ($var <> $userName) {
            if ($var2 <> $password) {

            }
        }
    }

}

1 个答案:

答案 0 :(得分:1)

你的问题在这里:

if ($var1 = $userName) {
//        ^
    if ($var2 = $password) {
//            ^
        echo "Welcome back!";
    }
}

您将$username值分配给$var1,而不是在它们之间进行比较 - $password$var2 相同 -

要解决此问题,您需要使用comparison operators代替Assignment Operators,如下所示:

// check -not assign- if $var1 value is equal to $userName value
if ($var1 == $userName) {
    // check -not assign- if $var2 value is equal to $password value
    if ($var2 == $password) {
        echo "Welcome back!";
    }
}

更新

感谢@DzmitryKushnarou的通知。

另外,您需要查看Logical Operators以确定用户名or / and密码是否正确。

例如:

if ($var <> $userName || $var2 <> $password) {

}

另一个重要的注意事项,感谢@Shan

根据oop性质和variables scopes,您只能使用$this对象调用函数内的任何变量,或者将其作为参数传递给函数。

以此为例:FailRedirect方法相同

public function SuccessRedirect() {
    if ($this->var1 == $this->userName) {
        if ($this->var2 == $this->password) {
            echo "Welcome back!";
        }
    }
}

或将此参数传递给函数,如下所示:

public function SuccessRedirect($var1, $userName, $var2, $password) {
    if ($var1 == $userName) {
        if ($var2 == $password) {
            echo "Welcome back!";
        }
    }
}

然后在调用它时将这些参数值传递给函数。