url友好的用户名功能,检查db,如果它是唯一的

时间:2013-04-12 21:08:45

标签: php codeigniter loops

我正在尝试在codeigniter中创建一个使用户名为“url-friendly”的函数。它必须全部小写,替换丹麦字符æ, ø, å with ae, oe, aa然后执行数据库检查它是否唯一,例如,如果有一个名为ægir的用户和一个名为aegir的用户。如果它已经存在,我只想添加一个数字,然后再次进行检查。

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

public function url_username($username)
{
    for($i = 1, "What should i write here?", "What about here?")
    {
        $url_username = str_replace(array('æ','ø','å'),array('ae','oe','aa'),strtolower($username));
        $this->db->select('url_username')->from('users')->where('url_username',$username);
        $q = $this->db->get();

        if($q > 0)
        {
            "what should i write here?"
        }
    }
}

如果有人能帮我完成这件事,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

public function url_username($username)
{
    $url_username = str_replace(array('æ','ø','å'),array('ae','oe','aa'),strtolower($username));

    $this->db->select('url_username');
    $this->db->from('users');
    $this->db->like('url_username', $url_username, 'after');
    $this->db->order_by('url_username', 'desc');
    $this->db->limit(1);
    $q = $this->db->get();

    if($q->num_rows() > 0)
    {
        // increment the username with the String Helper
        $this->load->helper('string');
        $url_username = increment_string($q->url_username, '_');
    }
    return $url_username;
}

好的,我们只需更改查询以查找以已清理的url_username开头的任何内容。我们使用like语句,然后按url_username降序排序(意味着myusername_3在结果集中myusername_2之前)。然后我们只返回第一行(因为它将是最大的增量值) - 然后我们只用String Helper增加结尾。

答案 1 :(得分:1)

对@swatkins答案的修改很少。您的数据库中可能存在aegir和aegir1,因此您希望随后保留数字,以确保您拥有唯一的用户名。

public function url_username($username)
{
    $url_username = str_replace(array('æ','ø','å'),array('ae','oe','aa'),strtolower($username));
    $this->db->select('url_username')->from('users')->like('url_username', $url_username, 'after');
    $q = $this->db->get();


    if($q->num_rows() > 0)
    {
        $this->load->helper('string');
        return $this->url_username(increment_string($q->url_username, '-', $i));
    }

    return $url_username;
}