ایجاد نام کاربری یکتا همانند gmail و yahoo
مدتی پیش نیاز داشتم که نام کاربری (username) کابرانی که در سایت ثبت نام می کنند را بر اساس اسمی که وارد میکنند بسازم مثل سیستمی که در ثبت نام سایت های Google و FB وجود دارد . بنابراین یک تابع برای به این نتیجه یعنی نام کاربری یکتا و پیشنهادی نوشتم
تابع زیر نام و نام خانوادگی کاربر را ترکیب , اسم های طولانی را کوتاه و چند عدد رندوم به عنوان پسوند اضافه می کند
پس اگر قصد داشته باشم از روی اسم “hasan shafeii” بسازم نتیجه نام کاربری من “hasanshfae2” می شود .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function generate_username($string_name="hasan shafeii", $rand_no = 200){ $username_parts = array_filter(explode(" ", strtolower($string_name))); //explode and lowercase name $username_parts = array_slice($username_parts, 0, 2); //return only first two arry part $part1 = (!empty($username_parts[0]))?substr($username_parts[0], 0,8):""; //cut first name to 8 letters $part2 = (!empty($username_parts[1]))?substr($username_parts[1], 0,5):""; //cut second name to 5 letters $part3 = ($rand_no)?rand(0, $rand_no):""; $username = $part1. str_shuffle($part2). $part3; //str_shuffle to randomly shuffle all characters return $username; } //usage echo generate_username("hasan shafeii", 10); |
ساخت نام کاربری یکتا از روی دیتابیس mysql
خب یاد گرفتیم چطور یک نام کاربری از روی اطلاعات اسمی کاربر بسازیم اما چه میشود اگر این یوزرنیم از قبل داخل دیتابیس وجود داشته باشد ؟!
این مورد باعث نتیجه تکراری و خطای اسکریپت می شود . پس در مثال بعدی ما به ساخت نام کاربری یکتا می پردازیم و همچنین بررسی میکنیم که این نام قبلا در دیتابیس ثبت نشده باشد .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//Generate a unique username using Database function generate_unique_username($string_name="hasan shafeii", $rand_no = 200){ while(true){ $username_parts = array_filter(explode(" ", strtolower($string_name))); //explode and lowercase name $username_parts = array_slice($username_parts, 0, 2); //return only first two arry part $part1 = (!empty($username_parts[0]))?substr($username_parts[0], 0,8):""; //cut first name to 8 letters $part2 = (!empty($username_parts[1]))?substr($username_parts[1], 0,5):""; //cut second name to 5 letters $part3 = ($rand_no)?rand(0, $rand_no):""; $username = $part1. str_shuffle($part2). $part3; //str_shuffle to randomly shuffle all characters $username_exist_in_db = username_exist_in_database($username); //check username in database if(!$username_exist_in_db){ return $username; } } } function username_exist_in_database($username){ $mysqli = new mysqli('localhost','mysql_username','password','databasename'); //connect to database if ($mysqli->connect_error) { die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error); } $statement = $mysqli->prepare("SELECT id FROM users WHERE username =?"); $statement->bind_param('s', $username); if($statement->execute()){ $statement->store_result(); return $statement->num_rows; } } //usage echo generate_unique_username("hasan shafeii", 10); |
اوکی . کار ما اینجا تمام شد . امیدوارم این کد کاربردی را داخل پروژه هایی که می نویسید به کار ببرید . اگر خواستید این کد رو بهتر کنید و توسعش بدید , لطفا در بخش نظرات ارسال کنید .
موفق باشید .
سلام.
ممنون میشم جواب بدید.میخوام مثل اینستاگرام http://example.com/username
بعد از نام دامنه ایدی کاربر رو بتونم بسازم …خب یه راهنمایی کلی کنید ممنون میشم…ایا این روش مثل اینستاگرام دارای پوشه هست اما پوشه تو url مخفی شده یا طور دیگست…؟
سلام. از روت ها استفاده میشه که میتونید این آموزش را ببینید :
https://netparadis.com/generate-seo-friendly-url-in-php
برا انجام کارهای شرکت