我正在尝试在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?"
}
}
}
如果有人能帮我完成这件事,我将不胜感激。
答案 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;
}