2012-11-15 19 views
1

我試圖讓我的用戶可以選擇加載更多語言的文章。 我試圖表明,用戶沒有選擇可用語言的列表,並有選擇已經選擇語言的頂部爲用戶從他們的選項中刪除。使用Codeigniter的動態用戶選項

這裏是我到目前爲止有:

class Options_model extends CI_Model{ 

    protected $options = array(
      'en' => 'English', 
      'it' => 'Italiano', 
      'fr' => 'Français', 
      'de' => 'Deutsch', 
      'es' => 'Español', 
      'no' => 'Norsk', 
      'ru' => 'Русский язык', 
      'ar' =>'العربية', 
      'zu' => '中文', 
      ); 

    public function my_lang($user_id) { 
      $sql = 
      "SELECT lang_id 
      FROM languages 
      WHERE user_id = :user_id"; 

      $stmt = $this->db->conn_id->prepare($sql); 
      $stmt->bindParam(':user_id', $user_id); 
      $stmt->execute(); 
      return $result = $stmt-> fetch(); 
    } 

    public function languages($result) { 
      return array_diff_key($this->options, $result); 
    } 
} 

,並在我的視圖文件(用於測試,我就會把一些這方面的控制,當我得到它的運行和鏈接扔刪除語言並刪除我的數據庫中的表)。

$mylang = $this->Options_model->my_lang($user_id); 
print_r($mylang); 
foreach ($mylang as $value) { 
    echo "Value: $value<br />\n"; 
} 

$options = $this->Options_model->languages($mylang); 
echo form_dropdown('languages', $options); 

和我的數據庫結構如下:

| id | user_id | lang_id | 
|------------------------| 
| 1 | 12  | en  | 
|————————————————————————| 

我得到的,當我嘗試返回我的$ myLang變量是「數組」。我不能讓我的array_diff_key函數工作,並且print_r看起來並不像我想象的那樣。我只想讓自己回到我的圖形設計舒適區,並將此後端頭痛甩掉。有沒有更簡單的方法來做到這一點?或者我應該如何編碼用戶選項而不看起來像個白癡?

+1

你能後,當你的print_r你會得到什麼? –

+0

陣列([LANG_ID] =>烯[0] =>烯)。我的foreach也迴應了兩次,但這很容易解釋。我想它呼應的英語,這可能嗎? –

回答

1

我沒有大量熟悉PDO,但我認爲你應該使用使用fetchall(),而不是獲取,因爲這將抓住所有的語言,而不是僅僅下一行。您還需要告訴它使用FETCH_COLUMN模式,例如

return $result = $stmt->->fetchAll(PDO::FETCH_COLUMN, 0); 

這將回所有爲你期望的語言,你應該然後就可以做你的array_diff_key的數組。

相關問題