سنقوم في هذه التدوينة باكمال الدرس السابق وهو عملية تسجيل الدخول والتاكد من بيانات المستخدم.
الدرس السابق هنا .
بعد تطبيق وتنفيذ الدرس السابق سنحتاج الى عملية تسجيل الدخول والتاكد من بيانات المستخدم اذا نحتاج الى ملف php لتسجيل الدخول والتحقق من البيانات .
-
انشاء ملف PHP تسجيل الدخول :
سنقوم بكتابة ملف php للتحقق من بيانات المستخدم وايضا التاكد من كلمة المرور ومن صحتها بعد التشفير .
<?php /* Code for login*/ require "connect.php"; //check for required fields if (isset($_POST['name']) && isset($_POST['password'])) { //get data from post $name = $_POST['name']; $password = $_POST['password']; // using password hash $logIn = mysqli_query($connection, "SELECT * FROM users WHERE name='$name'"); //check if user exist if (mysqli_num_rows($logIn) > 0) { $row = mysqli_fetch_array($logIn); //check if email exist //bulide query //check if saved work fine if (password_verify($password, $row['password'])) { //return user info to app $post["code"] = 0; $post["message"] = "LogIn successfull"; $post['name'] = $row['name']; $post['id_user'] = $row['id_user']; $post['phone'] = $row['phone']; $post['email'] = $row['email']; } else { $post["code"] = 2; $post["message"] = "Wrong Email or Password"; } } else { //name exist $post["code"] = 404; $post["message"] = "Try again"; } //print JSON response echo json_encode($post); } else { // required field is missing $post["code"] = 404; $response["message"] = "Required field(s) is missing"; // print JSON response echo json_encode($response); } ?>
-
انشاء شاشة تسجيل الدخول:
احتجنا الى اثنين EdiText
- EdiText اسم المستخدم.
- EditText لكلمة المرور .
- Button لتنفيذ عملية تسجيل الدخول .
-
القيام بعملية تسجيل الدخول :
في ملف Activity سنقوم باضافة كلاس Retrofit وقد شرحنا في الدرس السابق الذي نحتاجه مع كلاس Retrofit وهي
- POJOs : كلاس لاستعادة البيانات من عملية التسجيل وهي :اسم المستخدم،الاسم
- InterFace: سنحدد فيه نوع الطلب هل هو post ,get… etc واضافة الحقول الخاصة بنا للارسال.
- Rerofit Class : هنا لاستدعاء interface وتنفيذ الطلب واعادة النتائج .
-
POJOs :
انشئنا كلاس LogInResult.java لاستعادة النتائج من عملية الطلب وسيكون بهذا الشكل :
package com.tatbigy.androidretrofit; import android.os.Parcel; import android.os.Parcelable; /** * Created by Ahmed on 10/12/15. * 00 * Android Retrofit */ public class LogInResult implements Parcelable { /** * code : 0 * message : LogIn successfull * name : ahmed * id_user : null * phone : null * email : ahmed.s.alotibi@gmail.com */ private int code; private String message; private String name; private Object id_user; private String email; protected LogInResult(Parcel in) { code = in.readInt(); message = in.readString(); name = in.readString(); email = in.readString(); } public static final Creator<LogInResult> CREATOR = new Creator<LogInResult>() { @Override public LogInResult createFromParcel(Parcel in) { return new LogInResult(in); } @Override public LogInResult[] newArray(int size) { return new LogInResult[size]; } }; public void setCode(int code) { this.code = code; } public void setMessage(String message) { this.message = message; } public void setName(String name) { this.name = name; } public void setId_user(Object id_user) { this.id_user = id_user; } public void setEmail(String email) { this.email = email; } public int getCode() { return code; } public String getMessage() { return message; } public String getName() { return name; } public Object getId_user() { return id_user; } public String getEmail() { return email; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeInt(code); parcel.writeString(message); parcel.writeString(name); parcel.writeString(email); } }
-
Interface :
لتحديد نوع الطلب وايضا وضع اسم الملف او الرابط الخاص بنا والبيانات تالتي نود ارسالها وعندنا في هذه الخالة هي
- name : اسم المستخدم كما هو موجود في ملف php في $_POST .
- password : كلمة المرور الخاصة بالمستخدم كما في ملف php
public interface LogIn { @FormUrlEncoded @POST("login.php") Call<LogInResult> login(@Field("name") String email, @Field("password") String password); }
-
Retrofit Class :
سنقوم بتخصيص Retrofit من وضع الرابط الاساسي الخاص بالرابط وتحويل النتائج الى Gson وتنفيذ عملية الاتصال والتحقق من النجاح او الفشل وسكون بهذ الشكل :
LogIn apiService = Retrofitlogin.create(LogIn.class); Call<LogInResult> reg = apiService.login(inputemail.getText().toString(), inputpassword.getText().toString()); reg.enqueue(new Callback<LogInResult>() { @Override public void onResponse(Response<LogInResult> response, Retrofit retrofit) { if (response.body().getCode() == 0) { Snackbar.make(inputpassword, response.body().getName(), Snackbar.LENGTH_LONG).show(); startActivity(new Intent(getApplicationContext(), ProfileActivity.class).putExtra("info", response.body())); } else { Snackbar.make(inputpassword, response.body().getMessage(), Snackbar.LENGTH_INDEFINITE).setAction("اخفاء", null).show(); } } @Override public void onFailure(Throwable t) { // Log error here since request failed } });
الان عند تشغيل التطبيق سيقوم بتسجيل الدخول واعدة بيانات المستخدم
الكود كامل موجود على Github للاطلاع علية بشكل مفصل قمت هنا فقط بشرح الجديد لدينا بحكم انني قمت بالتفصيل بالدرس السابق .
; i have send u an email brother need help.the Php of the Login is not working ……need Help