آموزش ساخت سیستم ورود با php و mysql در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت سیستم ورود با php و mysql در اندروید خواهیم پرداخت در آموزش قبلی به آموزش ساخت سیستم ورود با استفاده از php و mysql پرداختیم که در ادامه لینک آن را برای شما قرار میدهم با استفاده از آموزش قبلی و این آموزش می توانید یک سیستم جامع ورود و ثبت نام سفارشی برای خودتان ایجاد کنید در ادامه با ما همراه باشید.
آموزش ساخت سیستم ثبت نام با php و mysql در اندروید
در این آموزش ما دو اکتیویتی داریم
که نام layout های آن همانند زیر می باشد.
Layout
- activity_main.xml
- activity_profile.xml
Activity
- MainActivity.java
- ProfileActivity.java
کار بعد از ورود موفق از MainActivity به ProfileActivity منتقل می شود.
اگر آموزش قبل را دنبال کرده اید دیگر نیاز به ساخت دیتابیس ندارید و می توانید از همان دیتابیس استفاده کنید.
در صورتی که آموزش قبل را دنبال نکرده اید یک جدول به نام User_Details_Table با چهار فیلد ایجاد کرده هر فیلد به ترتیب id, User_Email, User_Password, User_Full_Name قرار دهید و id را برابر با primary key قرار دهید همانند عکس زیر
در بالا ما یک Insert انجام داده ایم شما نیاز است این کار را انجام دهید برای insert از تب بالای phpmyadmin می توانید این کار را بکنید.
همانند آموزش قبلی یک فایل به نام DatabaseConfig.php داریم که اطلاعات مربوط به دیتابیس در آن قرار دارد. (در صورتی که در آموزش قبل آن را ایجاد کردید نیازی نیست دوباره آن را ایجاد کنید)
1 2 3 4 5 6 | <?php $HostName = "localhost"; $HostUser = "id302300_android_examples_data_user"; $HostPass = "1234567890"; $DatabaseName = "id302300_android_examples"; ?> |
در بالا به جز HostName بقیه را باید تغییر دهید.
باید یک فایل php به نام user_login.php ایجاد کرده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php if($_SERVER['REQUEST_METHOD']=='POST'){ include 'DatabaseConfig.php'; $con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName); $email = $_POST['User_Email']; $password = $_POST['User_Password']; $Sql_Query = "select * from User_Details_Table where User_Email = '$email' and User_Password = '$password' "; $check = mysqli_fetch_array(mysqli_query($con,$Sql_Query)); if(isset($check)){ echo "User Found"; } else{ echo "Invalid Username or Password Please Try Again !"; } }else{ echo "User NotFound"; } mysqli_close($con); ?> |
کد php بالا بررسی می کند که آیا یوزری با Email و Password مورد نظری که به این فایل post می شود وجود دارد یا خیر در صورتی که در دیتابیس user پیدا شود پیام User Found چاپ می شود در غیر این صورت User NotFound نمایش داده می شود.
پس کد بالا یکسری مقدار ورودی بهش post می شود و یکسری بررسی انجام میدهد.
برویم به سراغ کد برنامه
در این آموزش هم از کتاب خانه volley استفاده می شود.
ابتدای کار وارد فایل AndroidManifest.xml شده و دسترسی زیر را اضافه کنید.
1 | <uses-permission android:name="android.permission.INTERNET"/> |
وارد فایل Build.gradle از نوع Module شده سپس در بخش dependencies خط زیر را اضافه کنید.
1 | compile 'com.android.volley:volley:1.0.0' |
پروزه را sync کنید.
در activity_main.xml کدهای زیر را قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="15dp" tools:context=".MainActivity"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/textView" android:textSize="20dp" android:textStyle="bold" android:text="Programchi.ir" android:gravity="center" android:layout_marginTop="20dp"/> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Enter Your Email" android:gravity="center" android:id="@+id/editText_Email" android:layout_below="@+id/textView" android:layout_marginTop="20dp"/> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Enter Your Password" android:gravity="center" android:id="@+id/editText_Password" android:inputType="textPassword" android:layout_below="@+id/editText_Email" android:layout_marginTop="20dp"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="LOGIN" android:id="@+id/button_login" android:layout_below="@id/editText_Password" android:layout_marginTop="20dp"/> </RelativeLayout> |
در بالا دو EditText برای دریافت متن و یک دکمه برای ارسال درخواست قرار داده شده است.
ابتدا وارد MainActivity.java شده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | package ir.programchi; import android.app.ProgressDialog; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity { EditText Email, Password; Button LoginButton; RequestQueue requestQueue; String EmailHolder, PasswordHolder; ProgressDialog progressDialog; String HttpUrl = "https://programchi.ir/user_login.php"; Boolean CheckEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Email = (EditText) findViewById(R.id.editText_Email); Password = (EditText) findViewById(R.id.editText_Password); LoginButton = (Button) findViewById(R.id.button_login); requestQueue = Volley.newRequestQueue(MainActivity.this); progressDialog = new ProgressDialog(MainActivity.this); LoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CheckEditTextIsEmptyOrNot(); if (CheckEditText) { UserLogin(); } else { Toast.makeText(MainActivity.this, "Please fill all form fields.", Toast.LENGTH_LONG).show(); } } }); } public void UserLogin() { progressDialog.setMessage("Please Wait"); progressDialog.show(); StringRequest stringRequest = new StringRequest(Request.Method.POST, HttpUrl, new Response.Listener<String>() { @Override public void onResponse(String ServerResponse) { progressDialog.dismiss(); if(ServerResponse.equalsIgnoreCase("user found")) { Toast.makeText(MainActivity.this, "Logged In Successfully", Toast.LENGTH_LONG).show(); finish(); Intent intent = new Intent(MainActivity.this, ProfileActivity.class); intent.putExtra("UserEmailTAG", EmailHolder); startActivity(intent); } else { Toast.makeText(MainActivity.this, ServerResponse, Toast.LENGTH_LONG).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { progressDialog.dismiss(); Toast.makeText(MainActivity.this, volleyError.toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("User_Email", EmailHolder); params.put("User_Password", PasswordHolder); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); requestQueue.add(stringRequest); } public void CheckEditTextIsEmptyOrNot() { EmailHolder = Email.getText().toString().trim(); PasswordHolder = Password.getText().toString().trim(); if (TextUtils.isEmpty(EmailHolder) || TextUtils.isEmpty(PasswordHolder)) { CheckEditText = false; } else { CheckEditText = true; } } } |
دوستان دقت کنید در بالا شما باید HttpUrl به آدرس فایل خودتان در هاست تغییر دهید
بعد از اینکه view را find کردیم و بعد از بررسی خالی نبودن EditText ها داده ها به فایل php ما post می شود در فایل php بررسی میشود آیا این کاربر با این ایمیل و پسورد رد دیتابیس وجود دارد یا خیر و توضیح دادیم بعد از آن چه پیام های چاپ می شود در بالا در صورتی کاربر اطلاعات را درست وارد کرده باشد به اکتیویتی دوم منتقل می شود.
کد مربوط به layout دوم ما که نام آن برابر با activity_profile.xml است همانند زیر میشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" tools:context=".ProfileActivity"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/TextViewUserEmail" android:gravity="center" android:textStyle="bold" android:textSize="18dp" android:text="Welcome - " android:layout_marginTop="50dp" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="LOGOUT" android:id="@+id/button_logout" android:layout_below="@+id/TextViewUserEmail" android:layout_marginTop="50dp"/> </RelativeLayout> |
و کد جاوا مربوط به ProfileActivity.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package ir.programchi; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.LoginFilter; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class ProfileActivity extends AppCompatActivity { TextView textView; Button logout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); textView = (TextView)findViewById(R.id.TextViewUserEmail); logout = (Button)findViewById(R.id.button_logout); String TempHolder = getIntent().getStringExtra("UserEmailTAG"); textView.setText(textView.getText() + TempHolder); logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(ProfileActivity.this, "Logged Out Successfully", Toast.LENGTH_LONG).show(); finish(); Intent intent = new Intent(ProfileActivity.this, MainActivity.class); startActivity(intent); } }); } } |
و یک کد خیلی ساده در بالا قرار دادیم تا یک مقدار که از MainActivity به این اکتیویتی پاس داده می شود و در این اکتیویتی نمایش داده می شود و یک دکمه وجود دارد که با کلیک بروی آن از اکتیویتی به اکتیویتی اصلی باز خواهیم گشت.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
خیلی خوب و عالی بود. خسته نباشید
خیلی ممنون
موفق باشید.
سلام
من تمون مراحلو به درستی انجام میدم user found هم از سرور دریافت میشه ولی توی مقایسه کردن مشکل داره دستور بعد ازif اصلا اجرا نمیشه تا به اکتویتی دوم بره با کتاب خونه retrofit هم امتحان کردم نشد لطفا کمکم کنید خیلی بهش نیاز دارم
سلام بررسی شد و مشکلی دیده نشد لطفا دوباره بررسی کرده و از طریق Debug گردن مشکل را حل کنید یا logcat قرار دهید تا بررسی کنیم.
موفق باشید.
سلام
دوست عزیز اگه واسه سوالتون جوابی پیدا کردین به ما هم بگین .
respose از سمت سرور برمیگرده اما با equalوequal ignorecase امکان مقایسه پیام های دریافتی از سمت سرور وجود نداره
سلام من فکر میکنم مشکل از manifest باشه
سلام
با کلی برسی فهمیدم رشته دیافتیم چند کاراکتر اظافه داره ولی تو log مقدارشون یکی هست با دستور trim هم نتونستم کاراکتر های اظافه رو پاک کنم مشکل از چی میتونه باشه؟
سلام دوست عزیز میتونی من رو هم راهنمایی کنید ؟
ممنون
سلام ممنون از آموزش خوبتون ، من پروژه را انجام دادم و کاملا هم خوب بود. فقط می خواستم بدونم بعد از اینکه لاگین کردیم، من می خواهم اون اطلاعاتی که از توی دیتابیس رو با php فراخوانی کردیم رو نشون بدم ، حالا باید چجوری اینکار را انجام داد ؟
سلام باید query بزنید سپس به json تبدیل کرده و نمایش دهید.
میشه آموزش بدید یا یک سورس قرار بدید؟
سلام امکان قرار دادن سورس وجود ندارد .
سلام من همه رو انجام دادم و توی توست User Found همچی درست اما به صحفه بعدی نمیره و اینتنتمم درسته؟؟
http://uupload.ir/files/ip70_screenshot_(323).png
سلام سورس رو بررسی می کنم بهتون اطلاع میدم
تشکر فراوان از شما دوست عزیز,منتظر پاسختون هستم
سلام خسته نباشید دوست عزیز چک کردید سورس رو اخه من گیرم خواستم ببینم اگر مشکل از سیستم منه تا یه فکری بکنم ممنون
سورس مشکلی ندارد
ممنون از سایت خوبتون فقط 2 سوال برام پیش اومده
اول اینکه چکار کنیم که با باز و بسته شدن برنامه از اکانت خارج نشه و در اکانت مونده باشه و فقط با دکمه خروج خارج بشه
دوم اینکه چطور میشه یه سری مقادیر و متغییر رو در این اکانت نگه داشت که با هر بار لاگین کردن مقادیر مونده باشه و پاک نشده باشه؟
در پاسخ به سوال اول شما باید از shared preference استفاده کنید.
https://programchi.ir/2017/04/27/sharedpreferences_android/
برای اینکه اطلاعات live باشد باید سمت سرور ذخیره و آپدیت بشه.
عالی
دوستان یه هست رایگان خوب بهم جهت تمرین معرفی کنید
روی برخی از هاست ها رایگان موقع دریافت اطلاعات html> را دریافت می کنه . لطفا یه راهنمایی بکنید
فقط user found رو برمیگردونه و به صفحه بعد نمیره
سلام ممنون از آموزش خوبتون