PDA

View Full Version : سوال: مشکل در کد نویسی فرم لاگین



sajadzare
جمعه 28 تیر 1392, 22:21 عصر
سلام دوستان

من توی این سایت و سایتهای دیگه کدهای زیادی در مورد لاگین دیدم ولی هیچ کدوم کارساز نبودن.

ببینید من یه فرم دارم که دو تا تکست باکس برای نام کاربری و رمز عبور داره و دو تا دکمه ورود و انصراف
یه دیتا بیس sql دارم که یه جدول داره. این جدول سه تا فیلد داره id کلید اصلیشه username و password هم دو تا فیلد nvarchar هستند.

من میخوام که یوزرهایی بتونن به فرم اصلیم برن که توی جدول وارد شدن.

اگه دوتا تکست باکس خالی باشن پیام بده اطلاعات را وارد نمایید
اگه تکست باکس یوزرنیم پر بود ولی تکست پسورد خالی بود پیام بده که پسوردو وارد کن
اگه تکست یوزرنیم خالی بود وپسورد پر بود پیام بده که یوزرنیم رو وارد کن
اگه یوزر نیم توی جدول بود ولی پسورد اشتباه بود پیام پسورد اشتباه است بده
اگه یوزرنیم توی جدول نبود پیام بده نام کاربری اشتباه است
اگر هم نام کاربری و پسورد توی جدول بودن لوگین اتفاق بیفته و به فرم اصلی برم

نیازی به رمزگذاری پسوردها ندارم یه ارتباط ساده با بانک اطلاعات میخوام که یوزر پسوردو چک کنه.
خواهش میکنم نمونه کار با زبونهای دیگه برام نذارین get و set و از اینجور کدها خوشم نمیاد.

لطفا کد سی شارپ ش رو برام بذارید.

ممنون از دوستانی که بهم کمک میکنن

esafb52
جمعه 28 تیر 1392, 23:24 عصر
تو نمونه برنامه ها جناب دانیال افشاری یکی گذاشته اون رو ببینید

mohabad
شنبه 29 تیر 1392, 00:01 صبح
سلام دوستان

من توی این سایت و سایتهای دیگه کدهای زیادی در مورد لاگین دیدم ولی هیچ کدوم کارساز نبودن.

ببینید من یه فرم دارم که دو تا تکست باکس برای نام کاربری و رمز عبور داره و دو تا دکمه ورود و انصراف
یه دیتا بیس sql دارم که یه جدول داره. این جدول سه تا فیلد داره id کلید اصلیشه username و password هم دو تا فیلد nvarchar هستند.

من میخوام که یوزرهایی بتونن به فرم اصلیم برن که توی جدول وارد شدن.

اگه دوتا تکست باکس خالی باشن پیام بده اطلاعات را وارد نمایید
اگه تکست باکس یوزرنیم پر بود ولی تکست پسورد خالی بود پیام بده که پسوردو وارد کن
اگه تکست یوزرنیم خالی بود وپسورد پر بود پیام بده که یوزرنیم رو وارد کن
اگه یوزر نیم توی جدول بود ولی پسورد اشتباه بود پیام پسورد اشتباه است بده
اگه یوزرنیم توی جدول نبود پیام بده نام کاربری اشتباه است
اگر هم نام کاربری و پسورد توی جدول بودن لوگین اتفاق بیفته و به فرم اصلی برم

نیازی به رمزگذاری پسوردها ندارم یه ارتباط ساده با بانک اطلاعات میخوام که یوزر پسوردو چک کنه.
خواهش میکنم نمونه کار با زبونهای دیگه برام نذارین get و set و از اینجور کدها خوشم نمیاد.

لطفا کد سی شارپ ش رو برام بذارید.

ممنون از دوستانی که بهم کمک میکنن

این 100% جواب میده:لبخندساده:
private void button1_Click(object sender, EventArgs e)
{
if (txtUsername.Text.Length == 0 && txtPassword.Text.Length > 0)
{
MessageBox.Show("نام کاربری وارد نشده");
}
else if (txtUsername.Text.Length == 0 && txtPassword.Text.Length == 0)
{
MessageBox.Show("لطفا نام کاربری و رمز عبور را وارد کنید");
}
else if (txtUsername.Text.Length > 0 && txtPassword.Text.Length == 0)
{
MessageBox.Show("رمز عبور را وارد کنید");
}
else
{
if (txtUsername.Text != "snake" && txtPassword.Text != "123456")
{
MessageBox.Show("نام کاربری یا رمز عبور وارد شده صحیح نمی باشد");
}
else if (txtUsername.Text == "snake")
{
if (txtPassword.Text != "123456")
{
MessageBox.Show("نام کاربری یا رمز عبور وارد شده صحیح نمی باشد");
}
else if (txtPassword.Text == "123456")
{
Form2 frm = new Form2();
frm.Show();
}
}
}


}
}
}

sajadzare
شنبه 29 تیر 1392, 00:14 صبح
دوستان عرض کردم ارتباط با دیتابیس رو حتما باید داشته باشه تا بشه بعدا بهش یوزر اضافه کنم و از دیتا بیس بخونم...........

من یه نمونه رو پیدا کردم بد نیست ولی در قسمت else کار نمیکنه . مشکلش چیه ؟


