我正在使用PHP构建一个登录类,但是当我将它们传递给类方法时使用的变量是空的,即使它们不应该.
我尝试只返回$username变量,但它仍然是空的,但如果我不使用类返回它,我可以看到它被正确分配.
我正在使用多个其他类以及正确分配变量的方法.
我不知道自己是否瞎了眼,错过了一些显而易见的东西,或者是否还有其他因素造成的.
class Auth
{
private $mysqli;
public function __construct(mysqli $mysqli)
{
$this->mysqli = $mysqli;
}
public function login($username, $password) //These variables are empty, even when they shouldn't be
{
$return['error'] = true;
$uid = $this->getUserId(strtolower($username)); //Returns false because $username variable is empty
if (!$uid) {
$return['message'] = 'No such user.'; //Output
return $return;
}
$user = $this->getUser($uid);
if (!password_verify($password, $user['password'])) {
$return['message'] = 'Password incorrect';
return $return;
}
$return['error'] = false;
$return['message'] = 'Logged in';
return $return;
}
private function getUserId($username)
{
$stmt = $this->mysqli->prepare("SELECT id FROM users WHERE username = ?");
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id);
if ($stmt->num_rows < 1) {
return false;
}
$stmt->fetch();
return $id;
}
private function getUser($uid)
{
$stmt = $this->mysqli->prepare("SELECT username, password, email FROM users WHERE id = ?");
$stmt->bind_param('s', $uid);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($username, $password, $email);
if ($stmt->num_rows < 1) {
return false;
}
$stmt->fetch();
$return['uid'] = $uid;
$return['username'] = $username;
$return['password'] = $password;
$return['email'] = $email;
return $return;
}
}
表单分配发送的变量.
Username
Password
Log in
if (isset($_POST['username'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$auth = new Auth($mysqli);
$auth->login($username, $password);
if ($auth->login()['error']) {
echo 'error:' . $auth->login()['message'];
} else {
echo 'success:' . $auth->login()['message'];
}
}
编辑:
如果我在类方法中分配变量,则代码可以工作:
public function login($username = 'user', $password = 'pass')
但如果我这样做,它将无法工作:
$username = 'User';
$password = 'pass';
$auth = new Auth($mysqli);
$auth->login($username, $password);
另外,如果我使用$auth-> login()之外的$_POST值,则会将它们分配,以便在将它们传递给类时它们不为空…