آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ایحاد سیستم register/login ؟

javac  12 سال پیش  12 سال پیش
+1 0

من میخوام سیستم ثبت نام کاربر  رو  به نرم افزارم اضافه کنم یک جدول درست کردم به اسم users با سه تافیلد 

id |username | password

در سمت اندروید دوتا edittext برای دریافت user و password و یک دکمه گذاشتم در رویداد کلیک دکمه 

به این صورت :

  btnSingin.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                if (edtUsername.getText().toString().length() > 0 && edtPassword.getText().toString().length() > 0) {
                    Username = edtUsername.getText().toString();
                    Password = edtPassword.getText().toString();

                    Cursor cursorUsername = G.database.rawQuery("select * FROM users WHERE username  LIKE   '%" + Username + "%'", null);
                    Cursor cursorPassword = G.database.rawQuery("select * FROM users WHERE username  LIKE   '%" + Password + "%'", null);

                    Log.i("", "Username: " + Username);
                    Log.i("", "Password: " + Password);

                    if (cursorPassword != null & cursorUsername != null) {

                        while (cursorUsername.moveToNext()) {
                            valueUsername = cursorUsername.getString(cursorUsername.getColumnIndex("username"));
                        }
                        while (cursorPassword.moveToNext()) {
                            valuePassword = cursorPassword.getString(cursorPassword.getColumnIndex("password"));
                        }
                        cursorUsername.close();
                        cursorPassword.close();

                        Log.i("", "valueUsername: " + valueUsername)
                        Log.i("", "valuePassword: " + valuePassword);

                        if (valueUsername.equals(Username) && valuePassword.equals(Password)) {
                            Intent intent = new Intent(G.currentActivity, ActivityMain.class);
                            G.currentActivity.startActivity(intent);
                            finish();

                        } else {
                            Toast.makeText(G.context, "نام کاربری یا رمز عبور اشتباه است", Toast.LENGTH_SHORT).show();
                        }
                    }
                    else {
                        Toast.makeText(G.context, "چنین کاربری در سیستم وجود ندارد", Toast.LENGTH_SHORT).show();
                    }

                }
                else {
                    Toast.makeText(G.context, "لطفا نام کاربری و رمز عبور را وارد کنید", Toast.LENGTH_SHORT).show();
                }
            }
        });

وقتی نرم افزار رو اجرا میکنم  با وارد کردن یوزرنیم و پسورد  و زدن دکمه ورود برنامه کرش میکنه و در logcat خطای nullException میده به خاطر همین اون log ها رو گذاشتم تا ببینم مشکل از چیه !! متوجه شدم که قسمت cursorPassword مقدارش نال هست با وجود اینکه شرط هم گذاشتم اما از برنامه خارج میشه !! حالا میخواستم نظرتون رو بپرسم مشکل از کجای کد هست؟

ایده ی بهتر و امن تری برای پیاده سازی این سیستم سراغ ندارید؟!

0 0
من تو برنامم کلاس G رو ندارم بجا G.database چی بنویسم یا اگه چیزی ننویسم مشکلی پیش میاد؟ (12 سال پیش)
0 0
کلاس G یک کلاس global هست برای ایجاد متغیرهای استاتیک که هرموقع نیاز داشتیم به راحتی صداشون بزنیم واستفاده کنیم حالا اگر شما نمیخواین از این کلاس استفاده کنید میتونید دیتابیس رو در همین اکتیویتی جاری مقدار دهی و استفاده کنید اما بهتره از کلاس G استفاده کنید. (12 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  12 سال پیش
+3 0

نکاتی چند :

توی هر دو تا کوئری تو فیلد کاربر جستجو رو انجام دادی در حالی که مگه نباید برای پسورد دنبالش تو فیلد خودش باشی؟

فقط یک کوئری نیازه نه دو تا ، خب اگه تو کوئری اول اسم کاربر وجود داشته باشه رمز عبورش هم باید تو همون ردیف باشه دیگه! یعنی اول  بررسی میکنی که اسم کاربر وجود داره یا نه اگه وجود داشت رمز عبور رو هم بررسی میکنه که درست هست یا نه.

اینجا :

 if(cursorPassword !=null& cursorUsername !=null)

بجای شرط اولی اشاره گر رو بفرست به اول یعنی :

 cursorUsername.moveToFirst()

و در خطوط بعدی حلقه while رو پاک کن و دو تا متغیرت رو مقدار دهی کن.

 

 

 
0 0
توی هردوتا کوئری داخل جدول کابران جست و رو انجام دادم و یه بار فیلد کاربر رو گرفتم و یه بار دیگه فیلد پسورد (12 سال پیش)
پاسخ به سوال 
sadeghbarout  12 سال پیش
+1 0

به 2 cursor نیاز نیست . تقریبا از یه همچین کدی باید استفاده کنی :

 

 if (edtUsername.getText().toString().length() > 0 && edtPassword.getText().toString().length() > 0) {
            Username = edtUsername.getText().toString();
            Password = edtPassword.getText().toString();

            Cursor cursorUsername = G.database.rawQuery("select * FROM users WHERE username  LIKE   '%" + Username + "%'", null);

            Log.i("", "Username: " + Username);
            Log.i("", "Password: " + Password);

            if ( cursorUsername != null) {

                while (cursorUsername.moveToNext()) {
                    valueUsername = cursorUsername.getString(cursorUsername.getColumnIndex("username"));
                    valuePassword = cursorUsername.getString(cursorUsername.getColumnIndex("password"));
                    
                    Log.i("", "valueUsername: " + valueUsername)
                    Log.i("", "valuePassword: " + valuePassword);
if (valueUsername.equals(Username) && valuePassword.equals(Password)) { Intent intent = new Intent(G.currentActivity, ActivityMain.class); G.currentActivity.startActivity(intent); finish(); } else { Toast.makeText(G.context, "نام کاربری یا رمز عبور اشتباه است", Toast.LENGTH_SHORT).show(); } } cursorUsername.close(); } else { Toast.makeText(G.context, "چنین کاربری در سیستم وجود ندارد", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(G.context, "لطفا نام کاربری و رمز عبور را وارد کنید", Toast.LENGTH_SHORT).show(); }
0 0
خیلی عالی حل شد :) خب برای امنیت ارسال و دریافت پسورد چه پیشنهادی میکنید؟ الان پسورد به صورت یه فیلد text توی دیتابیس قرار گرفته مثلا username:admin , password:abc روش هایی هست مثله md5 و... (12 سال پیش)
0 0
md5 برای php هست ولی در اندروید میتونید یه سرچی کنید و یا خودتون یه تابع رمزگزاری بنویسید. android encryption data (12 سال پیش)
0 0
والا من که برای خودم یه تابع رمزگذاری نوشتم ولی خب به هرحال کسی که اینکاره باشه میتونه نحوه رمزگذاری رو پیدا کنه. اگه یه راه خوب پیدا کردی ما هم خبر کن :) (12 سال پیش)
0 0
md5(sha1(text here)) z تو php برای کد کردن پسورد غیر قابل بازگشته هست ، خیلی عالی و امن ، کسی اگه دیکد کرد ، من خودم دورش میگردم :)) (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .