PHP类问题/会话问题


PHP class issue/Session issue

我正在尝试创建一个对象并将其存储在会话变量中,以便我可以在不同的页面上访问它。

我遇到了一个问题,我的对象中的属性被莫名其妙地写了。特别是getMenu方法似乎显示了错误的属性。不知道为什么,也许这里的某个人一眼就会知道。

这是我的user.class.php:

    <?php
/**
 * Created by PhpStorm.
 * User:
 * Date: 6/26/14
 * Time: 2:55 PM
 */
class user{
    private $company;
    private $userName;
    private $menuType;
    private $viewState;
    private $gridType;
    public function setGrid($gridType){
        $this->gridType = $gridType;
    }
    public function getGrid(){
        if($this->gridType='salesGrid'){
             include 'gridView.php';
        }elseif($this->gridType='truckingGrid'){
             include 'lActiveLoadView.php';
        }
    }
    public function setCompany($company){
        $this->company = $company;
    }
    public function getCompany(){
        return $this->company;
    }
    public function setUserName($userName){
        $this->userName = $userName;
    }
    public function getUserName(){
        return $this->userName;
    }
    public function setMenu($menuType){
        $this->menuType = $menuType;
    }
    public function getMenu(){
        if($this->menuType='salesMenu'){
            $x = <<< 'Menu'
     <button id='carrierEditor'  class='alignRight' onclick="location.href='gridManager.php?action=alert'">Alerts</button>
     <button id='carrierEditor'  class='alignRight' onclick="location.href='gridManager.php?action=carrier'">Carriers</button>
     <button id='vendorEditor'  class='alignRight' onclick="location.href='gridManager.php?action=vendor'">Vendors</button>
     <button id='productEditor'  class='alignRight' onclick="location.href='gridManager.php?action=product'">Products</button>
     <button id='customerEditor'  class='alignRight' onclick="location.href='gridManager.php?action=customer'">Customer</button>
     <button id='home'  class='alignRight' onclick="location.href='index.php'">Home</button>
Menu;
            echo $x;
        }
        elseif($this->menuType='truckingMenu'){
            $x = <<< 'Menu'
            <button id='generateNewLoad' onclick='"location.href='index.php?viewState=NewLoad''">Generate New Load</button>
            <button id='openloads'  onclick='"location.href='index.php?viewState=All''">Open Loads</button>
            <button id='viewToday'  class='alignLeft' onclick='"location.href='index.php?viewState=Today''">Today</button>
            <button id='viewTomorrow'  class='alignLeft' onclick='"location.href='index.php?viewState=Tomorrow''">Tomorrow</button>
            <button id='viewWeek'  class='alignLeft 'onclick='"location.href='index.php?viewState=Week''">Week</button>
            <button id='trackingloads'  onclick='"location.href='index.php?viewState=Tracking''">Tracking Loads</button>
            <button id='closedloads'  onclick='"location.href='index.php?viewState=Completed''">Closed Loads</button>
            <button id='deliveryRequest'  class='alignRight'>Delivery Request</button>
            <button id='bolGenerator'  class='alignRight'>Manage BOLs</button>
            <button id='manageContacts'  class='alignRight' onclick='"location.href='gridManager.php?action=contacts''">Manage Contacts</button>
            <button id='btnEmailBlast'  class='alignRight' >Email Blast</button>
Menu;
             echo $x;
        }
    }
    public function setViewState($viewState){
        $this->viewState = $viewState;
    }
    public function getViewState(){
        return $this->$viewState;
    }
}

my authentication page:

