PDA

عرض كامل الموضوع : كود لتغيير كلمة السر في فيجوال بيسك دوت نت



جنان20005
01-11-2005, 01:20 AM
السلام عليكم
أنا عملت برنامج على فيجوال بيسك دوت نت بحيث يحتوي على ثلاث فورمات
الفورم الأول يتم المستخدم بإدخال كلمة المستخدم واسم المرور في تكسات بوكس ويتم الضغط على أحد الأزرار الثلاثة(موافق، تغيير كلمة السر، إلغاء الأمر)
البوتون موافق:يتم من خلاله التاكد من صحة اسم المستخدم وكلمة المرور(بواسطة فتح ملف نصي يتم القراءة منه يحوي على عدة أسماء مستخدمين مع كلمات السر) وبعد التاكد من صحة البيانات يتم نقله إلى الفورم الثاني او رسالة خطأ إذا المعلومات خاطئة ( والحمدلله كتبت كود هذا البوتون على اكمل وجه :D )
البوتون تغيير كلمة السر :85: إللي جنني: يتم من خلاله فتح فورم جديد طبعاً بعد التاكد من صحة اسم المستخدم وكلمة المرور وبنفس الطريقة من خلال فتح ملف نصي وهذي الخطوة مشت معي اوكي والحمدلله
نجي للخطوة الثانية وهنا بداية الـ...... :84: في الخطوة هذي حيفتحلي الفورم الجديد اللي يحتوي على كلمة المرور الجديدة وإعادة كتابة الكلمة طبعاً المستخدم حيكتب الكلمة وإعادتها في تكسات بوكس وبعد الضغط على زر موافق حيفتح البرنامج نفس الملف النصي الذي يحتوي على اسماء المستخدمين وكلمات المرور وحيتم كتابة كلمة المرور الجديدة في الملف النصي
الخطوة هذي مشت معي نص أوكي يعني كتبت الكود صح إذا كان الملف النصي يحتوي فقط على اسم مستخدم واحد مع كلمة المرور الخاصة به
بس اذا كان الملف النصي يحتوي على عدة أسماء مستخدمين(وهو المطلوب)اش هو الكود اللي اكتبه بحيث يقرأ اسم المستخدم إللي كتبها المستخدم في الفورم الأول ويغير كلمة السر اللي كتبها المستخدم في الفورم الجديد؟؟؟ :confused:

إن شاء الله الشرح يكون واضح ويعطيكم العافية

xxx
01-11-2005, 02:40 AM
أهلا بجنان 20005

أحب اسألك ليش ما تستخدم قواعد البيانات لتخزين المعلومات ، انظف من تخزينها على ملف نصي؟

فبالتالي تنشأي قاعدة بيانات جدول فيه ثلاث حقول أو اكثر ، بالشكل هذه
ID
username
password

و يصير تحت كل حقل تتخزن المعلومات المطلوبة لكل شخص بها ...


---------------------

إن كنت تريد حلها عن طريق الملف النصي فقط ، و هي طريقة حل غير نظيفة في رأيي ، لانه كلمات السر وقتها ستكون ظاهرة للجميع -لو كانت غير مشفرة- ، أو سيكون بالامكان تحرير الملف - إن لم يكن محميا- أو غير ذلك.


على العموم الظاهر انت عندك مشكلة في التخزين الى الملف النصي ، فكأنك تخزن المعلومة في السطر الأول فقط ، و عندما ياتي اليوزر الثاني يدخل معلوماته فتتخزن نفس المعلومة في السطر الأول ايضاً . (إن كان هذا الافتراض غير صحيحا ارجو منك اخباري بما يحصل عندك عند هذه النقطة، و ذلك بنسخ محتويات هذا السطر عندنا او اعطاءنا نسخة من للكود لقراءته).

إن كان هذا صحيحاً فانت الان بحاجة الى التسجيل على اكثر من سطر بصورة عامودية مثلا ، أو ابتكار طريقة للكتابة بصورة افقية تكون بها كل المعلومات، لتقوم بابتكار طريقة لقراءة هذه المعلومات.

عن نفسي قمت سابقا بتسجيل البيانات على شكل ملف نصي من نوع ini بالشكل التالي

[username]
Password=ISIDLKFLKF
و من ثم يقرأ برنامج الخانة الثانية من كلمة باسوورد.

و هذه الطريقة ايضا غير مثالية، فلو قمت بتغيير اسم مستخدم في وقت من الاوقات فستحصل لخبطة بسيطة، و الافضل هو عملها بالشكل التالي :
[ID]
username=اسم الشخص
Password=ISIDLKFLKF

فيسهل بعدها التعامل مع رقم عضوية للمستخدمين ، و استخدام هذا الرقم في كل اماكن البرنامج و تغيير الاسم فقط ان لزم، دون ان يؤثر ذلك الكثير على عمل البرنامج (خاصة في البرامج الكبيرة) .


على العموم كان حلي هذا باستخدام برنامج الدلفي على لغة باسكال ، و اعتقد ان الفيجوال بيسك يعمل بطريقة مشابهة ايضا في التعامل مع ملفات ini .


إن لفت انتباهك اي من الافكار التي بالاعلى ، اخبرني لابحث لك عن ما يقابلها في الفيجوال بيسك دوت نت و امدادك بها.


تحياتي الحارة

جنان20005
01-11-2005, 08:15 AM
انا لسا ما اخذت قواعد البيانات
وللأسف ما فهمت طريق حلك وبالنسبة للكود
هذا حيكون داخل بوتون تغيير كلمة المرور في الفورم الأول

Private Sub BtnChangePassword_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnChangePassword.Click
Dim userdata As IO.StreamReader
Dim f As New FrmNewpassword

