我在我的网站上使用的PHP登录脚本出错了.
我想添加一些代码,用于检查用户在登录时是否被禁止.
但由于某些原因,它不能正常工作; 即使禁止字段/属性在MySQL"users"表中包含"n"为false,它也总是输出"你被禁止".
我试过修复代码,但我仍然遇到错误.这是我的代码:
$bancheck = mysql_query("SELECT * FROM users WHERE ban = '".$_POST['username']."'" ) or die(mysql_error());
$ban = mysql_fetch_array($bancheck);
if ($ban = 'y') {
die('You are banned...');
}
Run Code Online (Sandbox Code Playgroud)
我要检查的MySQL字段称为"禁止",值为"y"表示"true",或"n"表示"false".
这行不正确:
if ($ban = 'y') {{
Run Code Online (Sandbox Code Playgroud)
它应该是:
if ($ban == 'y') {
Run Code Online (Sandbox Code Playgroud)
我假设那里还有一个额外的支撑.
您不应该直接将字符串传递给from $_POSTMySql,因为您很容易受到SQL注入攻击.你应该像这样逃避它:
$bancheck = mysql_query("SELECT * FROM users WHERE ban = '".mysql_real_escape_string($_POST['username'])."'" )or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)
您不应该与ban通过表单传递的用户名进行比较,因为ban将保持字符串'y'或'n'.您应该将用户名(传入)与数据库表中的approriate username字段进行比较.像这样:
$bancheck = mysql_query("SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."'" )or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)
而不是mysql_fetch_array()函数我将使用该mysql_fetch_assoc()函数,因为它返回一个关联数组.
这将返回返回的每一行的关联数组(包含在MySql资源中$bancheck),因此您需要迭代它们(即使它应该只返回一个数组),如下所示:
while($ROW = mysql_fetch_assoc($bancheck))
{
if('y' == $ROW['ban']) {
die('You are banned...');
}
}
Run Code Online (Sandbox Code Playgroud)
但是我会添加一些代码来帮助解决任何其他问题:
$count = mysql_num_rows($bancheck);
if($count > 1)
{
die('More than one user with that username');
}
elseif($count > 0)
{
while($ROW = mysql_fetch_assoc($bancheck))
{
if('y' == $ROW['ban']) {
die('You are banned...');
}
}
}
else //i.e. $count<=0
{
die('No users with that username');
}
Run Code Online (Sandbox Code Playgroud)