PDA

View Full Version : سوال: تخصصی کردم فرم login



aliramazani
شنبه 14 خرداد 1390, 13:42 عصر
دوستان من یک فرم لوگین دارم که اگه پسورد و یوزرنیم درست باشه به فرم 1 میره و در غیر اینصورت خطا میده.

می خوام اینطور عمل کنه:
اگر پسورد و یوزرنیم درست بود و این کاربر فیلد role آن برابر با admin بود فرم 1 باز بشه و اگر برابر با user بود فرم 2 باز بشه و اگر برابر با vip بود فرم 3 باز بشه.

یعنی اول بیاد چک کنه ببینه پسورد و یوزرنیم درست هست یا نه (تا اینجاش را خودم نوشتم.) بعد بیاد بعد از اینکه پسورد و یوزرنیم درست بود فیلد role را چک کنه و با توجه به اون فرم مورد نظر را باز کنه.


کد من:

private void button1_Click(object sender, EventArgs e)
{

objCommand = new SqlCommand();

objConnection.Open();

objCommand.Connection = objConnection;

objCommand.CommandText = "select count(*) from users where username='" + username.Text + "' and password='" + password.Text + "'";

int value;

value = (int)objCommand.ExecuteScalar();

if (value == 1)
{

Thread form = new Thread(new ThreadStart(Form1));

form.Start();

this.Close();

}

else

MessageBox.Show("نام کاربری یا رمز ورودی اشتباه است");

objConnection.Close();


}
private void Form1()
{

Form1 frmm = new Form1();

Application.Run(frmm);

}

imanamami
شنبه 14 خرداد 1390, 13:47 عصر
متوجه نشدم اون چیزی که من متوجه شدم جوابش خیلی آسونه.شاید منظوره شما چیزه دیگری هست.

با گذاشتن شرط و برابری با مقدار های مورنظر می تونید به هر فرمی که می خواهید بروید

aliramazani
شنبه 14 خرداد 1390, 14:11 عصر
میشه کد من را به اون چیزی که گفتین تغییر بدین؟

imanamami
شنبه 14 خرداد 1390, 14:27 عصر
private void button1_Click(object sender, EventArgs e)
{

objCommand = new SqlCommand();

objConnection.Open();

objCommand.Connection = objConnection;

objCommand.CommandText = "select count(*) from users where username='" + username.Text + "' and password='" + password.Text + "'";

int value;

value = (int)objCommand.ExecuteScalar();

if (value == 1)
{

if(type=="1")
{
frmMain frm=new frmMain();
frm.Show();
}
else if (type == "2")
{
frm1 frm = new frm1();
frm.Show();
}
else if (type == "3")
{
frm3 frm = new frm3();
frm.Show();
}
this.Close();

}

else

MessageBox.Show("نام کاربری یا رمز ورودی اشتباه است");

objConnection.Close();


}

imanamami
شنبه 14 خرداد 1390, 14:27 عصر
بجای Type فیلد نوع حساب کاربری رو واکشی کنید.همین
موفق باشید

aliramazani
شنبه 14 خرداد 1390, 14:35 عصر
بجای Type فیلد نوع حساب کاربری رو واکشی کنید.همین
موفق باشید

یعنی چکار کنم؟
اسم فیلدی که گفتم role هست توی دیتابیس

aliramazani
شنبه 14 خرداد 1390, 16:00 عصر
میشه بیشتر توضیح بدین؟

ma.rad
شنبه 14 خرداد 1390, 16:53 عصر
راه ساده تر اینه که فیلد role رو به صورت عددی تعریف کنید
اگر یک بود مدیر اگر 2 بود کاربر عادی و.......
کافیه بعد از چک کردن صحت نام کاربری وپسورد یه شرط برا باز شدن صفحه بزارید

aliramazani
شنبه 14 خرداد 1390, 20:06 عصر
راه ساده تر اینه که فیلد role رو به صورت عددی تعریف کنید
اگر یک بود مدیر اگر 2 بود کاربر عادی و.......
کافیه بعد از چک کردن صحت نام کاربری وپسورد یه شرط برا باز شدن صفحه بزارید

میشه کد من را به این صورتی که گفتین تغییر بدین؟

aliramazani
شنبه 14 خرداد 1390, 20:25 عصر
واضح تر بگم:

جدول من شامل سه فیلد هستش:

username
password
role

فیلد role یکی از سه مقدار admin یا user یا register را خواهد داشت.

توی فرم من کاربر باید یوزرنیم پسورد وارد کنه. مسلما هر کاربری که دارای یوزر و پسورد توی دیتابیس هست برای فیلد role یکی از سه مقداری که گفتم را خواهد داشت.
توی این فرم کاربر یوزر و پسوردش را وارد می کنه. اینجا باید بررسی بشه که یوزر و پسورد صحیح است یا خیر و اگر صحیح بود بررسی بشه که مقدار فیلد role اون چیه و برای هر مقدار باید دستور خاصی اجرا بشه.

