2012-11-22 211 views
0

我使用会话与PHP,我使用session_start和存储从登录表单传递的变量,变量是'user_name'和'user_role'在代码的开头我检查是否设置了这些变量如果不是,则重定向到登录屏幕。现在问题是我有一个包含菜单选项的包含文件,如果用户是特权用户,它显示的选项比不包含的选项多。我的问题是,当包含文件被处理时,我得到PHP Notice: Undefined index: user_name in C:\inetpub\wwwroot\2StarsGames.com\SomeGame v4.1\interface\HeaderMenu.php on line 20'user_name'因为我没有得到其他文件中的错误,所以我只在本文中包含了菜单文件。有人可以告诉我,如果在一个单独的文件中有会话的特殊处理吗?Php会话全局变量

<div id="page_header"> 
<img class="logoImage" src="./img/some1.png" align="left" /> 
SUPER B 
<img class="logoImage" src="./img/some2.png" align="right" /> 
</div> 

<div id="page_menu"> 
<center> 
    <a class="menu" href="./Contest.php">Contest</a> 
    <a class="menu" href="./Cards.php">Cards</a> 
    <a class="menu" href="./PlayersPoints.php">Players Points</a> 
    <a class="menu" href="./SBCardsCode.php">Card's Code</a> 
    <a class="menu" href="./Avatars.php">Avatars</a> 
    <a class="menu" href="./Sims.php">Sims</a> 
    <a class="menu" href="./Boards.php">Boards</a> <br/> 
    <a class="menu" href="./Charity.php">Charity</a> 
    <?php 
     $username = strtolower($_SESSION['user_name']); 
     if($username == 'some name1' || 
      $username == 'some name2' || 
      $username == 'some name3' || 
      $username == 'some name4') 
     { 
      echo "   
       <a class='menu' href='./PayoutsNoWin.php'>Payouts</a> 
       <a class='menu' href='./Payins.php'>Payins|</a>    
       <a class='menu' href='./Payments.php'>Payments</a> 
       <a class='menu' href='./Tools.php'>Tools</a> 
       <a class='menu' href='./TransferData.php'>Transfer Data</a> 
       <a class='menu' href='./Games.php'>Games</a> 
       "; 
     } 
    ?> 
</center> 

编辑 的在session_start()是包括这一项的文件中。

+2

你确定'session_start'在'include'之前被调用吗? – Raziel

+0

或者你在$ _session中设置了user_name? –

+0

'session_start'会在包含此文件的文件的任何内容之前被调用。我也检查上面的变量,如果他们没有设置我重定向到登录屏幕。 –

回答

1

您需要取消错误报告:

$用户名=用strtolower(@ $ _ SESSION [ 'USER_NAME']);

或更好,请在使用变量之前检查isset($ _ SESSION ['user_name'])。

+0

为什么要压制它?如果它在那里意味着什么是错的。我不应该更好地解决它吗? –

+0

我不能相信我正在这样做......但我必须选择一个答案,并且尽可能多的哈克,似乎是最好的。我压制了。 :(没有错误,一切正常,我确信我会尽快回复,但我太累了,继续寻找这个东西。 Ty every everyone for your help。 –

+1

欢迎使用产品代码:)...您应该使用if(!empty($ _ SESSION ['user_name']))或if(isset($ _ SESSION ['user_name']))。然而,在这种情况下,任何有经验的程序员都应该明白,为什么错误被抑制......就像它是黑客一样;) – soulfreshner

0

的误差似乎是存在的位置:

$用户名=用strtolower($ _ SESSION [ 'USER_NAME']);

“Undefined index”基本上意味着在$ _SESSION变量中找不到'user_name'索引。

你可以发布你的代码在哪里设置?
确保此代码在您检查$ _SESSION ['user_name']之前运行;

+0

在所有脚本中的session_start之后,我包括另一个名为Lock.php的文件,其中包含以下行。如果(!isset($ _ SESSION ['logged_in'],$ _SESSION ['user_name'],$ _SESSION ['user_role'])) { \t header('Location:Login。PHP'); } 所以,因为我达到了它使用会话变量的地步,这意味着它们在那里。至少这就是我编写代码时的想法。 –

+0

奇怪的是,代码运行良好...我只是得到那个错误。有点奇怪。 –

+0

如果支付,工具菜单项被回显出来,你能否包含一个“echo $ username”来查看这个变量包含的内容?您可能需要降低错误报告级别来执行此操作。 – SteB