【问题标题】:Php mysql if/else shorthandphp mysql if/else 简写
【发布时间】:2013-11-19 23:41:12
【问题描述】:

谁能看出这个速记与下面的问题有什么问题?

echo "<td><font size=1 color=#e4d6b5>" . ($row['tier']<$_SESSIONS['tier'] ? "ACCESS DENIED" : $row['contents']) . "</font></td>";

我的数据库中有两个表:

1.) members (id,username,email,password,salt,tier)

2.) opwire (category,contents,date,userid,seclevel)

我试图让当前登录的用户根据他们的安全等级(参考成员的等级与 opwire 的 seclevel)被授予或限制对“内容”的访问。我也不完全相信我正在使用 http ://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL

我通常会通过以下方式获取当前用户:

$userId = $_SESSION['user_id'];

整个建表php如下。目前,任何层的用户在他们的层应该限制它时,都可能错误地查看任何seclevel的内容。

<?php 

include_once 'functions.php';
include_once 'db_connect.php';
sec_session_start();

if(login_check($mysqli) == true) {

$con=mysqli_connect("localhost","mylogin","mypassword","mysqldatabase");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }


function getColor($strOption)
{
   switch ($strOption)
   {
       case "Case 1":
       return "#cbae80";

       case "Case 2":
       return "#e59350";

       case "Case 3":
       return "#b7aaa4";

    }
}


$result = mysqli_query($con,"SELECT opwire.*,members.username FROM opwire 
          LEFT JOIN members on opwire.userid=members.id order by date DESC");

echo "<table border='1'>
<tr>
<th>Category</th>
<th>Contents</th>
<th>Date/Time</th>
<th>Operative</th>
</tr>";

while($row = mysqli_fetch_array($result))
 {
 echo "<tr>";
 echo "<td><font size=1 color='".getColor($row['category'])."'> " . $row['category'] . "</font></td>";
 echo "<td><font size=1 color=#e4d6b5>" . ($row['tier']<$_SESSIONS['tier'] ? "ACCESS DENIED" : $row['contents']) . "</font></td>";
 echo "<td><font size=1 color=silver>" . $row['date'] . "</font></td>";
 echo "<td><font size=1 color=gold>" . $row['username'] . "</font></td>";
 echo "</tr>";
 }
echo "</table>";

mysqli_close($con);

} else {
   echo 'Access to this area requires security clearance. <br/>';
}

?>

【问题讨论】:

  • 那么到底是什么不起作用?首先表现出来的问题是什么?粗略一看,这里有一大堆问题,所以一次从一个问题开始。
  • ($row['tier']
  • 当第 2 层的用户登录时,他们会看到表中与“内容”有关的所有内容。他们应该只看到设置为 seclevel 2 或更低的每个内容行。
  • 我使用

标签: php mysql security if-statement shorthand


【解决方案1】:

我相信你需要在每个案例的末尾都有“BREAK”,否则它会一直下降到“#b7aaa4”;

function getColor($strOption)
 {
  switch ($strOption)
  {
   case "Case 1":
   return "#cbae80";
   break;

   case "Case 2":
   return "#e59350";
   break;

   case "Case 3":
   return "#b7aaa4";
   break;
  }
}

【讨论】:

  • 这是一个函数,考虑到case 的每个case 部分中的return 部分switchbreak 可能是不必要的。一旦遇到return,控件就会在到达break之前退出函数。
猜你喜欢
  • 2016-12-25
  • 2017-01-14
  • 2014-09-22
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2011-06-02
  • 2012-04-09
相关资源
最近更新 更多