如何编辑我现有的php函数并添加另一个检查?
我想为高级帐户添加另一个选项。目前,您可以每2天更改一次角色,但我想添加另一项检查,允许高级用户每12小时更改一次角色。它们是从如何编辑我现有的php函数并添加另一个检查?,php,function,sql-server-2005,Php,Function,Sql Server 2005,我想为高级帐户添加另一个选项。目前,您可以每2天更改一次角色,但我想添加另一项检查,允许高级用户每12小时更改一次角色。它们是从PREMIUM中的另一个表中确定的,该表中有它们的straccounted如果它们不是PREMIUM,则该表中将没有用于它们帐户的行 这是我当前的PHP函数,适用于所有用户,允许他们每两天执行一次 private function doProcessClassChangeFormD() { $db = $this->database[GDB]; $
PREMIUM
中的另一个表中确定的,该表中有它们的straccounted
如果它们不是PREMIUM,则该表中将没有用于它们帐户的行
这是我当前的PHP函数,适用于所有用户,允许他们每两天执行一次
private function doProcessClassChangeFormD()
{
$db = $this->database[GDB];
$character = $this->site->SanitizeName($_POST['character']);
$num_rows = $db->doQuery('SELECT bNation FROM ACCOUNT_CHAR WHERE strAccountID = ? AND ? IN(strCharID1, strCharID2, strCharID3)', $_SESSION['strAccountID'], $character);
if ($num_rows == -1)
{
$db->GetError(__file__, __line__);
$this->m_ccError = Template::GetLangVar('DB_ERROR');
return false;
}
else if ($num_rows == 0)
{
$this->m_ccError = Template::GetLangVar('CC_INVALID_ACCOUNT');
return false;
}
$row = $db->doRead();
$nation = $row['bNation'];
$num_rows = $db->doQuery('SELECT Class, Race, Strong, Sta, Dex, Intel, Cha, Points, TransferTime FROM USERDATA WHERE strUserId = ? AND (TransferTime < DATEADD(DAY,-2,GETDATE()) OR TransferTime IS NULL) and zone<>199 and authority<>255', $character);
if ($num_rows == -1)
{
$db->GetError(__file__, __line__);
$this->m_ccError = Template::GetLangVar('DB_ERROR');
return false;
}
else if ($num_rows == 0)
{
$this->m_ccError = Template::GetLangVar('CC_RECENT_TRANSFER');
return false;
}
$row = $db->doRead();
$oldRace = $row['Race'];
$oldClass = $row['Class'];
$newRace = intval($_POST['race']);
$newClass = intval($_POST['class']);
$pCT = new ClassTransfer($nation, $oldClass, $oldRace, $newClass, $newRace);
if (!($res = $pCT->canChangeClass()))
{
$this->m_ccError = $pCT->GetError(__file__, __line__);
return false;
}
$newClass = $res[0];
$newRace = $res[1];
$free = $row['Points'] + $row['Strong'] + $row['Sta'] + $row['Dex'] + $row['Intel'] + $row['Cha'];
$newStats = $pCT->getStarterStats($newClass, $newRace);
for ($i = 0; $i < 5; $i++)
$free -= $newStats[$i];
if ($free > 255)
{
$_SESSION['bClassTransfer'] = true;
$_SESSION['strUserId'] = $character;
$_SESSION['bNewRace'] = $newRace;
$_SESSION['bNewClass'] = $newClass;
$_SESSION['bStrong'] = $newStats[KO_STR];
$_SESSION['bStamina'] = $newStats[KO_STA];
$_SESSION['bDexterity'] = $newStats[KO_DEX];
$_SESSION['bIntelligence'] = $newStats[KO_INT];
$_SESSION['bCharisma'] = $newStats[KO_CHA];
$_SESSION['bAvailable'] = $free;
$this->m_bSelectPoints = true;
return false;
}
$newStats[5] = $free;
return $this->doExecuteClassChangeD($character, $newClass, $newRace, $newStats);
}
私有函数doProcessClassChangeFormD()
{
$db=$this->database[GDB];
$character=$this->site->SanitizeName($\u POST['character']);
$num_rows=$db->doQuery('SELECT bNation FROM ACCOUNT_CHAR WHERE strAccountID=?和?),$会话['strAccountID',$character];
如果($num_rows==-1)
{
$db->GetError(\uuuuu文件\uuuuuu,\uuuuu行\uuuuu);
$this->m_ccError=Template::GetLangVar('DB_ERROR');
返回false;
}
else if($num_rows==0)
{
$this->m_ccError=Template::GetLangVar('CC_无效的_帐户');
返回false;
}
$row=$db->doRead();
$nation=$row['bNation'];
$num_rows=$db->doQuery('SELECT Class,Race,Strong,Sta,Dex,Intel,Cha,Points,TransferTime FROM USERDATA,其中strUserId=?和(TransferTimeGetError(\uuuuu文件\uuuuuu,\uuuuu行\uuuuu);
$this->m_ccError=Template::GetLangVar('DB_ERROR');
返回false;
}
else if($num_rows==0)
{
$this->m_ccError=Template::GetLangVar('CC_RECENT_TRANSFER');
返回false;
}
$row=$db->doRead();
$oldRace=$row['Race'];
$oldClass=$row['Class'];
$newRace=intval($_POST['race']);
$newClass=intval($_POST['class']);
$pCT=新类别转移($nation、$oldClass、$oldRace、$newClass、$newRace);
如果(!($res=$pCT->canChangeClass())
{
$this->m\u ccError=$pCT->GetError(\uuuuu文件\uuuu,\uuuu行\uuuu);
返回false;
}
$newClass=$res[0];
$newRace=$res[1];
$free=$row['Points']+$row['Strong']+$row['Sta']+$row['Dex']+$row['Intel']+$row['Cha'];
$newStats=$pCT->getStarterStats($newClass,$newRace);
对于($i=0;$i<5;$i++)
$free-=$newStats[$i];
如果($free>255)
{
$\会话['bClassTransfer']=true;
$\会话['strUserId']=$字符;
$\会话['bNewRace']=$newRace;
$\会话['bNewClass']=$newClass;
$_SESSION['bStrong']=$newStats[KO_STR];
$_SESSION['bStamina']=$newStats[KO_STA];
$\会话['b扩展]=$newStats[KO_DEX];
$_SESSION['bIntelligence']=$newStats[KO_INT];
$_SESSION['bCharisma']=$newStats[KO_CHA];
$\u会话['bavaailable']=$free;
$this->m_bSelectPoints=true;
返回false;
}
$newStats[5]=$free;
返回$this->doExecuteClassChangeD($character、$newClass、$newRace、$newStats);
}
我试过几种方法,但没有成功。如何实现这一点?最简单的方法是查询premium表: 从PREMIUM中选择strAccountID,其中strAccountID等于当前登录用户(存储在某个地方的会话/cookie中?) 从这里开始,只需做一个简单的if语句。如果上面的select语句返回一行,并且时间已超过12小时,则“是”允许它们更改字符 在此处围绕此位执行上述操作:
$num_rows = $db->doQuery('SELECT Class, Race, Strong, Sta, Dex, Intel, Cha, Points, TransferTime FROM USERDATA WHERE strUserId = ? AND (TransferTime < DATEADD(DAY,-2,GETDATE()) OR TransferTime IS NULL) and zone<>199 and authority<>255', $character);
$num_rows=$db->doQuery('SELECT Class、Race、Strong、Sta、Dex、Intel、Cha、Points、TransferTime FROM USERDATA,其中strUserId=?和(TransferTime
那么你所需要做的就是,如果这个人是高级的,把上面的声明改为12小时,而不是2天。如果他们不是特优,则将其保留2天。使用查询中的
特优
表的左连接来检查传输时间。然后使用该表中的匹配项来限定与之比较的时间
$num_rows = $db->doQuery('
SELECT Class, Race, Strong, Sta, Dex, Intel, Cha, Points, TransferTime
FROM USERDATA u
LEFT JOIN PREMIUM p ON p.strAccountID = u.strUserId
WHERE strUserId = ?
AND (TransferTime < IF(p.strAccountId IS NULL,
DATEADD(DAY,-2,GETDATE()),
DATE_SUB(NOW(), INTERVAL 12 HOUR)))
OR TransferTime IS NULL)
AND zone<>199 and authority<>255', $character);
$num\u rows=$db->doQuery('
选择类别、比赛、强项、Sta、Dex、英特尔、Cha、积分、传输时间
从用户数据u
p.strAccountID=u.strUserId上的左连接高级p
其中strUserId=?
和(转移时间<如果(p.straccounted为空,
DATEADD(日期-2,GETDATE()),
日期(现在(),间隔12小时)
或TransferTime为空)
以及区域199和授权255',$character);
straccounted
和strUserId
是不同的。在一个帐户中,您可以有3个用户ID。保费是根据帐户而不是字符确定的。所以,我认为我应该编辑一下。我可以使用上面的查询$\u SESSION['straccounted']
根据您提供的信息,我尽了最大努力,我不得不猜测加入列是什么。听起来你需要把它变成一个三方连接。无论如何,上面显示了一般的想法,如果你知道你在用SQL做什么,那么将它修改到你的实际模式应该不难。我可以在p.strAccountID=?
上使用左连接高级p,并为$\u会话['strAccountID']
添加近$字符
秒吗?是的,这应该行。最后一个问题我可以用:DATEADD(DAY,-2,GETDATE())、DATEADD(HOURS,-12,GETDATE())
代替DATE子项
?我有点困惑。是否可以将编辑过的函数上传到pastebin.com上,以便我可以查看它的外观?我会非常感激的。我们可以从my函数的第一个查询开始使用$\u会话['straccounted']
您已经有了所需操作的基础。创建我上面写的SQL语句,并使用与您使用的代码完全相同的代码