これが状況です。ユーザーがサインアップできる登録ページがありますが、ユーザーは姓、名の電子メールとパスワードを入力することしかできません。データは一時ユーザー テーブルに保存されます。これは、まだアカウントをアクティブ化していないユーザー用です。
登録が成功した後、ユーザーは電子メールでアカウントをアクティブ化できます。アクティブ化されると、データは別のテーブルに移動され、一時テーブルから削除されます (この方法に反対する人もいるかもしれませんが、これが私が選択した方法です) )。これはすべてうまくいきます。
私が今直面している問題は、ユーザー名用のフィールドがあることです。これは実際には、example.com/home/first.last.56 のような URL の構築にのみ使用されますが、一意である必要があり、もちろんユーザーは、アクティブにしてログインすると、後でこれを変更できます。
ユーザーが自分のユーザー名を選択できるようにするだけで簡単になり、長期的にはおそらく簡単になることはわかっていますが、当面はこれをやりたくありません。
私がやろうと思ったこと:
「一時テーブル」からの一意の行 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);
}
}