Php 如何显示用户暂停的原因?

Php 如何显示用户暂停的原因?,php,session,Php,Session,我有一个付费点击脚本,在这个脚本中,我们有一个暂停成员的选项,当该成员尝试用他们的用户名和密码登录他的帐户,并立即点击登录按钮时,我们的系统显示他一个错误:“您的帐户被暂停” 但是我想向每个用户显示暂停的原因。我的意思是,当我挂起任何用户时,我会写一个他被挂起的原因,然后当该用户尝试登录他的帐户时,我们的系统会向他显示一个错误(你的帐户被挂起),然后换行,我想向他显示原因 我已经在成员表中创建了一个名为“susreason”的列,并且我已经将它显示在我的管理面板上,每个用户都可以使用suspen

我有一个付费点击脚本,在这个脚本中,我们有一个暂停成员的选项,当该成员尝试用他们的用户名和密码登录他的帐户,并立即点击登录按钮时,我们的系统显示他一个错误:“您的帐户被暂停”

但是我想向每个用户显示暂停的原因。我的意思是,当我挂起任何用户时,我会写一个他被挂起的原因,然后当该用户尝试登录他的帐户时,我们的系统会向他显示一个错误(你的帐户被挂起),然后换行,我想向他显示原因

我已经在成员表中创建了一个名为“susreason”的列,并且我已经将它显示在我的管理面板上,每个用户都可以使用suspend选项编辑该列。现在,当我挂起一个用户并写入挂起原因时,用户成功挂起,但系统没有显示原因,因为用户会话未登录

下面是代码,这在我的login.php中:

$username = $db->real_escape_string($input->pc['username']);
    $password = $input->p['password'];
    $country = ip2country($_SERVER['REMOTE_ADDR']);
    $ip_user = $_SERVER['REMOTE_ADDR'];
    $sect = explode(".", $ip_user);
    $reip = ((($sect[0] . ".") . $sect[1] . ".") . $sect[2] . ".") . $sect[3];
    $reipa = (($sect[0] . ".") . $sect[1] . ".") . $sect[2] . ".*";
    $reipb = ($sect[0] . ".") . $sect[1] . ".*.*";
    $reipc = $sect[0] . ".*.*.*";
    $verifyusername = $db->fetchOne(("SELECT COUNT(*) AS NUM FROM blacklist WHERE type='username' AND criteria='" . $username . "'"));
    $ipban1 = $db->fetchOne(("SELECT COUNT(*) AS NUM FROM blacklist WHERE type='ip' AND criteria='" . $reip . "'"));
    $ipban2 = $db->fetchOne(("SELECT COUNT(*) AS NUM FROM blacklist WHERE type='ip' AND criteria='" . $reipa . "'"));
    $ipban3 = $db->fetchOne(("SELECT COUNT(*) AS NUM FROM blacklist WHERE type='ip' AND criteria='" . $reipb . "'"));
    $ipban4 = $db->fetchOne(("SELECT COUNT(*) AS NUM FROM blacklist WHERE type='ip' AND criteria='" . $reipc . "'"));
    $countryban = $db->fetchOne(("SELECT COUNT(*) AS NUM FROM blacklist WHERE type='country' AND criteria='" . $country . "'"));

    if ($verifyusername != 0) {
        serveranswer(0, $lang['txt']['usernameblocked']);
    }
    else {
        if ((($ipban1 != 0 || $ipban2 != 0) || $ipban3 != 0) || $ipban4 != 0) {
            serveranswer(0, $lang['txt']['ipblocked']);
        }
        else {
            if ($countryban != 0) {
                serveranswer(0, $lang['txt']['countryblocked']);
            }
        }
    }

    $verifyuser = $db->fetchOne(("SELECT COUNT(*) AS NUM FROM members WHERE username='" . $username . "'"));

    if ($verifyuser == 0) {
        serveranswer(0, $lang['txt']['invalidlogindetails']);
    }

    $user_info = $db->fetchRow(("SELECT id, username, password, status, country FROM members WHERE username='" . $username . "'"));

    if ($user_info['password'] != md5($password)) {
        $bid = array("user_id" => $user_info['id'], "ip" => $ip_user, "status" => "Failed", "password" => $password, "date" => TIMENOW, "agent" => (!empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : $_ENV['HTTP_USER_AGENT']));
        $upd = $db->insert("login_history", $bid);
        serveranswer(0, $lang['txt']['invalidlogindetails']);
    }


    if ($settings['multi_login'] == "yes") {
        $checkip = $db->fetchOne("SELECT COUNT(*) AS NUM FROM members WHERE last_ip='" . $ip_user . "' AND id!=" . $user_info['id']);

        if ($checkip != 0) {
            $showip_error = "yes";
        }


        if ($showip_error == "yes") {
            serveranswer(0, $lang['txt']['multipleaccountsdetected']);
        }
    }


    if ($settings['multi_country'] == "yes") {
        if ($country != $user_info['country'] && $country != "-") {
            serveranswer(0, $lang['txt']['multiplecountrydetected']);
        }
    }


    if ($user_info['status'] == "Un-verified") {
        serveranswer(0, $lang['txt']['accountinactive']);
    }
    else {
        if ($user_info['status'] == "Suspended") {
        serveranswer(0, "<strong>Your Account has been Suspended</strong>" . "<br />" . "<div class=\"site_content\"><div class=\"info_box\"><strong>Reason of Suspend</strong>" . "<br />" . $user_info['susreason']);
        }
    }
