2013-10-14 64 views
0

我想爲高級帳戶添加另一個選項。目前,你可以每兩天改變一次角色,但是我希望再添加一次支票,以保證優質用戶每12小時一次。他們從PREMIUM中的另一個表中確定,它們的編號爲strAccountID如果它們不是溢價,那麼該表中將不會有行中的行。如何編輯我現有的php函數並添加另一個檢查?

這是我目前使用的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); 
} 

http://pastebin.com/VK4Bi7FJ

我試過多種方法,但沒有成功。我如何實現這一目標?

回答

0
去了解它是做高檔表的查詢

最簡單的方法:(?存儲在會話/ cookie的地方)

從PREMIUM選擇的strAccountID其中strAccountID等於登錄的用戶當前

從那裏做一個簡單的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); 

然後,所有你需要做的是,如果這個人是溢價,改變上述聲明只有12小時,而不是2天。如果它們不是優質的,那麼在2天內放置它。

+0

我有點困惑。有沒有可能在pastebin.com上上傳編輯後的功能,以便我們看看它應該如何查找?我真的很感激。我們可以從我的函數中的第一個查詢中使用'$ _SESSION ['strAccountID']' – oLdPkj

+0

你已經有了你需要做的事情的基礎。創建我上面寫的SQL語句,並使用與您已經使用的代碼完全相同的代碼(如果num_rows> 0)...如果保費...做的事情繼續做你現在正在做的事情。 –

+0

我明白,我很欣賞它,但我只是不想搞亂它,這就是爲什麼。我不知道如何連接它們以確保其餘部分將被執行。 – oLdPkj

1

使用LEFT JOIN與查詢中的PREMIUM表檢查傳輸時間。然後使用該表中的匹配條件化您與之比較的時間。

$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); 
+0

'strAccountID'和'strUserId'是不同的。在一個帳戶中,您可以擁有3個用戶ID。保費由帳戶而不是字符決定。所以,我相信我應該編輯一下。我可以使用上面的查詢'$ _SESSION ['strAccountID']' – oLdPkj

+1

我根據你提供的信息做了我最好的,我不得不猜測加入列是什麼。這聽起來像你需要使它成爲一個三方加入。無論如何,上面顯示了一般的想法,如果你知道你在用SQL做什麼,不應該很難將其修改爲實際的模式。 – Barmar

+0

我可以使用'LEFT JOIN PREMIUM p ON p.strAccountID =?'並在'$ _SESSION ['strAccountID']''附近添加'$ character'附近嗎? – oLdPkj

相關問題