مثلا کاربری که مقدار فیلد role اون برابر با admin هست با وارد کردن یوزرنیم و پسوردش در فرم لوگین می کنه و برای این کاربری که مقدار فیلد role اون برابر با admin باشه یه سری دستور خاص اجرا بشه. حالا اگر این کاربر مقدار role اون user یا register بود باید دستوراتی دیگه اجرا بشه.


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

1. از دیتابیس user فیلد هاش را نشون بده:
SELECT * " + " FROM users where username='" + username.Text + "' and password='" + password.Text + "'"

2. بررسی کن که username و پسورد برابر با مقدار داخل دیتابیس باشه
3. اگر یورنیم و پسورد صحیح نبود پیغام خطا بده
4. اگر یوزرنیم و پسورد صحیح بود مقدار role را بررسی کن که اگر مساوی با admin بود دستور 1 اجرا بشه و اگر مساوی با user بود دستور 2 اجرا بشه و اگر مساوی با register بود دستور 3 اجرا بشه.

نمی دونم خوب رسوندم؟

ma.rad
شنبه 14 خرداد 1390, 21:22 عصر
if(dt.rows[0]["role"].tostring==1)
دستور بازشدن فرم اول

aliramazani
شنبه 14 خرداد 1390, 21:31 عصر
یه دنیا ممنون

اگه میشه کد را تشریح کنید.

dt یعنی چی؟

چرا tostring==1؟
مقدار admin و user و register را چطور جک کنم؟
لطفا ساده بگین من حرفه ای نیستم.

aliramazani
شنبه 14 خرداد 1390, 22:52 عصر
این کد را اینطور ویرایش کردم ولی ظاهرا توی دستور زیر مشکل داره اگه کسی بلده درستش کنه






private void button1_Click(object sender, EventArgs e)
{



objCommand = new SqlCommand();

objConnection.Open();

objCommand.Connection = objConnection;

objCommand.CommandText = "select count(*) from users where username='" + username.Text + "' and password='" + password.Text + "'";

int value;

value = (int)objCommand.ExecuteScalar();

if (value == 1)
{



if EXISTS("Select * from users WHERE role='مدیر نرم افزار'")
{

Thread form = new Thread(new ThreadStart(Form1));

form.Start();

this.Close();

}
else
{

Thread form = new Thread(new ThreadStart(labform));

form.Start();

this.Close();

}

}

else

MessageBox.Show("نام کاربری یا رمز ورودی اشتباه است");

objConnection.Close();

}

private void Form1()
{

Form1 frmm = new Form1();

Application.Run(frmm);

}

private void labform()
{

labform frmmlab = new labform();

Application.Run(frmmlab);

}



مشکل توی دستور زیر:

if EXISTS("Select * from users WHERE role='مدیر نرم افزار'")

B.I.O.H.A.Z.A.R.D
شنبه 14 خرداد 1390, 23:11 عصر
آقا توی اون تاپیک هم صحبت از همیناست :قهقهه: قضیه چیه؟

دستوری که خطا داره Query هستش، و باید قبل از select و داخل کوتیشن باشه. متوجه شدید؟ مثل دستورای دیگه sql میمونه. کد c# نیست که به اون صورت نوشتید!

imanamami
یک شنبه 15 خرداد 1390, 00:08 صبح
کی پست های منو پاک می کنه؟

imanamami
یک شنبه 15 خرداد 1390, 00:09 صبح
دفعه بعد ببینم پست های منو کسی پاک کنه دیگه پست نمی زارم

B.I.O.H.A.Z.A.R.D
یک شنبه 15 خرداد 1390, 09:23 صبح
دفعه بعد ببینم پست های منو کسی پاک کنه دیگه پست نمی زارم

اگر پست شما پاک شده باشه جلوش نوشته میشه توسط چه کسی و چرا پاک شده.

ma.rad
یک شنبه 15 خرداد 1390, 10:48 صبح
یه همچین چیزی چون بعضی جاهاش مشخص نبود

objCommand = new SqlCommand();
objConnection.Open();
objCommand.Connection = objConnection;
objCommand.CommandText = "select * from users ";

SqlDataAdapter da = newSqlDataAdapter();
DataTable dt = newDataTable();
da.SelectCommand = objCommand;
da.Fill(dt);
if (txtpass.Text == dt.Rows[0]["pass"].ToString() && txtuser.Text == dt.Rows[0]["user"].ToString() && dt.Rows[1]["role"].ToString()==1)
{
Form1 fm = newForm1();
this.Hide();
fm.ShowDialog();
}
elseif (txtpass.Text == dt.Rows[1]["pass"].ToString() && txtuser.Text == dt.Rows[1]["user"].ToString() && dt.Rows[1]["role"].ToString()==2)
{
Form2 fm = new Form2();
this.Hide();
fm.ShowDialog();
}
else
{
MessageBox.Show("نام کاربری و یا کلمه عبور صحیح نمی باشد", "پیام خطا ",MessageBoxButtons.OK,MessageBoxIcon.Warning,Messa geBoxDefaultButton.Button1,MessageBoxOptions.Right Align);
txtuser.Clear();
txtpass.Clear();
txtuser.Focus();
}