【问题标题】:PHP user validation through class通过类进行 PHP 用户验证
【发布时间】:2017-03-12 07:24:41
【问题描述】:

我正在上一门 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) {

            }
        }
    }

}

【问题讨论】:

  • 请参阅stackoverflow.com/questions/768431/… 了解如何进行重定向。您需要知道重定向的位置,也许为它创建一个变量(或者可能是构造函数中的参数?)。我要做的一个改变:我将删除检查“FailRedirect”和“SuccessRedirect”中的条件(顺便说一句,FailRedirect 上的检查不正确),并将代码留在不成功/成功的尝试中。相反,我会添加一个类似“doAction”的函数,它会检查条件并根据该条件调用 SuccessRedirect 或 FailRedirect。

标签: php validation class object login


【解决方案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!";
        }
    }
}

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

【讨论】:

  • 好收获!我没注意到。 FailRedirect 也有一个问题:它只有在两个输入都无效时才有效,因此只有一个有效的情况不予处理。
  • 以上代码会显示未定义变量通知,需要提供$this->var1, & $this->userName等
  • @shan good catch ;),我没有为此复制整个函数。
  • @hassan 我理解,但是 OP 指定他/她正在学习 OOP,所以你必须以更好的方式来做。以便他/她能很好地理解;)
  • @DzmitryKushnarou 你需要结合那里的 if 语句,if ($var &lt;&gt; $userName || $var2 &lt;&gt; $password) .... 来检查用户名或密码是否错误
猜你喜欢
  • 2014-01-25
  • 2019-09-18
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2012-11-23
  • 2017-07-03
  • 1970-01-01
相关资源
最近更新 更多