PDA

View Full Version : ورود هر کاربربه برنامه با رمز اختصاصی خود



ebi_rah
سه شنبه 25 فروردین 1388, 14:52 عصر
با سلام خدمت همه دوستان
من یک برنامه نوشتم که هر کاربر بتونه با رمز خودش وارد برنامه بشه ولی مشکلی که هست اینه که یه کاربر می تونه با رمز دیگه ای هم تو بانک وجو داره , وارد برنامه بشه.
من از SQL برای ذخیره کاربران و رمز عبورشان استفاده کردم و تو دلفی هم با Query نوشتم
لطفا دوستان راهنمایی بفرمایند.



begin
str1:= 'Select * from usernames where (Name =' + Username.Text + ') And (Pass =' + s +')';
with dm do
begin
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add(str1);
ADOQuery1.ExecSQL;
if (DM.adoquery1.Locate('name',trim(Username.Text),[loCaseInsensitive])) and
(DM.adoquery1.Locate('pass',trim(s) ,[loCaseInsensitive])) then
if (trim(username.Text) ='admin' ) and
(DM.ADOpasstable.Locate('pass',trim(s) ,[loCaseInsensitive])) then
begin
passform.Hide;
initialform.Show; //administrator form
end
else
begin
passform.Hide ;
userform.Show ; // user form that must be work
end
else
begin
MessageBeep(50);
ShowMessage(نام کاربری یا رمز اشتباه است'');
password.SetFocus;
Password.Clear;
end;
dm.ADOpasstable.Close ;
end;
end;

Ahmad Chehreghani
سه شنبه 25 فروردین 1388, 15:32 عصر
سلام
بهتره يک تکه برنامه به عنوان مثال اينجا بزاريد
........................

z_bluestar
سه شنبه 25 فروردین 1388, 16:42 عصر
بیشتر توضیح بدین در مورد برنامه تون و بگید دقیقا چی می خواهید ؟؟
آیا در برنامه کاربر های جدید ایجاد یا ویرایش می شن؟؟؟

as13851365
چهارشنبه 26 فروردین 1388, 11:16 صبح
بهتر است که هم نام کاربری و هم پسورد رو در Query ها وارد کنی

مثلا من از روش زیر استفاده می کنم :
1 ) اول بررسی می کنم ببینم مقدار نام کاربری و پسورد خالی نباشن
2 ) نام کاربری رو که حتما هم نباید تکرای باشه رو در Query قرار می دم در نتیجه اگر جدول خالی بود که نام کاربری وجود نداره در غیره این صورت حتما یک مورد یافت می شه
3 ) پسورد وارد شده توسط کاربر رو با پسوردی که در رکورد انتخابی ( همان تک رکوردی که نام کاربری رو فیلتر کردم ) برابر است یا نه اگر برابر بود که کاربر به برنامه وارد می شه در غیره این صورت نه.

البته یه روش ساده هم هست مثلا :
1 ) بررسی خالی نبودن مقدار ورودی ها ( نام کاربری و پسورد )
2 ) نام کاربری و پسورد رو در Query قرار بده اگر جدول خالی بود یعنی یا نام کاربری اشتباه است یا پسورد اشتباه است یا کاربری با چنین مشخصاتی ثبت نشده .... در غیره این صورت کاربر به برنامه وارد می شه

ebi_rah
پنج شنبه 27 فروردین 1388, 15:25 عصر
ممنون از توضیحاتی که دادید.
اما برام پیش اومده که نام کاربری در جدول وجود داره و تو Query اونو دریافت می کنه ولی رمز رو از یه رکورد دیگه بر می داره به این ترتیب کاربر با وارد کردن کلمه مثلا Admin می تونه وارد فرم اصلی بشه

Ahmad Chehreghani
پنج شنبه 27 فروردین 1388, 16:28 عصر
لطفا پست اولتونو ويرايش نکنيد!!!

در کد زير چون تبديل به کد SQL ميشه مقدار را توي کتيشن بايد بزاريد باQuotedStr


str1:= 'Select * from usernames where (Name =' + Username.Text + ') And (Pass =' + s +')';

اشکال اصليتونم همينجاست و چون درهم نوشتيد جواب نمي گيريد:


