التعامل مع PHP & Mysqli لتخزين البيانات باستخدام مكتبة Retrofit – الجزء الثاني

سنقوم في هذه التدوينة باكمال الدرس السابق وهو عملية تسجيل الدخول والتاكد من بيانات المستخدم.

الدرس السابق هنا .

بعد تطبيق وتنفيذ الدرس السابق سنحتاج الى عملية تسجيل الدخول والتاكد من بيانات المستخدم اذا نحتاج الى ملف 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);
}
?>
  • انشاء شاشة تسجيل الدخول:

layout-2015-10-12-101230

احتجنا الى اثنين 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
                    }
                });

الان عند تشغيل التطبيق سيقوم بتسجيل الدخول واعدة بيانات المستخدم 

eyes_heart

الكود كامل موجود على Github للاطلاع علية بشكل مفصل قمت هنا فقط بشرح الجديد لدينا بحكم انني قمت بالتفصيل بالدرس السابق .

 

 

تعليق واحد

اترك ردّاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

أوافق على سياسة الخصوصية*