2015-12-23 2 views
0

я пытаюсь сделать страницу входа в систему с помощью PDO, но я получаю эту ошибку, я проверил аналогичные запросы об этой ошибке здесь, но они, кажется, отличаются от моихотладка Фатальная ошибка

Notice: Undefined переменная: пользователь в C: \ xampp \ htdocs \ soft \ index.php в строке 5

Неустранимая ошибка: вызов функции-члена is_loggedin() на null в C: \ xampp \ htdocs \ soft \ index.php on строка 5

что приводит к фатальной ошибке и как я могу это исправить, потому что, по-моему, код выглядит нормально. это мой Логин кодовую страницу

<?php 
require_once 'dbconfig.php'; 

if($user->is_loggedin()!="") 
{ 
    $user->redirect('home.php'); 
} 

if(isset($_POST['btn-login'])) 
{ 
    $uname = $_POST['txt_uname_email']; 
    $umail = $_POST['txt_uname_email']; 
    $upass = $_POST['txt_password']; 

    if($user->login($uname,$umail,$upass)) 
    { 
     $user->redirect('home.php'); 
    } 
    else 
    { 
     $error = "Wrong Details !"; 
    } 
} 
?> 

это функция Войти

public function is_loggedin() 
{ 
    global $db; 

    if(isset($_SESSION['user_session'])) 
    { 
     return true; 
    } 
} 

и это мой пользовательский класс

<?php 
class USER 
{ 
    private $db; 

    function __construct($DB_con) 
    { 
     $this->db = $DB_con; 
    } 

    public function register($fname,$lname,$uname,$umail,$upass) 
    { 
     try 
     { 
      $new_password = MD5($upass); 

      $stmt = $this->db->prepare("INSERT INTO users(user_name,user_email,user_pass) 
                 VALUES(:uname, :umail, :upass)"); 

      $stmt->bindparam(":uname", $uname); 
      $stmt->bindparam(":umail", $umail); 
      $stmt->bindparam(":upass", $new_password);           

      $stmt->execute(); 

      return $stmt; 
     } 
     catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     }    
    } 

    public function login($uname,$umail,$upass) 
    { 
     try 
     { 
      $stmt = $this->db->prepare("SELECT * FROM users WHERE user_name=:uname OR user_email=:umail LIMIT 1"); 
      $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 
      $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
      if($stmt->rowCount() > 0) 
      { 
       if($userRow['user_pass']==MD5($upass)) 
       { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 
     catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 
    } 

    public function is_loggedin() 
    { 
     global $db; 

     if(isset($_SESSION['user_session'])) 
     { 
      return true; 
     } 
    } 

    public function redirect($url) 
    { 
     header("Location: $url"); 
    } 

    public function logout() 
    { 
     session_destroy(); 
     unset($_SESSION['user_session']); 
     return true; 
    } 
} 
?> 

я просто новичок, и я хотел бы знать, что им делать неправильно, спасибо большое

+2

'$ user = new USER();'? –

+0

Да, это не похоже на то, что вы инициализируете '$ user' на что-нибудь –

+0

@ Дагон, когда я ставлю $ user = new USER(); наверху на моей странице страница входа в систему im получает другую ошибку Fatal error: Class 'USER' не найден в C: \ xampp \ htdocs \ soft \ index.php в строке 3 – bankias

ответ

0

проверка файла dbconfig.php убедитесь, что следующий код

include_once 'class.user.php'; 
$user = new USER($DB_con); 

я думаю, вот где нужно, чтобы объявить пользователя.

+0

, спасибо, что это действительно решило проблему – bankias

0

Вы еще не объявили, что такое пользователь.

Некоторые делают это, начав сессию и включить его в самом верху на следующих страницах, чтобы вы могли вызвать функцию, чтобы увидеть, если пользователь вошел в систему.

В любом случае я не вижу ничего связанный (т. е. включая файл), для объявления переменной $user.

+0

Я попытался поставить $ user = new USER(); Я получаю еще одну ошибку Fatal error: Class 'USER' не найден в C: \ xampp \ htdocs \ soft \ index.php в строке 3 – bankias

+0

Потому что вы не включили пользовательский класс – davejal

Смежные вопросы