2017-08-07 41 views
1

私がしようとしていることは、異なるグループが異なるものを見ることを可能にする異なる権限を持つようにすることです。テーブルグループに複数の列があるように設定しました。最初の2つはgroupidgroupnameです。残りはアクセス許可です(1は有効、0は無効です)。他のテーブルを参照する方法

<?php 

ob_start(); 
session_start(); 
require_once 'dbconnect.php'; 

$res=mysql_query("SELECT * FROM users WHERE userId=".$_SESSION['user']); 
$userRow=mysql_fetch_array($res); 

$sql=mysql_query("SELECT * FROM groups WHERE groupid=".$userRow['usergroup']); 
$groupRow=mysql_fetch_array($sql); 

?> 

<div id="sidebar-menu" class="main_menu_side hidden-print main_menu"> 
    <div class="menu_section"> 
    <h3>General</h3> 
    <ul class="nav side-menu"> 
     <li><a><i class="fa fa-home"></i> Home <span class="fa fa-chevron-down"></span></a> 
     <ul class="nav child_menu"> 
      <li><a href="home.php">Dashboard</a></li> 
      <?php if ($groupRow['Test'] == "1") { echo '<li><a href="index2.html">Dashboard2</a></li>'; } ?> 
      <li><a href="index3.html">Dashboard3</a></li> 
     </ul> 
     </li> 
    </ul> 
    </div> 
    <div class="menu_section"> 
    <h3>Live On</h3> 
    <ul class="nav side-menu"> 
     <li><a><i class="fa fa-bug"></i> Additional Pages <span class="fa fa-chevron-down"></span></a> 
     <ul class="nav child_menu"> 
      <li><a href="e_commerce.html">E-commerce</a></li> 
      <li><a href="projects.html">Projects</a></li> 
      <li><a href="project_detail.html">Project Detail</a></li> 
      <li><a href="contacts.html">Contacts</a></li> 
      <li><a href="profile.html">Profile</a></li> 
     </ul> 
     </li> 
    </ul> 
    </div> 
</div> 

任意の提案は素晴らしいことです!

おかげで、
cNTr1nity

P.S DBConnectは、MySQLデータベースに他のPHPファイルを接続するだけでPHPファイルです。

+2

これはあなたの問題を解決しませんが、mysql_コンストラクタはPHP **の** **で廃止予定です(https://wiki.php.net/rfc/mysql_deprecation) ** PHP 7 **で削除されました](https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7#extmysql)。 [** MySQLi **](http://php.net/manual/en/book.mysqli.php)または[** PDO **](http://php.net/manual/)への切り替えを検討してください。 en/book.pdo.php)を使用して、[** prepared statements **](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用して[** SQLインジェクション**](https://en.wikipedia.org/wiki/SQL_injection):) –

答えて

0

あなたのテストエコーは正しい行にあります。確かにあなたは事実上完全であるようです。私は、WHERE条件としてリンクとセッションのユーザーとしてユーザーテーブルのユーザーグループの外部キーを持つユーザーとグループのテーブル間の結合を持つ単一のSELECTクエリを使用します。

$res=mysql_query("SELECT groups.*, users.* FROM groups 
INNER JOIN users ON groups.groupid = users.usergroup WHERE 
users.userId =" .$_SESSION['user']); 

その後のことができます。複数のif条件を使用して、必要に応じて正しい追加の href行をエコーし​​ます。

重要:mysqli/pdoにアップデートし、SQLインジェクションのリスクからコードを保護することで、オンボードの@Obsidian Ageコメントを取り上げることもお勧めします。 docs on the later mysqli are hereおよびhelpful SO post on protecting against sql injection

$s = $mysqliConnection->prepare('SELECT groups.*, users.* FROM groups 
    INNER JOIN users ON groups.groupid = users.usergroup WHERE 
    users.userId = ?'); 
$s->bind_param('i',$_SESSION['user']); 

$s->execute(); 

docs on mysqli prepared parameter statements here for more adviceを参照してもSO他のセキュリティ対策については上記参照読み:だからあなたのコードを保護するための良い出発点は、(users.userIdと仮定すると整数である)のようなmysqliの準備パラメータ文のものを使用することです。

関連する問題