Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php url友好的用户名函数,用于检查数据库(如果是唯一的)_Php_Codeigniter_Loops - Fatal编程技术网

Php url友好的用户名函数,用于检查数据库(如果是唯一的)

Php url友好的用户名函数,用于检查数据库(如果是唯一的),php,codeigniter,loops,Php,Codeigniter,Loops,我试图在codeigniter中创建一个函数,使用户名“url友好”。它必须将其全部小写,将丹麦字符æ,ø,å替换为ae,oe,aa,然后执行数据库检查它是否唯一,例如是否有一个名为ægir的用户和一个名为aegir的用户。如果它已经存在,我只想预先输入一个数字,然后再次进行检查 这就是我到目前为止所做的: public function url_username($username) { for($i = 1, "What should i write here?", "What ab

我试图在codeigniter中创建一个函数,使用户名“url友好”。它必须将其全部小写,将丹麦字符
æ,ø,å替换为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?"
        }
    }
}
如果有人能帮我完成这件事,我将不胜感激

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\u用户名开始的内容。我们使用
like
语句,然后按
url\u用户名
降序排序(意思是
myusername\u 3
在结果集中位于
myusername\u 2
之前)。然后我们只返回第一行(因为它将是增量最大的值)——然后我们只使用


好的,我们只需将查询更改为查找任何以经过消毒的
url\u用户名开始的内容。我们使用
like
语句,然后按
url\u用户名
降序排序(意思是
myusername\u 3
在结果集中位于
myusername\u 2
之前)。然后我们只返回第一行(因为它将是增量最大的值)——然后我们只需对@swakins answer进行少量修改即可增加末尾。您的数据库中可能同时存在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;
}

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


你现在在那里写什么?你需要
语法方面的帮助吗?你在说什么?用户名似乎是一个字符串而不是数组,那么为什么会有循环呢?因为它需要在预先输入一个数字后再次检查数据库,然后在数据库不返回行时中断循环。我理解“for”语法,但更多的是我如何将它与我的函数一起使用。它不必是for循环,也可以是whiley,你不需要
for
循环或任何循环。只需更新查询以返回以经过消毒的
url\u用户名开始的记录
——然后,如果按降序排列,则可以增加最大的记录。请看下面我的答案。你现在在那里写什么?你需要
语法方面的帮助吗?你在说什么?用户名似乎是一个字符串而不是数组,那么为什么会有循环呢?因为它需要在预先输入一个数字后再次检查数据库,然后在数据库不返回行时中断循环。我理解“for”语法,但更多的是我如何将它与我的函数一起使用。它不必是for循环,也可以是whiley,你不需要
for
循环或任何循环。只需更新查询以返回以经过消毒的
url\u用户名开始的记录
——然后,如果按降序排列,则可以增加最大的记录。请参阅下面的答案。可以肯定的是,如果我有一个名为ægær(aegaer)和aegær(aegaer_2)的用户,然后我尝试创建aegaer,它将返回aegaer_3?是的,请查看。--(从文档页面)回显增量_字符串('file','');//返回“file_1”--回显增量_字符串('file','-',2);//返回“file-2”--回显增量_字符串('file-4');//返回“file-5”只是为了确定,如果我有一个名为ægær(aegaer)和aegaer(aegaeræu 2)的用户,然后我尝试创建aegaer,它将返回aegaer_3?是的,请查看。--(从文档页面)回显增量_字符串('file','');//返回“file_1”--回显增量_字符串('file','-',2);//返回“file-2”--回显增量_字符串('file-4');//返回“file-5”,我不确定我是否理解这种递归解决方案更好。我的解决方案如何不处理“aegir”和“aegir1”用例?如果返回的用户名是“aegir”,我的解决方案将返回“aegir_1”。如果返回的用户名是“aegir1”,我的解决方案将返回“aegir1\u 1”。如果返回的用户名是“aegir_3”,我的解决方案将返回“aegir_4”。在您发布之前,我已将其全部打印出来,只是还没有单击“提交”。=)个人偏好。首先,我认为aegir_2看起来比aegir_1干净。其次,如果他的数据库中同时存在aegir、aegir1和aegir1_1,会发生什么?您的代码假设,如果用户名是aegir1,那么当aegir1_1可能已经被占用时,数据库中不存在aegir1_1。递归保证了唯一性而不做任何假设。据我所知,字符串助手不会使aegir1_1,而是使aegir_2代替EATEADOK,但如果已经使用aegir_2,这仍然不能解决问题。您需要检查数据库,以确保aegir_2可用,而不仅仅是假设它可用。这就是我建议衰退的原因,因为它会检查以确保incriment_字符串的值可用。您假设aegir和aegir1是相同的用户名,而不是唯一的。我会将它们视为单独的用户名,因为系统使用
用户名-下划线-递增值的约定。因此,aegir1应该增加到aegir1_1,而aegir将增加到aegir_1。因此,唯一的变化是下划线后的递增值。我不确定我是否理解这种递归解决方案更好。我的解决方案如何不处理“aegir”和“aegir1”用例?如果返回的用户名是“aegir”,我的解决方案将返回“aegir_1”。在c