繁体   English   中英

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

我的身份验证页面:

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();

对象的摘要显示:

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'){

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM