PDA

نسخه کامل مشاهده نسخه کامل : ورود با نام کاربری و کلمه عبور



mo.mo
26-01-2010, 22:57
سلام
دوستان من یه برنامه نوشتم که تو این کاربر با نام کاربری و کلمه ی عبوری که بهش تخصیص داده شده و تو db هست باید وارد بشه و اطلاعاتش بهش نشون داده بشه.
اگه میشه یه کمکی بکنید .

anvar.net
26-01-2010, 23:31
تا فردا شب منتظر باش, مفصلا برات حلاجیش می کنم
OK

mo.mo
27-01-2010, 11:41
بابا دمت گرم.
:D

saba-gh
27-01-2010, 13:03
سلام منم اين برنامه رو مي خوام .كمكم كنيد لطفا

anvar.net
27-01-2010, 23:25
بر پایی فرم ورود برای برنامه عموما کار چندان پیچیده ای نیست.
کل هدف این فرم گرفتن ورودی کاربر و چک کردن آنها با محتویات موجود در بانک اطلاعاتی است, که در صورت تطبیق آنها وارد برنامه می شویم و در غیر اینصورت کاربر قادر به ورود نیست.

روش های مختلفی برای اینکار وجود دارد, که کلیات همه آنها مشابه با هم اما ممکن است دارای تفاوت های جزئی باشند.

پس بصورت زیر عمل می کنیم :

در مرحله اول ورودی کاربر را می گیرم, پس از ان ورودی فوق را با نام و رمز عبور تطبیق می دهیم

من ساده ترین روش را بیان می کنم و در صورت نیاز بحث را بازتر می کنیم. در این روش ابتدا نام کاربری را گرفته و در بانک جستجو می کنیم تا ببینیم اصلا همچنین نامی وجود دارد یا نه؟ اگر وجود داشت چک می کنیم که آیا رمز عبور کاربر با رمز عبور موجود در بانک یکسان است یا نه؟ اگر یکسان بود یعنی کاربر مجوز ورود به سیستم را دارد.

فرض می کنیم که بانک شما اکسس است (البته فرقی با SQL نمی کند) :
اول نام کاربری را می گیریم و بعنوان پارامتر مورد نیاز یک جستجو به بانک می دهیم (یعنی بدنبال نام کاربری مورد نظر در لیست کاربران می گردیم) اگر همچنین نامی یافت شد, انگاه پسورد ورودی کاربر را با پسورد موجود در بانک چک می کنیم.



Dim strcon As String = "provider=microsoft.jet.oledb.4.0;" & "data source=C:\app.mdb"

Dim con As New OleDbConnection(strcon)
Dim cmd As New OleDbCommand("Select * From users where username=@name", con)
cmd.Parameters.AddWithValue("@name", Me.TextBox2.Text)

con.Open()
Dim reader As OleDbDataReader = cmd.ExecuteReader
With reader
If .HasRows Then

.Read()
If Me.TextBox1.Text = .Item("pass").ToString Then

MessageBox.Show("welcome")
Else

MessageBox.Show("Please enter valid password ")
End If

Else

MessageBox.Show("Please enter valid username")
End If

End With


اما :
برای برنامه های تجاری باید حداقل پسورد را انکرپیت کنید تا از نظر امنیتی مشکلی پیش نیاد.

سعی کنید کلاس مجزایی برای عمل سنجش صحت ورودی ها بنویسید و در واقع از تکنولوژی برنامه چند لایه استفاده کنید (لایه GDI + لایه تجاری + لایه بانک اطلاعاتی).

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

