PHP对象类用户验证

时间:2017-03-13 00:51:18

标签: php validation class object

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

我的问题是我不知道如何使用Object类将信息从一个页面传送到另一个页面。我觉得如果我能弄明白,我的班级会做我需要做的一切,但很难说清楚,因为这部分让我无法看到结果。正如你在我的代码中看到的那样,我尝试使用$ _Post,但现在重要的是我尝试的信息不会延续到新页面,它什么也没显示。有没有人对如何解决这个问题有任何建议?提前谢谢!

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 $SuccessRedirect = "Welcome back!";

    public $FailRedirect = "You have entered the incorrect information. Please return and try again.";

    public function action() {
        if ($this->$var1 <> $this->$userName || $this->$var2 <>$this->$password) {
            echo $failRedirect;
        }
        else {
            echo $SuccessRedirect;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我更正了你的剧本:

class LoginBox {

    public $userName = "user123";
    public $password = "pass123";
    public $var1;
    public $var2;
    public $SuccessRedirect = "Welcome back!";
    public $FailRedirect = "You have entered the incorrect information. Please return and try again.";

    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 action() {
        if ($this->userName && $this->password && $this->var1 == $this->userName && $this->var2 == $this->password) {
            echo $this->SuccessRedirect;
        } else {
            echo $this->FailRedirect;
        }
    }
}

$cl = new LoginBox();
$cl->makeTable();
$cl->action();

您应该比较您的版本和我的版本,以了解我所做的所有更改。 您的主要问题是您使用的是$this->$varname而不是$this->varname

变量应该在你的班级上声明。

答案 1 :(得分:1)

只想指出一些事情。

  1. 您在PHP中使用无效的“不相等”,它应该是!=而不是<>

  2. 应该是$this->var而不是$this->$var

  3. 由于您正在学习创建和使用面向对象的类,因此您必须听说过“封装”的概念。如果您将类中的所有内容声明为public,则任何人都可以从类外部访问它。它应该声明为私人。当然不是$ usernme和$ password。试着echo (new LoginBox)->password看看自己。

  4. 对于类来说,处理表示(即直接回显数据)通常不是一个好习惯,它应该在action()方法上返回数据。然后,调用的程序可以处理状态显示,如echo class->action();$status=class->action()

  5. 希望这将为您的学习提供一些良好的基础概念。