2015-06-29 4 views
0

Я пытаюсь сделать мои собственные пользовательские CMS, я могу зарегистрировать пользователей и могут войти aswel, сейчас я пытаюсь сделать функцию для пользовательских ролей,PHP - UserRole - Функция - OOP

Файл: class.user .php

function getUserrole() { 
    $username = htmlentities($_SESSION['user_session']); 
    $stmt = $this->db->prepare('SELECT * FROM users WHERE user_name = :username'); 
    $stmt->bindParam(':user_name', $username); 
    $stmt->execute(); 

    $row = $stmt->fetch(PDO::FETCH_ASSOC); 

    $userrole = $row['user_role']; 

    if($userrole == 3) { 
     return $userrole = 3; 
    } 

    if($userrole == 2) { 
     return $userrole = 2; 
    } 

    if($userrole == 1) { 
     return $userrole = 1; 
    } 

    if($userrole == 0) { 
     return $userrole = 0; 
    } 
} 

Файл: home.php

<?php 
    $userrole = getUserrole(); 
    if($userrole == 1) { 
     echo "Hi Admin"; 
    } 

    else { 
     echo "You are not a admin"; 
    } 
?> 

Когда я пытаюсь сделать это, ошибка появляется:

Fatal error: Call to undefined function getUserrole() in /Applications/MAMP/htdocs/test/home.php on line 24 

я могу увидеть что-то не так, и я надеялся, что вы, ребята, могли бы помочь мне здесь :)

Весь class.user.php:

<?php 
class USER 
{ 
    private $db; 

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

    public function register($uname,$umail,$upass) 
    { 
     try 
     { 
      $new_password = password_hash($upass, PASSWORD_DEFAULT); 

      $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(password_verify($upass, $userRow['user_pass'])) 
       { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 
     catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 
    } 

    public function is_loggedin() 
    { 
     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; 
    } 


function getUserrole() { 
    $username = htmlentities($_SESSION['user_session']); 
    $stmt = $this->db->prepare('SELECT * FROM users WHERE user_name = :username'); 
    $stmt->bindParam(':user_name', $username); 
    $stmt->execute(); 

    $row = $stmt->fetch(PDO::FETCH_ASSOC); 

    $userrole = $row['user_role']; 

    if($userrole == 3) { 
     return $userrole = 3; 
    } 

    if($userrole == 2) { 
     return $userrole = 2; 
    } 

    if($userrole == 1) { 
     return $userrole = 1; 
    } 

    if($userrole == 0) { 
     return $userrole = 0; 
    } 
} 

} 
?> 
+0

является 'getUserrole()' в реальном классе, или это просто функция? Вы включали или требовали 'class.user.php' в' Home.php'? – Daan

+0

это функция в классе;) Я включаю dbconfig.php Внутри dbconfig.php Я включаю class.user.php –

+0

Если это функция внутри класса, вы должны сначала определить имя класса? Например: $ class-> getUserrole() – sanderbee

ответ

0

Требовать класс внутри вашего home.php, инициализировать его и чем вызвать функцию

<?php 

require_once 'class.user.php'; 
$userClass = new USER(<yourdbcon>); 

$userrole = $userClass->getUserrole(); 
if($userrole == 1) { 
    echo "Hi Admin"; 
} 

else { 
    echo "You are not a admin"; 
} 

?>

+0

, можете ли вы объяснить, почему $ userClass? класс в class.user.php называется USER –

+0

Его владелец объекта (USER). Вы можете называть его чем угодно. Прочтите это, если хотите: http://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762 – sanderbee

+0

Я вижу :) есть проблема с функцией aswel, Я думаю что-то с этим, $ stmt-> execute(); , когда я удаляю его, скрипт не имеет ошибок, но возвращает значение 0, в то время как в базе данных мой пользователь user_role 1, ошибка, которую я получаю при $ stmt-> execute(); находится в функции: –