اگه سوالی بود همین جا مطرح کنید اما عجله ای نباشد [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

mo.mo
28-01-2010, 00:17
اقا ممنون.
1- میشه بگین این کد رو چه جوری میشه برای sql هم نوشت؟
2- و چه جوری میشه اطلاعات مربوط به همون کاربر رو بهش نشون داد؟
3- یه راهنمایی در مورد db هم بکنید واقعا ممنون میشم.

anvar.net
28-01-2010, 11:33
واسه SQL هم فرقی نمی کنه, مثل همین میشه , شما می تونید از فراهم کننده داده OLEDB استفاده کنید که عمومی هست و برای اکثریت بانک های اطلاعاتی بکار می رود یا اینکه از فراهم کننده داده اختصاصی SQL استفاده کنید, فراهم کننده دوم در فضای نام System.Data.Sqlclient قرار دارد پس برای اینکه از کلاس های ان استفاده کنید در بالای فرم خود آن را Import کنید.

در کدهای بالا هم هر جای OLEDB بود معادل آنرا در SQL بنویسید : مثلا برای شی اتصال میشود.


Dim con as new sqlConnection


اما در رشته اتصالی که تعریف می کنیم تفاوت هایی وجود دارد : رشته اتصال برای بانک های SQL server باید اطلاعات زیر را فراهم کند (فرقی نمی کند از کدام فراهم کننده داده استفاده کنید یا برای OLEDB یا SQL باید اطلاعات زیر را تعیین کنید):
نوع فراهم کننده (اگر از OLEDB و پایگاه داده SQL استفاده کردید باید از فراهم کننده ای از نوع SQLOLEDB استفاده کنید) اما اگر از فراهم کننده اختصاصی بانک های SQL server استفاده می کنید, فقط فضای نام را به فرم Import کنید و نیازی به مشخص کردن نوع فراهم کننده یا Dataprovider ندارید.
در رشته اتصال باید منبع داده یا Data Source را مشخص کنید که همان سروری است که SQL بر روی آن در حال اجرا اهست. Database که نام پایگاه داده ما می شود. User ID که شناسه کاربری برای دستیابی به بانک اطلاعاتی مزبور است, Password هم رمز عبور کاربر بالا میشود.

فرض می کنیم که نام سرور شما ServerX , نام پایگاه داده AppData , نام کاربری User و رمز عبور Pass باشد. رشته اتصال بصورت زیر می شود :

Dim strconnection As String = "Data Source=ServerX;" _
& "Database=AppData;" & "User ID=User;" & "Password=Pass;"
البته رشته اتصال را بهتر است که در فایل Setting برنامه قرار دهید و یا در رجیستری بنویسید که بهینه تر است.
Quary بالا که برای جستجوی نام کاربر مورد نظر بکار می رود نیز بهتر است بصورت روال ذخیره شده نوشته شود, چرا که از سرعت ببشتری برخوردار است و فواید عجیبه ای هم دارد. نکته دوم اینکه در فراهم کننده داده برای بانک های SQL باید نام پارامتر دقیقا همان چیزی باشد که در روال ذخیره شده بکار برده ایم و همچنین در SQL متد Add کلکسیون Parameters متدی بارگذاری شده است یعنی می توانید یکی از چند متد ممکن را انتخاب کنید در حالت عمومی در این متد باید نام پارامتر, نوع داده ای پارامتر و اندازه آنرا مشخص کنید.


بقیه هم مشابه با بالا میشوند (تمامی اشیائی که وابسته به نوع فراهم کننده OLEDB هستند باید به SQL تغییر داده شوند).

برای نشان دادن اطلاعات کاربر باز هم از یک جستجوی ساده استفاده می کنید, یک عبارت SQL می نویسید که اطلاعات کاربر را از جدول X بگیرد, نام کاربر یا ID اون رو بعنوان پارامتر به شی کمند ارسال می کنید و هر جوری که خواستی اونا رو نشون می دی. حتی می تونید با توجه به گروه کاربری پس از تائئید صحت ورودی ها, کاربر را به فرم خاصی سوق بدهید.

بایت DB هم در ساده ترین حالت : شما باید جدولی مخصوص اعضا داشته باشید که اطلاعات انها را در خود ذخیره کند, این بستگی به نوع کار شما و میزان اطلاعات موجود برای انها دارد. البته ذکر این نکته هم لازم است که نوع داده ستون های کاربر و رمز عبور باید از یونیکد پشتبانی کند و حداکثر تعداد کارکترهای دو فیلد فوق را ساپوت کند. اگر این این دو فیلد بصورت رمز شده (انکریپت شده) هستند باید با توجه به کلاس مورد استفاده در رمز کردن آنها سایز آنها را تعیین کنید چرا که اگررمز یا نام عبور بصورت انکریپت شده ذخیره شوند چندین برابر حالت عادی فضا می گیرند..

در پناه حق

mo.mo
28-01-2010, 12:24
سلام.
من اگه بخوام تو یه فرمی مثلا با دادن کد درس تمام اطلاعات اون درس رو تو یه data grid view ببینم چی کار باید بکنم؟
البته db مون آماده شده و تو sql هم هست.
ممنون میشم یکم سریع جواب بدید.

anvar.net
28-01-2010, 14:50
این هم یک جستجوی ساده است, فرض می کنیم شما جدولی بنام Lessons دارید که می خواهید کد درس رو بدید و بعد اطلاعات اون رو بگیرید. نتایج خروجی رو هم تو دیتاست می ریزی بعدش هم کنتل datagrid view رو به دیتاست Bind می کنی.

شی اتصال رو مثل توضیحات بالا تنظیم کن, عبارت SQL رو هم مثل بالا ست کن, فقط نام جدول ها رو تغییر بده, مثلا :


"Select * From tablename where LessonCode=@LessonCode"
tablename= your table in database

Cmd.parameters.AddWithValue("@LessonCode", Txtinputcode.text)
Txtinputcode برای گرفتن کد درس بکار می رود
در تعداد پارامترهای ارسالی هم محدودیتی وجود نداره شما می تونید هر چقدر که خواستید ارسال کنید.

در آخر هم برخلاف مثال های قبلی که از شی Datareader استفاده کردیم در اینجا از شی DataAdapter استفاده می کنیم.


Dim objdataadapter as new SQLDataAdapter(name of your Command object)

در اخر هم نتایج برگشتی از datadapter رو داخل دیتاست می ریزیم

Dim objdataset as new DataSet

objdataadapter.fill(datasetname or objdataset, "tablename or lessons")


حالا اگر نتیجه ای برگشت داده شود در داخل دیتاست و در جدولی بنام Tablename یا در اینجا Lessons ریخته می شود. برای این که اطلاعات داخل دیتاست در کنترل Datafrid view نمایش داده شوند . خاصیت دیتاسیت و Datamember آنرا با دیتاست و جدول خودمان ست می کنیم.

Datagridview1.dataset=objdataset
Datagridview1.Datamember="Tablename or Lessons"

mo.mo
28-01-2010, 16:13
خیلی ممنون. ولی اگه میشه اینو تو c# بهم بده.
این سایته که گفتی کار نکرد.
error داد.
واقعا از کمکت ممنون.

anvar.net
28-01-2010, 17:31
هر دو تا کاری که خواسته بودی تو این مثال هست

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

منتها به Vb.net , اصلا C# تو سیستمم نیست, یه سرچ کن
Convert C# code to vb.net

anvar.net
28-01-2010, 17:37
تو این وب سایت نگاه کن

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])