所以我要做的是通过权限数据库表来过滤我在文件夹中的应用程序,以决定当前用户是否能够访问该应用程序。在这个文件的开头我打印会话ID以确保它的设置并返回我的id。但当我到达我的if语句时,它返回一个值天气或不是我的sql语句是真还是假。找出天气的正确方法是什么,sql语句返回true或false?
<?php
Print_r($_SESSION[user_id]);
$matches = glob("Apps/*.php");
if (is_array($matches)) {
foreach ($matches as $filename) {
$filenamesans = basename($filename, ".php"); // $file is set to "index"
include"db.inc.php"; //database connection
$item = "SELECT * FROM Apps WHERE UserID='$_SESSION[user_id]' AND App ='$filenamesans'";
$result = mysql_query($item);
if ($result == TRUE) {
echo "<a class='nav2' href='Apps/$filenamesans/index.php'>$filenamesans</a></br>";
}
}
}
?>
答案 0 :(得分:0)
应该注意的是,您正在为循环的每次迭代建立与数据库的连接,而且在循环中进行查询通常也是一个坏主意,因为它几乎可以肯定地得到改进。 / p>
试试这个:
include("db.inc.php");
$items = mysql_query("SELECT `App` FROM `Apps` WHERE
`UserID`='".mysql_real_escape_string($_SESSION['user_id'])."'");
$itemarr = array();
while($item = mysql_fetch_assoc($items)) $itemarr[$item['App']] = true;
$files = glob("Apps/*.php");
foreach($files as $file) {
$basefile = basename($filename,".php");
if( isset($itemarr[$basefile])) {
echo "<a class='nav2' .......>...</a>";
}
}
这使用单个查询来获取用户的应用程序,然后在阵列中查找它们 - 这是一个明显更快的操作。