PDA

View Full Version : جلوگیری از ثبت نام با نام کاربری یکسان



abbas3zaar
شنبه 15 اسفند 1394, 12:15 عصر
سلام من در فرم ثبت نام بدون مشکل insert میکنم ولی میخوام قبل از insert چک بشه که نام کاربری ها یکسان نباشه و اگر یکسان بود پیام خطا بده
الان دو تا نام کاربری abbas در دیتابیس هست:

http://8pic.ir/images/u8qoicj3pchjog1kccse.jpg

پیام حیاتی
شنبه 15 اسفند 1394, 13:17 عصر
من نمونه کد دات نت رو اینجا قرار میدم خودتون تبدیل کنید :


SqlConnection con = new SqlConnection("Data Source=localhost; Initial Catalog=Ticket; Integrated Security=TRUE ");
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from Categorie where c_id='" + txtCategorieCode.Text + "' ", con);
DataTable db = new DataTable();
da.Fill(db);
if (db.Rows.Count == 0)
{
string date_en = DateTime.Now.ToString("yyyy-MM-dd");
PersianCalendar p = new PersianCalendar();
string date_fa = p.GetYear(DateTime.Now) + "/" + p.GetMonth(DateTime.Now) + "/" + p.GetDayOfMonth(DateTime.Now);
string time = DateTime.Now.ToString("hh:mm:ss");
string Query = "insert into Categorie (c_id , c_departname , c_name , c_date_en , c_date_fa , c_time) values ('" + txtCategorieCode.Text + "' , '" + dropViewDepart.SelectedItem.Text + "' , '" + txtCategorieName.Text + "' , '" + date_en + "' , '" + date_fa + "' , '" + time + "') ";
SqlCommand com = new SqlCommand(Query, con);
com.ExecuteNonQuery();
txtCategorieCode.Text = string.Empty;
txtCategorieName.Text = string.Empty;
lblCategorieSuccess.Visible = false;


}
else
{
lblCategorieSuccess.Visible = true;
lblCategorieSuccess.Text = " کد مجموعه در سیستم موجود است.";
}
con.Close();

abbas3zaar
شنبه 15 اسفند 1394, 14:05 عصر
من نمونه کد دات نت رو اینجا قرار میدم خودتون تبدیل کنید :


SqlConnection con = new SqlConnection("Data Source=localhost; Initial Catalog=Ticket; Integrated Security=TRUE ");
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from Categorie where c_id='" + txtCategorieCode.Text + "' ", con);
DataTable db = new DataTable();
da.Fill(db);
if (db.Rows.Count == 0)
{
string date_en = DateTime.Now.ToString("yyyy-MM-dd");
PersianCalendar p = new PersianCalendar();
string date_fa = p.GetYear(DateTime.Now) + "/" + p.GetMonth(DateTime.Now) + "/" + p.GetDayOfMonth(DateTime.Now);
string time = DateTime.Now.ToString("hh:mm:ss");
string Query = "insert into Categorie (c_id , c_departname , c_name , c_date_en , c_date_fa , c_time) values ('" + txtCategorieCode.Text + "' , '" + dropViewDepart.SelectedItem.Text + "' , '" + txtCategorieName.Text + "' , '" + date_en + "' , '" + date_fa + "' , '" + time + "') ";
SqlCommand com = new SqlCommand(Query, con);
com.ExecuteNonQuery();
txtCategorieCode.Text = string.Empty;
txtCategorieName.Text = string.Empty;
lblCategorieSuccess.Visible = false;


}
else
{
lblCategorieSuccess.Visible = true;
lblCategorieSuccess.Text = " کد مجموعه در سیستم موجود است.";
}
con.Close();


در حد تبدیل نیستم دیگه!
ولی همین کدتون رو اگر توضیحی بدی فکر کنم متوجه میشم

us1234
شنبه 15 اسفند 1394, 15:32 عصر
یک سلکت count بزنید


select Coun(*) from tbl_user where user_name = '".$user."'


اگر مقدار به دست آمده از 0 بیشتر بود یعنی نام کاربری قبلا ثبت شده ...

مهرداد سیف زاده
شنبه 15 اسفند 1394, 16:29 عصر
راه بهتری هم هست و اونم unique نوع فیلد username و email هست. داده تکراری نمیتونه insert یا update بشه.
برای جلوگیری از خطای مقدار تکراری هم میتونید از دستور زیر استفاده کنید

INSERT IGNORE INTO `users` (`username`,`email`) VALUES ('ali','ali@gmail.com');

بعد با تابع lastInsertId چک میکنید که اجرای دستور id رو برگردونده. که اگر عدد آخرین id ذخیره شده رو برگردونه یعنی کاربر ثبت نام شده در غیر این صورت یا نام کاربری یا ایمیل تکراری هست.