private void button1_Click(object sender, EventArgs e)
{

SqlConnection sql_con = new SqlConnection();
sql_con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\saja d\Documents\Visual Studio 2010\Projects\Bayegani\Bayegani\Database1.mdf;Inte grated Security=True;User Instance=True";

sql_con.Open();
SqlCommand sql_cmd = new SqlCommand("SELECT username,password FROM usertable WHERE username='" + txtusername.Text + "' and password='" + txtpassword.Text + "'", sql_con);
SqlDataReader _dr;
_dr = sql_cmd.ExecuteReader();
while (_dr.Read())
{
if (_dr["username"].ToString() == txtusername.Text && _dr["password"].ToString() == txtpassword.Text)
{
MessageBox.Show("Welcome");
this.Hide();
Form1 ff = new Form1();
ff.ShowDialog();
}
else
{
MessageBox.Show("username and password is not valid");
}
}
_dr.Close();
sql_con.Close();
}

danialafshari
شنبه 29 تیر 1392, 01:14 صبح
قبل از ایجاد تاپیک جستجو کنید
http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=1707265&viewfull=1#post1707265

sajadzare
شنبه 29 تیر 1392, 01:19 صبح
دوست عزیز سلام/ عرض کردم جستجو کردم ولی به نتیجه مطلوب نرسیدم.

shadi khanum
شنبه 29 تیر 1392, 08:22 صبح
جواب سوالتتون رو که دوستان دادن، من یه پیشنهاد برای منطق پیغامهای فرم لاگینتون دارم.
به عنوان پیشنهاد چیزی که من خودم به عنون تجربه دارم و البته توی کتابا و تمام برنامه های جدی رعایت میشه اینه که اگر username یا پسورد اشتباه بود به کاربر نمیگن کدوم اشتباهه، میگن نام کاربری یا کلمه عبور صحیح نمیباشد . چون این باعث میشه امنیت برنامتون بیاد پایین.. البته باز هم خودتون میدونید.
موفق باشید

mohammad5530
شنبه 29 تیر 1392, 08:46 صبح
از نظر بنده اگر این کار رو از Linq انجام میدادید خیلی راحت تر بود برای شما دوست عزیز

طبق گفته ی دوستمون هم بهتره که ارور به این شکل باشه "نام کاربری و یا رمز عبور اشتباه است" .

sajadzare
شنبه 29 تیر 1392, 09:10 صبح
ممنون از نظرات سازنده تون. با نظراتتون موافقم. میشه بگین کد بالا چرا در قسمت else کار نمیکنه و پیام نمایش داده نمیشه. اصلا بگید اون کد منطقش درسته ؟ چون من احساس میکنم تنها در صورتی if اجرا میشه که هر دو تکست باکس صحیح باشند و اگه هرکدومشون اشتباه باشند وارد else نمیشه.... میشه یکی تست کنه و بهم بگه اشکال از کجاست ؟

veniz2008
شنبه 29 تیر 1392, 10:08 صبح
ممنون از نظرات سازنده تون. با نظراتتون موافقم. میشه بگین کد بالا چرا در قسمت else کار نمیکنه و پیام نمایش داده نمیشه. اصلا بگید اون کد منطقش درسته ؟ چون من احساس میکنم تنها در صورتی if اجرا میشه که هر دو تکست باکس صحیح باشند و اگه هرکدومشون اشتباه باشند وارد else نمیشه.... میشه یکی تست کنه و بهم بگه اشکال از کجاست ؟
سلام.
دلیل اینکه اون else اجرا نمیشه اینه که وقتی یوزر و پسوردی با اون مقادیر وارد شده پیدا نمیشه، اصلا وارد حلقه نمیشه. شرط حلقه میگه تا زمانیکه رکوردی برای خوندن وجود داره کدهای داخل حلقه اجرا بشه. برای رفع این مشکل ابتدا چک کنید که ایا select شما رکوردی رو برمیگردونه یا نه. اگر رکوردی رو برگشت داد وارد حلقه بشید وگرنه دستور else رو که میگه چنین نام کاربری یا پسوردی وجود نداره رو نشون بدید. برای چک کردن اینکه آیا رکوردی برگشت داده میشه یا نه از خصوصیت HasRows استفاده کنید.
چند نکته:
1. نیازی به else درون حلقه ندارید. چون وقتی رکوردی برگشت داده نمیشه، اولین if اجرا نمیشه و وارد else میشید.
2. چون یوزنیم و پسورد منحصر بفرد هست و نهایتا یک رکورد بیشتر برگشت داده نمیشه نیازی به while نیست. نوشتنش اشتباه نیست ولی ضرورتی هم نداره. چون while زمانی استفاده میشه که چندین رکورد برگشت داده بشه.
3. سبک کوئری که برای دستور Select نوشته شده، سال هاست که منسوخ شده. چون براحتی میشه این select رو هک کرد و وارد برنامه شد (بهش میگن sql injection ). برای رفع این مشکل از پارامترها استفاده کنید.

private void button1_Click(object sender, EventArgs e)
{

SqlConnection sql_con = new SqlConnection();
sql_con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\saja d\Documents\Visual Studio 2010\Projects\Bayegani\Bayegani\Database1.mdf;Inte grated Security=True;User Instance=True";

sql_con.Open();
SqlCommand sql_cmd = new SqlCommand("SELECT username,password FROM usertable WHERE username='" + txtusername.Text + "' and password='" + txtpassword.Text + "'", sql_con);
SqlDataReader _dr;
_dr = sql_cmd.ExecuteReader();
if(_dr.HasRows)
{
while (_dr.Read())
{
if (_dr["username"].ToString() == txtusername.Text && _dr["password"].ToString() == txtpassword.Text)
{
MessageBox.Show("Welcome");
this.Hide();
Form1 ff = new Form1();
ff.ShowDialog();
}
}
}
else
{
MessageBox.Show("نام کاربری یا کلمه عبور وارد شده صحیح نیست");
}
sql_con.Close();
}