【问题标题】:PHP Object Class User ValidationPHP 对象类用户验证
【发布时间】:2017-03-13 00:51:17
【问题描述】:

我正在上一门 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;
        }
    }
}

【问题讨论】:

    标签: php validation class object


    【解决方案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-&gt;$varname 而不是$this-&gt;varname

    变量应该在你的类之上声明。

    【讨论】:

    • 非常感谢!它现在工作。我一定要小心$this。我仍然不习惯在课程中使用它,但感谢您指出。
    • 当然。此外,如果您不在类本身之外使用 var,则应将其声明为 private $var 而不是 public $var
    【解决方案2】:

    只是想指出一些事情。

    1. 您使用了无效的“不等于”,在 PHP 中,它应该是 != 而不是 &lt;&gt;

    2. 应该是$this-&gt;var 而不是$this-&gt;$var

    3. 既然您正在学习创建和使用面向对象的类,那么您一定听说过“封装”的概念。如果您将类中的所有内容声明为公开,则任何人都可以从类外访问它。它应该被声明为私有的。当然不是 $usernme 和 $password。只需尝试echo (new LoginBox)-&gt;password 看看自己。

    4. 一般来说,类处理演示文稿(即直接回显数据)不是一个好习惯,它应该在您的 action() 方法上返回数据而不是。然后调用的程序可以像echo class-&gt;action();$status=class-&gt;action() 那样处理状态的显示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 2014-08-29
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2019-05-16
      相关资源
      最近更新 更多