الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية تعديل اسم المستخدم وكلمة المرور

بدأه m_b في 9 نوفمبر 2009 · 11 رد · 2,502 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم شباب

عندي فورم به 4 تكست بوكس

الاول ادخال اسم المستخدم المراد تغيير كلمة المرور له

الثاني ادخال كلمة المرور المراد تغييرها

الثالث ادخال كلمة المرور الجديدة

الرابع تأكيد كلمة المرور الجديدة

طبعاً اسم المستخدم وكلمة المرور محفوطة في قاعدة بيانات في جدول باسم Users

المراد اولاً التحقق ان اسم المستخدم وكلمة المرور موجودة في جدول USERS ومن ثم يتم استبدال كلمة المرور فقط دون تغيير لاسم المستخدم بعد التأكد من ان كلمة المرور الجديدة وتأكيد كلمة المرور الجديدة متطابقة

طبعاً هذا كله في حدث زر التعديل

ارجو ان تكون الفكرة واضحة

#2

و عليكم السلام و رحمة الله تعالى و بركاته...

عذرا أخي و لكنك تطلب حلا بدون أن ترفق محاولتك لحل المطلوب منك!

لو أمكن أن ترسل لنا الكود الذي توصلت إليه و سنحاول إن شاء الله مساعدتك على قدر المستطاع.

تحياتي...

#3

اخي العزيز محمد رضى هذا هو الكود

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Then

MsgBox("ں驤ںک ں§¦ںé ¤êïم ںéçïê ¬èé ­¥ï¥")

ElseIf TextBox3.Text <> TextBox4.Text Then

MsgBox("èéê، ںéê©ي© ں餧ï§ى نï© ê¢لں ç،")

End If

conn = New OleDbConnection(ConStr)

Dim sqlSearch As String = "select UserName, Password from Users where UserName='" & TextBox1.Text & "' and Password ='" & TextBox2.Text & "'"

MyDataSet = New DataSet

Dim MyAdapter As New OleDbDataAdapter(sqlSearch, conn)

MyDataSet.Clear()

MyAdapter.Fill(MyDataSet, "Users")

If Me.BindingContext(MyDataSet, "users").Count = 0 Then

MsgBox("اسم المستخدم او كلمة المرور غير صحيحة")

End If

Dim Cmd As New OleDbCommand

Cmd.Connection = conn

Cmd.CommandType = CommandType.Text

Cmd.CommandText = "UPDATE Users SET Password ='" & Trim(TextBox3.Text) & "'WHERE UserName='" & TextBox1.Text & "'"

conn.Open()

Cmd.ExecuteNonQuery()

MyAdapter.Update(MyDataSet, "Users")

conn.Close()

MsgBox("تمت عملية التعديل بنجاح")

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

TextBox1.Focus()

Catch ex As Exception

conn.Close()

MsgBox(Err.Description, MsgBoxStyle.Critical)

End Try

End Sub

وعند طبيق الكود تطله هذه الرسلة

Syntax error in UPDATE statement

#4

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Then

MsgBox("الرجاء ادخال جميع القيم بشكل صحيح")

ElseIf TextBox3.Text <> TextBox4.Text Then

MsgBox("كلمة المرور الجديده غير متطابقة")

End If

Dim n As String = Lab.Text

conn = New OleDbConnection(ConStr)

Dim sqlSearch As String = "select UserName, Password from Users where UserName='" & TextBox1.Text & "' and Password ='" & TextBox2.Text & "'"

MyDataSet = New DataSet

Dim MyAdapter As New OleDbDataAdapter(sqlSearch, conn)

MyDataSet.Clear()

MyAdapter.Fill(MyDataSet, "Users")

If Me.BindingContext(MyDataSet, "users").Count = 0 Then

MsgBox("اسم المستخدم او كلمة المرور غير صحيحة")

End If

Dim Cmd As New OleDbCommand

Cmd.Connection = conn

Cmd.CommandType = CommandType.Text

Cmd.CommandText = "UPDATE Users SET UserName ='" & TextBox1.Text & "', Password ='" & Trim(TextBox3.Text) & "'WHERE UserName='" & n & "'"

conn.Open()

Cmd.ExecuteNonQuery()

MyAdapter.Update(MyDataSet, "Users")

conn.Close()

MsgBox("تمت عملية التعديل بنجاح")

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

TextBox1.Focus()