userdata = IO.File.OpenText("usernames&passwords.txt")
Do While userdata.Peek <> -1 And username <> TxtUsername.Text

username = userdata.ReadLine
password = userdata.ReadLine
Loop
If TxtUsername.Text = username And TxtPassword.Text = password Then
Me.Hide()
f.Show()

ElseIf MsgBox("لا تملك الصلاحيات لتغيير كلمة المرور") Then
End If
userdata.Close()


End Sub





End Class

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

Private Sub BtnNewpassword_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnNewpassword.Click




Dim a As String
If (TxtNewpassword.Text = TxtRenewpassword.Text) And (TxtNewpassword.Text.Length >= 8) Then
Dim userdatar As IO.StreamReader = IO.File.OpenText("usernames&passwords.txt")
Dim userdataw As IO.StreamWriter = IO.File.CreateText("C:
.txt")
a = userdatar.ReadLine
userdatar.ReadLine()


userdataw.WriteLine(a)
userdataw.WriteLine(TxtNewpassword.Text)
userdatar.Close()
userdataw.Close()
IO.File.Delete("usernames&passwords.txt")
IO.File.Move("C:
.txt", "usernames&passwords.txt")


Me.Hide()
openform.Show()

ElseIf TxtNewpassword.Text = TxtRenewpassword.Text And TxtNewpassword.Text.Length < 8 Then
MsgBox("يجب ادخال ثمانية حروف على الأقل")
clear()
Else

MsgBox("تأكد من كتابة إعادة اسم المرور الجديدة بشكل صحيح")
clear()
End If


End Sub
Sub clear()

TxtNewpassword.Clear()
TxtRenewpassword.Clear()
TxtNewpassword.Select()



End Sub

طبعا زي ما قلتلك هذا الكود اكتبه لما يحتوي الملف النص على اسم مستخدم واحد مع كلمة مروره
يعني سؤالي هو كيف اغير في الكود بحيث استطيع ان اتاكد من عدة مستخدمين

ومشكور&#215;&#215;&#215; على تعاونك والله يعطيك العافية

xxx
01-11-2005, 11:23 AM
سؤال ؟

هل التخزين على الملفات النصية txt اجباري ؟ ام تستطيع التخزين على ملف نصي اخر من نوع ini مثلا؟

جنان20005
01-11-2005, 04:42 PM
نعم إجباري وأنا معاك في اللي قلته انه لو بقاعدة بيانات افضل بس ما باليد حيلة أما عن نوع iniفهو الأخر غير مطلوب
مشكوووووووووووووور

xxx
01-11-2005, 11:38 PM
آسف جدا لتأخير ، كنت ابحث لطريقة لتنصيب الفيجوال بيسك على جهازي هذا الذي استخدمه لاعطاءك الطريقة لكني فشلت .

على العموم انت قلت مشكلتك في تسجيل البيانات لاكثر من مستخدم ، فبالتالي المشكلة هي انك لا تستطيع اضافة بيانات جديدة إضافية الى الملف النصي .

خذ هذا الكود احضرته لك يقوم بهذه العملية ، فقط اقتبس منه الفكرة:



Dim FILE_NAME As String = "C: est.txt"
Dim i As Integer
Dim aryText(4) As String

aryText(0) = "Mary WriteLine"
aryText(1) = "Had"
aryText(2) = "Another"
aryText(3) = "Little"
aryText(4) = "One"

Dim objWriter As New System.IO.StreamWriter(FILE_NAME, True)

For i = 0 To 4
objWriter.WriteLine(aryText(i))
Next

objWriter.Close()
MsgBox("أضيف النص إلى أخر الملف")






و هذا كود للقراءة من ملف به عدة اسطر




Dim FILE_NAME As String = "C: est.txt"
Dim TextLine As String

If System.IO.File.Exists(FILE_NAME) = True Then

Dim objReader As New System.IO.StreamReader(FILE_NAME)

Do While objReader.Peek() <> -1
TextLine = TextLine & objReader.ReadLine() & vbNewLine
Loop

Textbox1.Text = TextLine

Else

MsgBox("الملف غير موجود")

End If





أنصحك بتالي لاكتشاف خطأك او لمزيد من التوضيح لي إن أردت :
1- اكتب ملف نصي بنفسك به البيانات المسجلة : اسم المستخدم و رقمه السري ، اسم المستخدم الاخر و رقم السري،.... الخ بالطريقة والترتيب التي تأمل أن يقرأها برنامجك ....

2- بعد ان تعبأ البيانات هذه يدويا ، تأكد ان برنامجك يقرأ هذه البيانات و يتوصل لكل شخص باسمه و يتعرف الى رقمه السري كما هو بالملف .

3- المرحلة الاخيرة ، هي كتابة مثل هذا الملف اليا عبر البرنامج ، و هي مرحلة بسيطة استخدم الكود الثاني لفعل هذا مع تغيير بعض المعطيات .

استطيع افادتك في ذلك و اعطاءك بعض التصورات ،

كم كنت أتمنى لو احصل على البرنامج الان لكنت أريتك الحل سريعا :(

سامحنا ، و ننتظر عودتك ان لا زلت تحتاج أفكارا أو اقتراحة .

و قبل لا أنسى ، كتابتك للكود جيدة ، إن كانت كلها كتابتك :).

جنان20005
02-11-2005, 11:24 AM
معقولة تحمل فيجوال عشان تجاوب على سؤالي؟؟
والله من جد ما قصرت وجزاك الله خير
أنا بحاول اجرب طريقتك
والكود اللي كتبته ايه بنفسي كتبته طبعا بمساعدة المنهج