2010-02-26 49 views
1

我將expressionengine用作CMS,但要覆蓋新用戶的核心驗證。當有人註冊爲新用戶時,系統檢查是否已經獲取了screen_name。如果是,那麼它會拋出一個錯誤標誌。將索引值附加到重複的屏幕名稱

我發現那在做驗證碼的部分,但我想改變它,這樣,而不是拋出的和錯誤的SCREEN_NAME附加與計數值上方的空間和數量(一個。

因此,「約翰·史密斯」被改成了「約翰·史密斯3」(假設有在數據庫中其他兩個「約翰·史密斯」 screen_names)。

如何修改這個代碼,以達致這?

 /** ------------------------------------- 
     /** Is screen name taken? 
     /** -------------------------------------*/ 

     if (strtolower($this->cur_screen_name) != strtolower($this->screen_name)) 
     { 
      $query = $DB->query("SELECT COUNT(*) AS count FROM exp_members WHERE screen_name = '".$DB->escape_str($this->screen_name)."'"); 

      if ($query->row['count'] > 0) 
      {        
       $this->errors[] = $LANG->line('screen_name_taken'); 
      } 
     } 

回答

1
if (strtolower($this->cur_screen_name) != strtolower($this->screen_name)) 
{ 
    $query = $DB->query("SELECT COUNT(*) AS count FROM exp_members WHERE screen_name = '".$DB->escape_str($this->screen_name)."'"); 

    if ($query->row['count'] > 0) 
    { 
     $query2 = $DB->query("SELECT COUNT(*) AS count FROM exp_members WHERE screen_name LIKE '".$DB->escape_str($this->screen_name)."'"); 
     $name = $DB->escape_str($this->screen_name).$query2->row['count']; 
     $this->errors[] = 'The screen name you choose is taken please use '.$name.' for your new screen_name); 
    } 
} 

玩得開心!

+0

我想自動執行此操作 - 不顯示錯誤消息。我想更新screen_name的值而不會出現錯誤消息。如何將$ name附加到$ this-> screen_name中? – proee 2010-02-26 20:10:30

+0

這是你應該在GUI部分工作的東西,也許使用jquery/prototype/dojo。 您可以修改$ this-> errors [] = $ name;並在JavaScript部分這將更新字段'screen_name'的形式。 – DCC 2010-02-26 20:24:45

+0

我可以只取代你的最後一個錯誤行: $ this-> screen_name = $ name – proee 2010-02-26 20:27:39