Catch ex As Exception

conn.Close()

MsgBox(Err.Description, MsgBoxStyle.Critical)

End Try

End Sub

#5

جملة الـ Update الخاصه بك الشكل النهائى لها كالتالى

UPDATE Users SET Password ='test'WHERE UserName = 'test'

كما ترى كلمة Where ملاصقة تماما للـ Single Quote و هو ما قصد يسبب مشكلة اثناء تنفيذها، فقط قم بوضع مسافة بينهم.

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#6

شكراً لك اخي محمد علاء الدين

هذا الكود بعد التعديل ونفس الرساله تطلع

Syntax error in UPDATE statement

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Then

MsgBox("الرجاء ادخال جميع القيم بشكل صحيح")

ElseIf TextBox3.Text <> TextBox4.Text Then

MsgBox("كلمة المرور الجديده غير متطابقة")

End If

conn = New OleDbConnection(ConStr)

Dim sqlSearch As String = "select UserName, Password from Users where UserName='" & TextBox1.Text & "' and Password ='" & TextBox2.Text & "'"

MyDataSet = New DataSet

Dim MyAdapter As New OleDbDataAdapter(sqlSearch, conn)

MyDataSet.Clear()

MyAdapter.Fill(MyDataSet, "Users")

If Me.BindingContext(MyDataSet, "users").Count = 0 Then

MsgBox("اسم المستخدم او كلمة المرور غير صحيحة")

End If

Dim Cmd As New OleDbCommand

Cmd.Connection = conn

Cmd.CommandType = CommandType.Text

Cmd.CommandText = "UPDATE Users SET Password ='" & TextBox3.Text & "' & "' WHERE UserName='" &TextBox1.Text & "'"

conn.Open()

Cmd.ExecuteNonQuery()

MyAdapter.Update(MyDataSet, "Users")

conn.Close()

MsgBox("تمت عملية التعديل بنجاح")

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

TextBox1.Focus()

Catch ex As Exception

conn.Close()

MsgBox(Err.Description, MsgBoxStyle.Critical)

End Try

End Sub

ما اريدة هو تعديل كلمة المرور وحفظ القيمة الجديدة من التكست بوكس رقم 3 والشرط هو اسم المستخدم

ـــــــــــــــــــــــــــــــ

كما اريد فضلاً لا أمراً

طريقة ربط Combobox مع جدول مكون من حقلين بحيث يظهر الحقل الاول في الـ Combobox والحق الثاني في TextBox

وشكراً

#7

كما قال الأخ محمد علاء, الخطأ في تلك الجملة. إنتبه إلى الكركترز " و '

Cmd.CommandText = "UPDATE Users SET Password = '" & TextBox3.Text & "' WHERE UserName = '" &TextBox1.Text & "'"

انسخ الكود أعلاه و ألصقه مكان الجملة في كودك و إن شاء الله ستعمل.

كما أن لي تعليق على الكود :

Cmd.ExecuteNonQuery()
MyAdapter.Update(MyDataSet, "Users")

استعمل إما تنفيذ جملة التحديث عن طريق ExecuteNonQuery أو عن طريق DataAdapter و ليس الإثنين معا!

#8

ارجو استخدام الـ Tags الخاصه بالكود لجعل قرائة الكود سهله حيث انه بهذا الإسلوب الأمر صعب.

جملة الـ Update تأخذ الشكل التالى :

UPDATE TableName
SET	Field = Value
WHERE  condition

الكود الذى قمت بكتابته لجملة الـ Update يفضل ان تقوم بتحديثه ليصبح كالتالى حتى يسهل قرائته و ايضا للعلم فهذه الطريقه اسرع فى التنفيذ من عملية دمج النصوص المعتاده:

const sql_update As String = "UPDATE {0} SET {1} = '{2}' WHERE {3} = '{4}';"

Dim strUpdate As String = String.Format(sql_update, "Users", "Password", "Password_value", "UserName", "UserName_value")

قم بتجربة جملة الـ Update بهذا الشكل و ان شاء الله ستعمل

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#9

السلام عليكم شباب

لم تفلح جيمع المحاولات لهذا سوف ارفق ملف المشروع

اسم المستخدم للبرنامج 1

وكلمة المرور 1

طبعاً اسم الفورم هو

UpdatePassword

