使用Codeigniter的动态用户选项

时间:2012-11-15 16:08:30

标签: php codeigniter pdo

我正在尝试为用户提供以更多语言加载文章的选项。 我正在尝试显示用户未选择的可用语言列表,并在顶部选择已选择的语言,以便用户从其选项中删除。

这是我到目前为止所得到的:

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 个答案:

答案 0 :(得分:1)

我并不熟悉PDO,但我认为你应该使用fetchAll()而不是fetch,因为这将获取所有语言而不是下一行。您还想告诉它使用FETCH_COLUMN模式,例如

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

然后会按照您的预期返回所有语言的数组,然后您就可以执行array_diff_key了。