0

我正在尝试在 codeigniter 中创建一个使用户名“对 url 友好”的函数。它必须全部小写,替换丹麦字符æ, ø, å 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?"
        }
    }
}

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

4

2 回答 2

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;
}

好的,所以我们只需更改查询以查找以 sanitized 开头的任何内容url_username。我们为此使用该like语句,然后按url_username降序排序(意思myusername_3myusername_2在结果集中之前)。然后我们只返回第一行(因为它将是最大的递增值)——然后我们只用String Helper递增结尾。

于 2013-04-12T21:21:03.107 回答
1

对@swatkins 的回答稍作修改。可能 tha 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;
}
于 2013-04-12T21:27:19.957 回答