كما اود من الاخوة المساعد في ربط Combobox بحقل في قاعدة البيانات في الفورم ClassMove وهو حقل IDClass وبعد اختيار رقم الصنف يتم اضهار اسم الصنف في التكست بوكس المسمى اسم الصنف

وشكراً

قاعدة البيانات في المرفقات

Stores.rar

#10

الحل ابسط مما كنت اتخيل، الكلمه Password لها معنى خاص لـ Access لذا قم فقط بوضع القوسين [ و ] حول اسم العمود و سوف تعمل الجمله بشكل سليم.

لقد جربتها و عملت لدى، لذا تصبح جملة التحديث هى :

Cmd.CommandText = "UPDATE Users SET [Password] = '" & TextBox3.Text & "' WHERE UserName = '" &TextBox1.Text & "'"

ملحوظه : حاول بقدر الإمكان ان تفكر فى كود اقل مما تملك و يقوم بنفس الوظيفه لتسريع البرنامج فمثلا داخل الشاشه لديك يوجد الكود التالى للتحقق من وجود اسم المستخدم بنفس كلمة المرور المدخله يليها تحديث الجدول الخاص بكلمات المرور:

conn = New OleDbConnection(ConStr)
Dim sqlSearch As String = "select UserName, Password from Users where UserName='" & TextBox1.Text & "' and Password ='" & TextBox2.Text & "'"

MyDataSet = New DataSet

Dim MyAdapter As New OleDbDataAdapter(sqlSearch, conn)
MyDataSet.Clear()
MyAdapter.Fill(MyDataSet, "Users")

If Me.BindingContext(MyDataSet, "users").Count = 0 Then
	MsgBox("اسم المستخدم او كلمة المرور غير صحيحة")
End If

Dim Cmd As New OleDbCommand
Cmd.Connection = conn
Cmd.CommandType = CommandType.Text
Cmd.CommandText = "UPDATE Users SET Password = '" & TextBox3.Text & "' WHERE UserName = '" & TextBox1.Text & "'"

conn.Open()

Cmd.ExecuteNonQuery()
MyAdapter.Update(MyDataSet, "Users")

الكود السابق يمكن تقليله ليعمل بكفائه اعلى ليصبح كالتالى:

conn = New OleDbConnection(ConStr)

Dim cmd As OleDbCommand = conn.CreateCommand
conn.Open()

cmd.CommandType = CommandType.Text
cmd.CommandText = "select UserName, Password from Users where UserName='" & TextBox1.Text & "' and Password ='" & TextBox2.Text & "'"

Dim tmpDR As OleDbDataReader = cmd.ExecuteReader

If tmpDR.HasRows = False Then
	MsgBox("اسم المستخدم او كلمة المرور غير صحيحة")
	conn.Close()
End If

tmpDR.Close()

cmd.CommandText = String.Format("UPDATE Users SET [Password] = '{0}' WHERE UserName = '{1}'", TextBox3.Text, TextBox1.Text)
cmd.ExecuteNonQuery()

توجد افكار اخرى لهذه الشاشه مثل :

1 - لا داعى من المستخدم ان يدخل اسم المستخدم لإنه ادخله من قبل فيمكنك الإحتفاظ به و فقط تطلب منه كلمة المرور القديمه و الجديده و تأكيد الجديده.

2 - كلمة المرور نفسها لا تقم بحفظها داخل الجدول فقط قم بحفظ الـ Hash الخاص بها و ذلك عن طريق الداله GetHashCode الخاصه بالمتغير النصى الذى توجد كلمة المرور بداخله و عند المقارنه قم بإحضار الـ Hash للكلمه المدخله و قارنها مع المسجله داخل قاعدة البيانات و بهذا لا يمكن معرفة كلمة المرور ابدا و لكن صاحبها هو فقط من يستطيع معرفتها، نقطه اخرى بخصوص الـ Hash و هى ان الـ Hash الناتج لكلمة مرور مثل Ahmed ليست مثل ahmed و بالتالى كلمة المرور ستصبح case sensitive و يمكنك التحايل على هذا الأمر بتحويل الكلمه المدخله من المستخدم إلى حروف صغيره قبل حفظ الـ Hash الخاص بها داخل قاعدة البيانات.

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#11

شكراً لك اخي محمد علاء الدين على المساعدة

وياريت تساعدني في القسم الثاني من السؤال حول ربط Combobox بقاعدة البانات

#12

للرفع

مواضيع مشابهة