我想做以下但是失败。
$user_id = $_REQUEST['user_id'];
if (/* nothing to be requested*/) {
echo "<button>Log In</button><button>Sign Up</button>";
} else {
/* logged in, check if the user is an admin or not */
if ( /* he is admin */ ) {
echo "<button>Admin</button><button>Logout</button>";
} else {
/* then he is just a normal user */
echo "<button>Logout</button>";
}
}
原始代码:
$user_id = $_REQUEST['user_id'];
if (!$user_id) {
echo "<button>Log In</button><button>Sign Up</button>"
} else {
$check_sql = "SELECT admin from users where user_id = {'$user_id'}";
$result = mysqli_query($con, $check_sql);
$rows = mysqli_fetch_array($con, $result);
if ($rows['admin'] == 1) {
echo "<button>Admin</button><button>Log Out</button>";
} else {
echo "<button>Log Out</button>";
}
}
当user_id为$ _REQUEST时,代码工作正常。但是当没有什么是$ _REQUEST时就失败了。你能帮忙吗?
非常感谢!
答案 0 :(得分:1)
首先,请注意您的代码容易受到SQL注入攻击。这非常严重。您应该使用参数化查询或转义$user_id
变量。
http://php.net/manual/en/security.database.sql-injection.php
另请注意,您的代码可能容易受到设置$user_id
自己的人的攻击,因此可能会在他们不应该获得管理员权限时获得管理员权限。这是因为您使用的是$_REQUEST
,这些值可以通过请求以您可能没有预料到的方式设置。或者,您可以将user_id
存储在$_SESSION
。
http://php.net/manual/en/ini.core.php#ini.request-order
http://php.net/manual/en/reserved.variables.session.php
对于$user_id
的检查,它应该是:
if(empty($user_id))
您可能还想修剪$user_id
。
如果您使用的是PHP&lt; 5.5:
$user_id= trim($user_id);
if(empty($user_id)
如果您使用的是PHP&gt; = 5.5
if(empty(trim($user_id))
确定变量是否为空。变量是 如果它不存在或者其值等于FALSE则认为为空。 如果变量不存在,empty()不会生成警告。