if (DM.adoquery1.Locate('name',trim(Username.Text),[loCaseInsensitive])) and
(DM.adoquery1.Locate('pass',trim(s) ,[loCaseInsensitive])) then
if (trim(username.Text) ='admin' ) and
(DM.ADOpasstable.Locate('pass',trim(s) ,[loCaseInsensitive])) then

اگر از ADOQuery1.SQL براي کوئري گرفتن استفاده کرديد ديگه Locate براي چيه؟!!!

يه نگاهي به اين تاپيک بندازيد فکر کنم مشکلتون رفع بشه
http://www.barnamenevis.org/forum/showthread.php?t=151946

موفق باشيد

mafazel
جمعه 28 فروردین 1388, 08:18 صبح
سلام دوستان
تنها موردی که میمونه حساس به حروف کوچک و بزرگ بودن پسورد هستش Case Sensitive




str1:= 'Select * from usernames where (Name =' + Username.Text + ') And (Pass =' + s +')';

.....
اگر از ADOQuery1.SQL براي کوئري گرفتن استفاده کرديد ديگه Locate براي چيه؟!!!

فرض می کنیم منظورشون از استفاده از Locate در قسمت پسورد تشخیص این مسئله باشه اما من امتحان کردم جواب نداد!!! . یک راه ساده اش استفاده از دستور StrComp دلفی است.
توی دستور Select راهی برای Case Sensitive بودن پارامترهای where وجود داره؟
ممنون

M aJi D
شنبه 29 فروردین 1388, 19:50 عصر
سلام.
بايد توي بانكت بر اساس user name بگردي و passمربوط به اون userبريزي تو يك متغير بعد اون متغيرو با محتوي Editمربوط به pass چك كني اگر درست بود اجازه ورود بده.

select pass from table1 where name=nametxt
x=ado.fieldes[0].as string
if x= passtxt
enter

موفق باشيد

ebi_rah
دوشنبه 31 فروردین 1388, 07:33 صبح
آقا مجید ممنون
ظاهرا قطعه برنامه شما منطقی تر به نظر می رسه ولی زمانی که اجرا می کنم با پیغام خطا زیر مواجه می شم.

Line 1: Incorrect syntax near '&'

Ahmad Chehreghani
دوشنبه 31 فروردین 1388, 13:21 عصر
سلام.
بايد توي بانكت بر اساس user name بگردي و passمربوط به اون userبريزي تو يك متغير بعد اون متغيرو با محتوي Editمربوط به pass چك كني اگر درست بود اجازه ورود بده.

select pass from table1 where name=nametxt
x=ado.fieldes[0].as string
if x= passtxt
enter

چرا؟


آقا مجید ممنون
ظاهرا قطعه برنامه شما منطقی تر به نظر می رسه ولی زمانی که اجرا می کنم با پیغام خطا زیر مواجه می شم.

منطقي تر!
به اون لينکي که دادم سر زديد؟ اگه يه جستجو توي سايت بکنيد پر از برنامه هايي هستش که مربوط به ورود کاربر مي شه

موفق باشيد

M aJi D
سه شنبه 01 اردیبهشت 1388, 12:21 عصر
آقا مجید ممنون
ظاهرا قطعه برنامه شما منطقی تر به نظر می رسه ولی زمانی که اجرا می کنم با پیغام خطا زیر مواجه می شم.


Line 1: Incorrect syntax near '&'


سلام.
به این خاطر ایراد میگیره که تکه برنامه من جهت راهنمایی بود و سازگار با کد دلفی شما نیست.
ببینید شما در قسمت:
str1:= 'Select * from usernames where (Name =' + Username.Text + ') And (Pass =' + s +')';
with dm do
بجای* select بنویسید Select Pass و از قسمت( and(Pass ننویسید.اینجوری دستور شما پسورد مربوط به userپیدا می کنه و میاره و میریزه تو str1 بعد هم 1if ساده بنویسید که با editpassمقایسه کنه. البته دلیل تعجب دوستم رو هم حدس می زنم چون در این حالت بایدuser name کلید باشه یعنی تکراری نباشه.

موفق باشید