我有这个检查登录的代码。它一直很好,但突然停止工作。
public function checkLogin($_POST) {
// fetching user by email
$stmt = $this->conn->prepare("SELECT password_hash FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->bind_result($password_hash);
$stmt->store_result();
if ($stmt->num_rows > 0) {
// Found user with the email
// Now verify the password
$stmt->fetch();
$stmt->close();
if (PassHash::check_password($password_hash, $password)) {
// User password is correct
return TRUE;
} else {
// user password is incorrect
return FALSE;
}
} else {
$stmt->close();
// user not existed with the email
return FALSE;
}
}
检查我的apache错误日志后,我看到了这个错误:
PHP Fatal error: Cannot re-assign auto-global variable _POST
围绕这个做什么工作?
答案 0 :(得分:3)
自PHP 5.4起,您不能使用superglobal作为函数的参数
$_POST
可全球访问。所以你不必转到你的职能部门。
这就是你的功能应该是这样的
public function checkLogin() {
$email = $_POST['email'];
$password = $_POST['password'];
// fetching user by email
$stmt = $this->conn->prepare("SELECT password_hash FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->bind_result($password_hash);
$stmt->store_result();
if ($stmt->num_rows > 0) {
// Found user with the email
// Now verify the password
$stmt->fetch();
$stmt->close();
if (PassHash::check_password($password_hash, $password)) {
// User password is correct
return TRUE;
} else {
// user password is incorrect
return FALSE;
}
} else {
$stmt->close();
// user not existed with the email
return FALSE;
}
}
答案 1 :(得分:1)
那是因为$_POST
是超全球的。 From Superglobals on PHP.net:
从PHP 5.4开始,您不能使用超全局作为函数的参数。这会导致致命错误:
function foo($_GET) { // whatever }
它被称为“影视”超级全球,我不知道为什么人们会这样做,但我已经在那里看到了它。简单的解决方法是在函数中重命名变量$ get,假设名称是唯一的。
您可以在函数中访问$_POST
:
function foo(){
print_r($_POST);
}
或者您可以将$_POST
传递给类似的函数:
foo($_POST);
function foo($post){
print_r($post);
}
答案 2 :(得分:0)
$_POST
是超全局变量。你为什么要在参数中传递它。您可以在以下函数中直接使用它:
public function checkLogin() {
print_r($_POST);
//your rest of code
}