我正在上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) {
}
}
}
}
答案 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!";
}
}
}
然后在调用它时将这些参数值传递给函数。