if ($adldap->authenticate($user, $pass)){
            session_start();
            $_SESSION['loggedInUser'] = $user;
            //Build an array after calling in the inGroup method in /src/adLDAP. In this array we store the KEY as the group name and the VALUE as a boolean value.
            $loginType = array("Administration" => $adldap->user()->inGroup($user, "NY-IT"),
                "Sales" => $adldap->user()->inGroup($user, "ACL-SALES"),
                "Trucking" => $adldap->user()->inGroup($user, "ACL-SALES_ABRIDGED"),
                "PHSales" => $adldap->user()->inGroup($user, "ACL-PH-SALES"),
                "HBroccoli" => $adldap->user()->inGroup($user, "ACL-SALES_BROCCOLI"));
            //Loop through array, if a TRUE value comes up, assign it to the session and redirect to the correct page
            //$userProps = new user();
            //   $company = $_SESSION['userObject']->getCompany();

          //  if (!$_SESSION['userObject'] instanceof User)
          //      $_SESSION['userObject'] = new user();
            $userSession = new user();
            foreach ($loginType as $val) {
                if ($loginType['Administration'] == true) {
                    $userSession->setCompany('Administrators');
                    $userSession->setMenu('salesMenu');
                    $userSession->setUserName($user);
                    $userSession->setGrid('salesGrid');
                    $userSession->setViewState('All');
                    $_SESSION['userObject']=$userSession;
                    $_SESSION['company'] = "Administrators";

                    header('Location: index.php?alerts=null');
                } elseif ($loginType['Sales'] == true) {
                    $userSession->setCompany('Sales');
                    $userSession->setMenu('salesMenu');
                    $userSession->setUserName($user);
                    $userSession->setViewState('All');
                    $userSession->setGrid('salesGrid');
                    $_SESSION['userObject']=$userSession;
                    $_SESSION['company'] = "Sales";
                    header('Location: index.php?alerts=null');
                } elseif ($loginType['Trucking'] == true) {
                    $userSession->setCompany('Trucking');
                    $userSession->setMenu('truckingMenu');
                    $userSession->setUserName($user);
                    $userSession->setViewState('All');
                    $userSession->setGrid('truckingGrid');
                    $_SESSION['userObject']=$userSession;

                    $_SESSION['company'] = "Trucking";
                    header('Location: index.php?alerts=null');
                } elseif ($loginType['PHSales'] == true) {
                    $_SESSION['company'] = "PH Sales";
                    header('Location: cManager.php');
                } elseif ($loginType['HBroccoli'] == true) {
                    $_SESSION['company'] = "HBroccoli";
                    header('Location: index.php?alerts=null');
                } else {
                    header('Location: login.php?alerts=na');
                }
            }
        }
        else{
        header('Location: login.php?alerts=na'); // non authenticated used
        }

下面是一些例子:对象在加载时的var转储将暴露以下内容:

    object(user)[1]
  private 'company' => string 'Trucking' (length=14)
  private 'userName' => string 'gpigb' (length=5)
  private 'menuType' => string 'truckingMenu' (length=12)
  private 'viewState' => string 'All' (length=3)
  private 'gridType' => string 'truckingGrid' (length=12)

如果我调用类中存储在会话变量中的任何方法,由于某种原因,这些方法的属性会被错误的数据重写。

$x = $_SESSION['userObject'];
    $x->getMenu();

对象的vardump显示:

object(user)[1]
  private 'company' => string 'Trucking' (length=14)
  private 'userName' => string 'gpigb' (length=5)
  private 'menuType' => string 'salesMenu' (length=9)
  private 'viewState' => string 'All' (length=3)
  private 'gridType' => string 'truckingGrid' (length=12)

看到菜单类型现在显示'salesMenu'吗?我从来没有调用setMenu方法来改变它,但它有。到底发生了什么事?

请帮

在您的user.class.php文件中,您将(=)分配给menuType类/对象变量,而不是将(==)与它进行比较。

if($this->menuType='salesMenu'){
    ...
}
elseif($this->menuType='truckingMenu'){
    ....
应:

if($this->menuType == 'salesMenu'){
    ...
}
elseif($this->menuType == 'truckingMenu'){
    ....

您还覆盖了getGrid()函数中的gridType变量。

您的if条件错误!

正确的:

//..
if($this->menuType=='salesMenu'){
//..
elseif($this->menuType=='truckingMenu'){