$username=$db->real_escape_字符串($input->pc['username');
$password=$input->p['password'];
$country=ip2country($_服务器['REMOTE_ADDR']);
$ip_user=$_服务器['REMOTE_ADDR'];
$sect=explode(“.”,$ip_user);
$reip=(($sect[0]。)$sect[1]。)$sect[2]。)$第[3]款;
$reipa=($sect[0]。)$sect[1]。”$第[2]节。".*";
$reipb=($sect[0]。”)$第[1]节。".*.*";
$reipc=$sect[0]。".*.*.*";
$verifyusername=$db->fetchOne((“从黑名单中选择COUNT(*)作为NUM,其中type='username'和criteria='“$username.”);
$ipban1=$db->fetchOne((“从黑名单中选择COUNT(*)作为NUM,其中type='ip'和criteria='“$reip.”);
$ipban2=$db->fetchOne((“从黑名单中选择COUNT(*)作为NUM,其中type='ip'和criteria='“$reipa.”);
$ipban3=$db->fetchOne((“从黑名单中选择COUNT(*)作为NUM,其中type='ip'和criteria='''.$reipb''));
$ipban4=$db->fetchOne((“从黑名单中选择COUNT(*)作为NUM,其中type='ip'和criteria='”“$reipc.”);
$countryban=$db->fetchOne((“从黑名单中选择COUNT(*)作为NUM,其中type='country'和criteria='“$country.”);
如果($verifyusername!=0){
serveranswer(0,$lang['txt']['usernameblocked']);
}
否则{
如果(($ipban1!=0 |$ipban2!=0)|$ipban3!=0)|$ipban4!=0){
serveranswer(0,$lang['txt']['ipblocked']);
}
否则{
如果($countryban!=0){
serveranswer(0,$lang['txt']['countryblocked']);
}
}
}
$verifyuser=$db->fetchOne((“选择COUNT(*)作为username='“$username.”中成员的NUM);
如果($verifyuser==0){
serveranswer(0,$lang['txt']['invalidlogindetails']);
}
$user_info=$db->fetchRow((“从username='“$username.”的成员中选择id、用户名、密码、状态、国家/地区);
如果($user_info['password']!=md5($password)){
$bid=array(“用户id=>$user\U info['id'”,“ip=>$ip\U user”,“状态”=>“失败”,“密码”=>$password,“日期”=>TIMENOW,“代理”=>(!empty($服务器['HTTP\U用户代理])?$服务器['HTTP\U用户代理]:$环境['HTTP\U用户代理]));
$upd=$db->insert(“登录历史记录”,$bid);
serveranswer(0,$lang['txt']['invalidlogindetails']);
}
如果($settings['multi_login']==“yes”){
$checkip=$db->fetchOne(“选择COUNT(*)作为成员的NUM,其中last_ip='”“$ip_user.”和id!=”$user_info['id']);
如果($checkip!=0){
$showip_error=“yes”;
}
如果($showip_error==“yes”){
serveranswer(0,$lang['txt']['multipleaccountsdetected']);
}
}
如果($settings['multi_country']==“yes”){
如果($country!=$user\u info['country']&&$country!=“-”){
serveranswer(0,$lang['txt']['multiplecountrydetected']);
}
}
如果($user_info['status']==“未验证”){
serveranswer(0,$lang['txt']['accountinactive']);
}
否则{
如果($user_info['status']==“Suspended”){
serveranswer(0,“您的帐户已被挂起”
挂起原因”
“$user_info['susreason]”); } }

这段代码的最后一行是用户挂起时的(if)语句,然后是系统将挂起时的语句。

这段代码存在一些安全问题,因此尽管这不是问题的直接答案,但我将它们作为答案写出来,因为它们很重要

  • 用MD5散列的密码。这种哈希算法已经有好几年没有被接受了,因为它速度太快,而且容易进行暴力搜索
  • 不要腌土豆条。这使得您的密码容易通过rainbow表查找
您应该改用
密码\u hash()
,这将解决这两个问题。这使用了一种缓慢的算法(目前是Bcrypt),随着新的PHP版本的发布,这种算法的速度会增加(以补偿CPU性能的普遍提高,从而更难强行尝试大量密码)。它还将生成并存储一个salt作为散列输出的一部分


看起来用户在被告知暂停原因之前需要正确获取用户名和密码。这很好-在大多数情况下,如果某人只是拥有一个用户名(通常是公共信息),你不希望人们确定某人的暂停原因。

你说用户必须登录才能显示暂停原因。但这意味着只有用户登录时才能访问用户表。我认为即使会话中没有用户数据,您也可以从中读取,不是吗?
$user\u info
不是来自会话-只是来自对用户名的数据库查询。进行一些调试,看看为什么不会出现这种情况。@Giorgio我并不是说用户必须登录才能显示暂停状态