PDA

View Full Version : سوال: تغییر رمز عبور برای کاربر



sahata
دوشنبه 10 خرداد 1389, 17:01 عصر
باسلام
من یه فرم دارم که کاربر بتونه رمز عبور خودشو تغییر بده توی پایگاه داده ام هم جدولم با نامkarbarهست و دارای فیلدهایkidکهouto incrimentهستش وkname,kfamily,username,passwordمیباشداگ فیلدهایkid,username,passwordرو کلیداصلی بگیریم موقع اجرا هرچندتا کاربر که رمز عبورشون یکی باشه رو هم یوزر و هم پسوردشونو برابر با همون کاربری که وارد شدیم میکنه واگه username,passwordکلیداصلی کنیم پیغام میده که نباید مقدار تکراری وارد کنیم



privatevoid btnChange_Click(object sender, EventArgs e)
{
SqlConnection connection = newSqlConnection("Data Source=.;Initial Catalog=taediepezeshki;Integrated Security=True");
SqlCommand command = newSqlCommand();
command.Connection = connection;

bool isLogin = false;

connection.Open();
command.CommandText =("Select username,password From karbar ");

SqlDataReader dataReader = command.ExecuteReader();
string username = string.Empty;
string password = string.Empty;
while (dataReader.Read())
{
username = dataReader.GetString(0).ToString();
password = dataReader.GetString(1).ToString();
if (password.Trim() == txtPass.Text.Trim())
{
isLogin = true;
break;
}
}
connection.Close();
if (isLogin == true && txtConPass.Text.Trim() == txtNewPass.Text.Trim()&& username==textBox1.Text)
{
command.Connection = connection;
connection.Open();
command = newSqlCommand("Update karbar SET username=N'"+username.Trim()+"' , [password]=N'"+txtNewPass.Text.Trim()+"' Where [password]=N'"+txtPass.Text+"'");
command.Connection = connection;
command.ExecuteNonQuery();
MessageBox.Show("تغییرات", "رمزتغییریافت ", MessageBoxButtons.OK);
connection.Close();
this.Close();
}
if (isLogin == false)
MessageBox.Show("خطا","رمز عبورصحیح نمیباشد ", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (txtConPass.Text.Trim() != txtNewPass.Text.Trim())
{
MessageBox.Show("خطا","تکرار رمزعبورصحیح نمیباشد ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}





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

spring69
دوشنبه 10 خرداد 1389, 17:40 عصر
سلام.
1- قاعدتا نبايد يوزرنيم تكراري باشه. (ميتونه كليد اصلي باشه)
2- توي شرطت (Where) چرا پسورد رو چك ميكني؟(بايد يوزرنيم رو چك كني.)
3- چرا يوزرنيم رو توي دستور آپديت ست ميكني. مگه ميخواي كاربر بتونه يوزرنيم رو هم تغيير بده؟؟!!!

sds1920
دوشنبه 10 خرداد 1389, 18:26 عصر
شما بهتره همون username رو به عنوان كليد اصلي تعريف كني و قبل از ويرايش يا اضافه كردن كاربر يك Query از ديتابيس بگيري.مثل زير :


.
.
.
Adapter.SelectCommand.CommadText="SELECT COUNT(username) WHERE username='sds1920'";
int Count=(int)Adapter.SelectCommand.ExecuteScaler();
if(Count<1)
}
.
.
.
{

mmd2009
دوشنبه 10 خرداد 1389, 23:41 عصر
این کد پایین : طبق چیزی که دوستمون هم گفتن ایراد نداره ولی بهترش اینه که فقط اجازه بدی پسوورد عوض بشه و اون رو هم کلید اصلی نکنی و فقط مقدار یوزر نیم رو کلید اصلی بکنی




command = newSqlCommand("Update karbar SET username=N'"+username.Trim()+"' , [password]=N'"+txtNewPass.Text.Trim()+"' Where [password]=N'"+txtPass.Text+"'");

sds1920
سه شنبه 11 خرداد 1389, 15:18 عصر
اينم نظريه.ولي من فكر مي كنم بايد به كاربر آزادي عمل داده بشه.

mmd2009
سه شنبه 11 خرداد 1389, 17:37 عصر
اخه میدونی دوست عزیز اگر به کاربر آزادی عمل داده بشه و بیاد مقدار یوزر نیم رو پسوورد یکی دیگه رو بده به خودش و هر دو کاربر با یک یوزر و پسس وارد برنامه بشن یک فاجعه رخ میده تو برنامه نویسی

البته نظر شخصی منه

sds1920
سه شنبه 11 خرداد 1389, 18:07 عصر
شما درست مي گي.ولي مثل اينكه جواب منو خوب نخونده بودي.
من گفتم فيلد username رو كليد اصلي بگيره و قبل از add يا edit يك query از ديتابيس بگيره تا مطمئن بشه كه اين usrename قبلا استفاده نشده باشه.در اينصورت تداخلي رو كه شما مي گي به وجود نمياد.

mehdimdp
سه شنبه 11 خرداد 1389, 18:21 عصر
منم دقیقا با sds1920 موافقم. یعنی شما اگر فقط usernameرو به عنوان کلید در نظر بگیری و قبل از ثبت هرگونه تغییری (از جمله کاربرجدید) در سیستم بیایید چک کنید که آیا این username فعلی در سیستم وجود دارد یا نه که اگر وجود داشت اجازه ی ثبت اون username رو به کاربر نمی دهید.