这是这种情况,我有注册页面,允许用户注册,但只允许用户输入他们的名字、姓氏电子邮件和密码。数据存储在临时用户表中,这适用于尚未激活其帐户的用户。
成功注册后,用户可以通过电子邮件激活他们的帐户,一旦激活,数据就会移动到另一个表并从临时表中删除。(我知道有些人可能不同意这种方法,但这是我选择的方法)。这一切都很好。
我现在面临的问题是,我有一个用于用户名的字段,这实际上仅用于构建 URL,如下所示:example.com/home/first.last.56 但它必须是唯一的,当然一旦激活并登录,用户将能够稍后更改此设置。
我知道如果我只允许用户选择他们自己的用户名并且从长远来看可能更简单,那么这会更容易,但是目前我不想这样做。
我想过要做的事情:
使用“临时表”中的唯一行 ID 并将其放在字符串的末尾,如下所示: first.last.56 其中 first 和 last 是用户的名字和姓氏,56 是临时表中的唯一行 ID。这行得通,但我认为一旦表格增长到 1500 或 2000,那么用户名将会很长,即 first.last.1597 并且在 url 的外观方面有点眼痛,而且 url 不是非常用户友好。我想将此保持在 2 位数的最大值。
在保持唯一用户名的同时,还有哪些其他方法可以实现此目的?
只要名称与用户的真实姓名相似,我也可以使用名字或姓氏的字母来创建用户名。
这是我的代码到目前为止的样子:
$new_member_insert_data = array(
'First_Name' => ucfirst(strtolower($first_name)),
'Last_Name' => ucfirst(strtolower($last_name)),
'Email' => $this->input->post($this->session->userdata('email_n_attribute')),
'Password' => $hash,
'Confirm_Code' => $confirm_code,
'IP' => $_SERVER['REMOTE_ADDR']
);
$insert = $this->db->insert('Temp_Account', $new_member_insert_data);
$this->db->select('idAccount');
$query = $this->db->get_where('Temp_Account', $new_member_insert_data);
if($query->num_rows() == 1){
foreach($query->result() as $row){
$user_name = array('User_Name' => $first_name.'.'.$last_name.'.'.$row->idAccount);
$this->db->where('idAccount', $row->idAccount);
$this->db->update('Temp_Account', $user_name);
}
}