2016-02-15 3 views
-1

У меня есть этот код, который проверяет наличие логина. Он отлично работает, но внезапно прекратил работать.

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; 
     } 
    } 

После проверки моего апачский журнал ошибок, я вижу эту ошибку:

PHP Fatal error: Cannot re-assign auto-global variable _POST 

Любые работы вокруг этого?

+2

ли вы * внезапно * обновление до новой версии PHP? :) –

+0

Как вы не копаете '$ email' или' $ password' из '$ _POST' Я не вижу, как эта функция могла когда-либо работать – RiggsFolly

ответ

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; 
     } 
    } 
+0

Возможно, вы захотите получить' $ password' из '$ _POST' за него также, прежде чем вы получите комментарий от него, сказав: «Нет, все еще не работает» – RiggsFolly

+0

спасибо за ваше предложение. Готово :) – Drudge

1

Это потому, что $_POST является суперглобальным. From Superglobals on PHP.net:

Since PHP 5.4, you cannot use a superglobal as the parameter to a function. This causes a fatal error:

function foo($_GET) { 
    // whatever 
} 

It's called "shadowing" a superglobal, and I don't know why people ever did it, but I've seen it out there. The easy fix is just to rename the variable $get in the function, assuming that name is unique.


Вы можете получить доступ к $_POST из функции:

function foo(){ 
    print_r($_POST); 
} 

Или вы можете передать $_POST на функцию следующим образом:

foo($_POST); 

function foo($post){ 
    print_r($post); 
} 
0

$_POST является суперглобальный переменной , Почему вы передаете его в параметр. Вы можете непосредственно использовать его в функцию, как это:

public function checkLogin() { 
    print_r($_POST); 
    //your rest of code 
} 
Смежные вопросы