آموزش ساخت سیستم ثبت نام با php و mysql در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت سیستم ثبت نام با php و mysql در اندروید می پردازیم هر برنامه ای شاید به سیستم ثبت نام نیاز داشته باشد در ادامه ما با استفاده از php , دیتابیس mysql و اندروید یک سیستم ثبت نام جامع را ایجاد خواهیم کرد در ادامه با ما همراه باشید.
در این آموزش لازم است شما کمی با ساخت دیتابیس mysql و php آشنایت داشته باشید.
همینطور ما از کتاب خانه volley برای post کردن مقدار به دیتابیس mysql استفاده خواهیم کرد.
ابتدا وارد phpmyadmin شده سپس یک جدول به نام User_Details_Table با چهار فیلد ایجاد کرده سپس و هر فیلد به ترتیب id , User_Email , User_Password , User_Full_Name است و id را برابر با Primary key قرار دهید دیتابیس باید همانند زیر شود در زیر ما در دیتابیس یک Insert انجام داده ایم نیازی نیست شما این کار را انجام دهید فقط فیلد ها را به نام های گفته شده درست کنید.
هم اکنون باید یک فایل php به نام 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-Registration.php ایجاد کرده و کدهای زیر را در آن قرار دهید.
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 | <?php if($_SERVER['REQUEST_METHOD']=='POST'){ include 'DatabaseConfig.php'; $con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName); $Email = $_POST['User_Email']; $Password = $_POST['User_Password']; $Full_Name = $_POST['User_Full_Name']; $CheckSQL = "SELECT * FROM User_Details_Table WHERE User_Email='$Email'"; $check = mysqli_fetch_array(mysqli_query($con,$CheckSQL)); if(isset($check)){ echo 'Email Already Exist, Please Enter Another Email.'; } else{ $Sql_Query = "INSERT INTO User_Details_Table (User_Email,User_Password,User_Full_Name) values ('$Email','$Password','$Full_Name')"; if(mysqli_query($con,$Sql_Query)) { echo 'User Registration Successfully'; } else { echo 'Something went wrong'; } } } mysqli_close($con); ?> |
کد php بالا کار post به دیتابیس را انجام میدهد یعنی ما با استفاده از برنامه اندروید یکسری داده را به این فایل php ارسال می کنیم اگر ایمیل در دیتابیس وجود داشته باشید پیامی به برنامه بر خواهد گشت و در صورتی که خطای غیر منتظره اتفاق بیفتد یک پیام به برنامه باز خواهد گشت.
برویم سراغ کد های سمت برنامه
ابتدای کار وارد فایل 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 42 43 44 45 46 47 48 49 50 | <?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=".MainActivity"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="programchi.ir" android:textSize="20dp" android:textStyle="bold" android:id="@+id/textView" android:layout_centerHorizontal="true" android:gravity="center"/> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/EditTextFullName" android:layout_below="@+id/textView" android:layout_marginTop="20dp" android:hint="Enter Your Full Name" android:gravity="center"/> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/EditTextEmail" android:layout_below="@+id/EditTextFullName" android:layout_marginTop="20dp" android:inputType="textEmailAddress" android:hint="Enter Your Email" android:gravity="center"/> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/EditTextPassword" android:layout_below="@+id/EditTextEmail" android:layout_marginTop="20dp" android:inputType="textPassword" android:hint="Enter Your Password" android:gravity="center"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Click Here To Register" android:layout_below="@+id/EditTextPassword" android:id="@+id/ButtonRegister" android:layout_marginTop="20dp"/> </RelativeLayout> |
در بالا سه تا EditText برای دریافت متن و یک دکمه برای انجام عمل post قرار گرفته است .
سپس در اکتیویتی مربوط به layout که در اینجا نام آن برابر با 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 | package ir.programchi; import android.app.ProgressDialog; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Toast; import android.widget.EditText; import android.widget.Button; import java.util.HashMap; import java.util.Map; 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; public class MainActivity extends AppCompatActivity { EditText FullName, Email, Password ; Button Register; RequestQueue requestQueue; String NameHolder, EmailHolder, PasswordHolder ; ProgressDialog progressDialog; String HttpUrl = "https://programchi.ir/User-Registration.php"; Boolean CheckEditText ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FullName = (EditText) findViewById(R.id.EditTextFullName); Email = (EditText) findViewById(R.id.EditTextEmail); Password = (EditText) findViewById(R.id.EditTextPassword); Register = (Button) findViewById(R.id.ButtonRegister); requestQueue = Volley.newRequestQueue(MainActivity.this); progressDialog = new ProgressDialog(MainActivity.this); // click listener :D Register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CheckEditTextIsEmptyOrNot(); if(CheckEditText){ UserRegistration(); } else { Toast.makeText(MainActivity.this, "Please fill all form fields.", Toast.LENGTH_LONG).show(); } } }); } public void UserRegistration(){ progressDialog.setMessage("Please Wait, We are Inserting Your Data on Server"); progressDialog.show(); StringRequest stringRequest = new StringRequest(Request.Method.POST, HttpUrl, new Response.Listener<String>() { @Override public void onResponse(String ServerResponse) { progressDialog.dismiss(); Toast.makeText(MainActivity.this, ServerResponse, Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { progressDialog.dismiss(); // Showing error message if something goes wrong. Toast.makeText(MainActivity.this, volleyError.toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); // The firs argument should be same sa your MySQL database table columns. params.put("User_Email", EmailHolder); params.put("User_Password", PasswordHolder); params.put("User_Full_Name", NameHolder); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); requestQueue.add(stringRequest); } public void CheckEditTextIsEmptyOrNot(){ NameHolder = FullName.getText().toString().trim(); EmailHolder = Email.getText().toString().trim(); PasswordHolder = Password.getText().toString().trim(); if(TextUtils.isEmpty(NameHolder) || TextUtils.isEmpty(EmailHolder) || TextUtils.isEmpty(PasswordHolder)) { CheckEditText = false; } else { CheckEditText = true ; } } } |
دوستان در بالا دقت کنید شما باید HttpUrl را به آدرس خودتان تغییر دهید همچین فایلی در این آدرس وجود ندارد علت آن هم این است که به سادگی می توانند mysql ما را هک کنند باید از هاست و mysql خودتان استفاده کنید.
در کد بالا برسی می شود که ابتدا فیلد های خالی نباشد در صورتی که خالی بود پیامی به کاربر نمایش داده می شود زمانی که در حال insert یک یوزر به دیتابیس هستیم یک progressbar نمایش داده می شود و زمانی که عمل درج به اتمام برسد آن هم hide می شود. همانطور که قبلا هم گفتم بعد از دریافت مقدار فیلد ها از کاربر با استفاده از کتاب خانه volley مقادیر به فایل php ما post می شود سپس کد های php آن را در دیتابیس insert می کنند.
در آموزش بعدی آموزش ساخت سیستم ورود با php و mysql در اندروید را قرار خواهیم داد.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
با سلام و خسته نباشید.یه مشکلی دارم هرکاری میکنم نمیتونم رفعش کنم اگر میشه کمکم کنید.
من طبق همین اموزش شما تو هاست واقعی سایت GiGfa یه دیتابیس ساختم و و ارتباطش رو برقرار کردم البته با کمی تغییر( فقط یه ستون یوزرنیم و پسوورد ) قرار دادم. کد های PHP درسته. ینی وقتی خود لینک رو اجرا میکنم مقادیر جدید رو وارد دیتابیس میکنه. اما وقتی از سمت گوشی میخوام مقادیرم رو وارد کنم چیزی رو تو دیتابیس ذخیره نمیکنه. خواهشا کمکم کنید. اگر لازمه به ایمیلم یه پیغام بدید من سورس کدم رو در اختیارتون بزارم.
ممنون میشم هرچی زودتر جواب بدید.
با تشکر از سایت فوق العادتون ♥
خــسته نبــاشیـد.
با سلام
من هم مشابه مشکل Behnam را دارم یعنی از یک صفحه php وقتی به سرور وصل می شوم می تواند با استفاده از دستور []POST_$ مقدار فرستاده شده را بخواند ولی وقتی از طریق اندروید می خواهم اطلاعات بفرستم (عیناً همان کد بالا را نوشتم) نمی تواند مقدار فرستاده شده را با استفاده از این دستور بخواند.
من هم از یک سرور آنلاین استفاده می کنم
لطفا راهنمایی بفرمائید.