【发布时间】:2015-03-15 22:44:51
【问题描述】:
我有一个付费点击脚本,在这个脚本中,我们可以选择暂停会员,当该会员尝试使用他们的用户名和密码登录他的帐户并立即单击登录按钮时,我们的系统会向他显示一个错误:“您的帐户已暂停”。
但我想向每个用户显示暂停的原因。我的意思是当我暂停任何用户时,我会写下他被暂停的原因,然后当该用户尝试登录他的帐户时,我们的系统会向他显示错误(您的帐户被暂停)然后换行,我想在那里告诉他原因。
我已经在成员表中创建了一个名为“susreason”的列,并且我已经将它显示给我的管理面板,以显示每个用户编辑选项和暂停选项。现在,当我暂停用户并写入暂停原因时,用户成功暂停,但系统没有显示原因,因为用户会话未登录。
下面是代码,在我的 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']);
}
}
这段代码最后一行是(if)语句,当用户暂停时,系统将执行。
【问题讨论】:
-
您说用户必须登录才能显示暂停原因。但这意味着只有当用户登录时才能访问您的用户表。我认为即使会话中没有用户数据,您也可以从中读取,不是吗?
-
$user_info不是来自会话 - 只是来自对用户名的数据库查找。做一些调试,看看为什么这没有出现在你面前。 -
@Giorgio 我不是说你在说用户必须登录才能显示暂停原因我说我的脚本向用户显示暂停错误,即使用户没有登录这就是它的原因没有向暂停用户显示“susreason”列的值。
-
这个原因是我在暂停用户时写的,我写了一些类似原因的东西,并且这个值提交给成员列“susreason”,但是当他暂停时脚本没有向暂停用户显示这个值尝试登录。脚本只显示暂停和 ($user_info['susreason']) 这将不起作用,因为用户未登录此字段显示空白。
-
@halfer 你是对的,但我不是 php 方面的专家,我不知道如何调试我正在尝试对以下代码进行一些更改,然后向我展示 susreason 0 。