abbas3zaar
شنبه 15 اسفند 1394, 17:16 عصر
راه بهتری هم هست و اونم unique نوع فیلد username و email هست. داده تکراری نمیتونه insert یا update بشه.
برای جلوگیری از خطای مقدار تکراری هم میتونید از دستور زیر استفاده کنید

INSERT IGNORE INTO `users` (`username`,`email`) VALUES ('ali','ali@gmail.com');

بعد با تابع lastInsertId چک میکنید که اجرای دستور id رو برگردونده. که اگر عدد آخرین id ذخیره شده رو برگردونه یعنی کاربر ثبت نام شده در غیر این صورت یا نام کاربری یا ایمیل تکراری هست.

آقا مهرداد این روش خوبه میتونه ایمیل تکراری رو هم جلوشوش بگیره و هم نام کاربری، ما آماتوریم برای من آماتوری میشه توضیح بدی؟

abbas3zaar
شنبه 15 اسفند 1394, 19:41 عصر
اقا مهرداد یکم میشه ساده تر و با یک مثال توضیح بدی؟

مهرداد سیف زاده
یک شنبه 16 اسفند 1394, 03:13 صبح
شما در phpmyadmin بر روی فیلد username کلیک کنید و گزینه unique رو کلیک کنید
همین کار رو برای email هم انجام بدید
بعد در هنگام insert اگر داده تکراری باشه خطا میده. برای جلوگیری از این خطای تکراری بودن از دستور ignore استفاده میشه.
اگر از pdo استفاده میکنید در جواب فراخوانی دستور query که اگر چیزی رو insert کنه میتونید تابع lastInsertId رو فراخوانی کنید که id موردی رو که insert کرده بهتونید برگردونه
اگر این تابع هیچ عددی رو برنگردونه یعنی اصلا چیزی insert نشده و اگر عدد رو برگردونه یعنی کاربر ثبت نام شده

abbas3zaar
یک شنبه 16 اسفند 1394, 07:55 صبح
شما در phpmyadmin بر روی فیلد username کلیک کنید و گزینه unique رو کلیک کنید

همین کار رو برای email هم انجام بدید
بعد در هنگام insert اگر داده تکراری باشه خطا میده. برای جلوگیری از این خطای تکراری بودن از دستور ignore استفاده میشه.





ممنون . unique کردم و وقتی الان ثبت نام رو میزنم میره صفحه ی register.php هم برای نام کاربری و هم ایمیل این ارور میاد:

Query Failed , Duplicate entry 'abbas' for key 'user_name'
Query Failed , Duplicate entry 'shahram@gmail.com' for key 'user_email'

http://8pic.ir/images/uifq4ywhybwufc40beel.jpg


چون فرم عضویت و ورود من به صورت Modal هست (عکسش رو این پایین گذاشتم) ، اگر بخوام نره به صفحه ی دیگه ای و همان قسمت Modal که باز هست وقتی کاربر تایپ کرد و submit زد به صورت jquery ajax زیر input یک متنی بیاد که "نام کاربری تکراری است" یا اینکه "نام کاربری قابل قبول است". مثل فرم ثبت نام انجمن های گفتگو!

http://8pic.ir/images/hhbyf0jamvw858k7gjoo.jpghttp://8pic.ir/images/gbj25vgqburskhpe76ip.jpg




البته فرم ثبت نام من (این زیر) چون با بوت استرپ validator کار کردم به صورت زیر هست و اعتبار سنجی بدون دیتابیس میشه
فقط مونده که validator از دیتابیس نام کاربری و ایمیل رو بخونه مثل عکس بالا که واسه انجمن های ویبولتین هست!
اگه مثالی برا دانلود باشه خیلی خوب میشه که از دیتابیس چک کنه. انگلیسی هم باشه مشکل نداره


http://8pic.ir/images/lci917mqhgnvxs96i7q0.jpg



اگر از pdo استفاده میکنید در جواب فراخوانی دستور query که اگر چیزی رو insert کنه میتونید تابع lastInsertId رو فراخوانی کنید که id موردی رو که insert کرده بهتونید برگردونه
اگر این تابع هیچ عددی رو برنگردونه یعنی اصلا چیزی insert نشده و اگر عدد رو برگردونه یعنی کاربر ثبت نام شده

این خط رو متوجه نشدم چون pdo استفاده نکردم !!!

abbas3zaar
دوشنبه 17 اسفند 1394, 07:40 صبح
پیدا کردم. خیلی هم خووووووب

میزارم اینجا شاید کسی مثل من دنبالش باشه. تشکر

لینک دمو (http://demos.codingcage.com/username-availability/)
لینک مطلب


(http://www.codingcage.com/2015/09/jquery-username-availability-live-check.html)-----------------------
این هست (http://www.bitrepository.com/a-simple-ajax-username-availability-checker.html)

این هست (http://phppot.com/jquery/live-username-availability-check-using-php-and-jquery-ajax/)

اینم هست (http://www.shawngo.com/examples/ajax-username-check/)