Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编辑我现有的php函数并添加另一个检查?_Php_Function_Sql Server 2005 - Fatal编程技术网

如何编辑我现有的php函数并添加另一个检查?

如何编辑我现有的php函数并添加另一个检查?,php,function,sql-server-2005,Php,Function,Sql Server 2005,我想为高级帐户添加另一个选项。目前,您可以每2天更改一次角色,但我想添加另一项检查,允许高级用户每12小时更改一次角色。它们是从PREMIUM中的另一个表中确定的,该表中有它们的straccounted如果它们不是PREMIUM,则该表中将没有用于它们帐户的行 这是我当前的PHP函数,适用于所有用户,允许他们每两天执行一次 private function doProcessClassChangeFormD() { $db = $this->database[GDB]; $

我想为高级帐户添加另一个选项。目前,您可以每2天更改一次角色,但我想添加另一项检查,允许高级用户每12小时更改一次角色。它们是从
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语句,并使用与您使用的代码完全相同的代码