Salam Developer, kali ini kita akan melanjutkan postingan sebelumnya mengenai koneksi Android dengan PHP MySQL. Untuk lebih jelasnya akan kita implementasikan pada program yang dibuat dibawah ini.

1. Apache Web Server dan mySQL bisa pake XAMPP download disini –> XAMPP

2. Eclipse dan Android SDK –> versi yang saya gunakan disini ada 2.3.3 Ginggerbeard

3. Notepad++ atau Dreamweaver terserah mau pake yang mana untuk edit file PHP

1 Buat Project baru pada Android
 Seperti sebelumnya copykan file class JSONParser yang ada di postingan sebelumnya ke project ini. Setelah itu buat class baru bernama UserFunction.java. Nantinya class ini akan menghandle fungsi fungsi JSON dan HTTP-POST yang akan kita lakukan.(ingat class dan package yang saya gunakan dalam project ini adalah default dari komputer saya. jadi ketika anda melakukan copas cek sesuai dengan konfigurasi milik anda)

UserFunction.java


package com.eepis.android;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;

public class UserFunctions {
 
    private JSONParser jsonParser;
 
    private static String loginURL = "http://10.0.2.2/tes/";
 
    private static String login_tag = "login";
    private static String register_tag = "register";
 
    // constructor
    public UserFunctions(){
        jsonParser = new JSONParser();
    }
 
    public JSONObject loginUser(String email, String password){
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", login_tag));
        params.add(new BasicNameValuePair("email", email));
        params.add(new BasicNameValuePair("password", password));
        JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);

        return json;
    }
 
    /**
     * function make Login Request
     * @param name
     * @param email
     * @param password
     * */
    public JSONObject registerUser(String name, String email, String password){
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", register_tag));
        params.add(new BasicNameValuePair("name", name));
        params.add(new BasicNameValuePair("email", email));
        params.add(new BasicNameValuePair("password", password));
     
        // getting JSON Object
        JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
        // return json
        return json;
    }
}

LoginFormActivity.java

package com.eepis.android;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class LoginFormActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    //Deklarasi variabel view object
    TextView     error;
    Button        login,register;
    EditText    user,pwd;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //Registrasi view id
        error=(TextView)findViewById(R.id.txt1);
        login=(Button)findViewById(R.id.btn1);
        login.setOnClickListener(this);
        register=(Button)findViewById(R.id.btn2);
        register.setOnClickListener(this);
        user=(EditText)findViewById(R.id.edit1);
        pwd=(EditText)findViewById(R.id.edit2);
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn1:
            //Memanggil fungsi login di class userfunction
            UserFunctions userFunction = new UserFunctions();
            JSONObject json = userFunction.loginUser(user.getText().toString(), pwd.getText().toString());
            try {
                if (json.getString("success") != null) {
                    error.setText("");
                    String res = json.getString("success");
                    if(Integer.parseInt(res) == 1){
                        Intent login = new Intent(LoginFormActivity.this,MemberActivity.class);
                       startActivity(login);
                       MemberActivity.session=user.getText().toString();
                    }else{
                        error.setText("username/password anda salah");
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            break;
        case R.id.btn2:
            //Memanggil fungsi register di class userfunction
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle("Registrasi");
            alert.setMessage("Masukkan Data Anda");
         
            // Set an EditText view to get user input
            LinearLayout lay=new LinearLayout(this);
            lay.setOrientation(LinearLayout.VERTICAL);
            final EditText name = new EditText(this);
            name.setHint("Nama");
            final EditText email = new EditText(this);
            email.setHint("Email");
            final EditText password = new EditText(this);
            password.setHint("Password");
            lay.addView(name);
            lay.addView(email);
            lay.addView(password);
            alert.setView(lay);
            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    String nama = name.getText().toString();
                    String mail = email.getText().toString();
                    String pass = password.getText().toString(); 
                    UserFunctions userFunction = new UserFunctions();
                    JSONObject json = userFunction.registerUser(nama, mail, pass);
                    try {
                         if (json.getString("success") != null) {
                             String res = json.getString("success");
                             if(Integer.parseInt(res) == 1){
                                 Toast.makeText(LoginFormActivity.this, "Registrasi Berhasll", 1).show();
                             }else{
                                 Toast.makeText(LoginFormActivity.this, "Registrasi Gagal", 1).show();
                             }
                         }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
         
                }
            });
            alert.show();
            break;
        default:
            break;
        }
    }
}

MemberActivity.java

package com.eepis.android;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MemberActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    Button        logout;
    static String session="";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.member);
       logout=(Button)findViewById(R.id.btn1);
       logout.setOnClickListener(this);
    }
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        this.session="";
        this.finish();
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.eepis.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".LoginFormActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:label="@string/app_name"
            android:name=".MemberActivity" >
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

Bagian 2 Buat API yang menghandle request dari Android

Pada server side kita membuat API yang menangkap Http-Post yang kita kirim via android dan mengembalikannya ke kita dalam bentuk JSON

SQL file

<form action="index.php" method="post">
   <p>tag: <input type="text" name="tag" /></p>
   <p>name: <input type="text" name="name" /></p>
   <p>email: <input type="text" name="email" /></p>
   <p>password: <input type="text" name="password" /></p>
   <input type="submit" name="submit" value="Submit" />
</form>

index.php

<?php

/**
File ini untuk menghandle API Request
hasilnya di encoda dalam bentuk JSON
  /**
* check for POST request
*/
if (isset($_POST['tag']) && $_POST['tag'] != '') {
    // Tag
    $tag = $_POST['tag'];

    // Database Handler
    require_once 'include/DB_Functions.php';
    $db = new DB_Functions();

    // Response--> data yang akan dikembalikan
    $response = array("tag" => $tag, "success" => 0);
 
    // Cek tipe tag
    if ($tag == 'login') {
        // Tangkap data yang dikirim dari android
        $email = $_POST['email'];
        $password = $_POST['password'];

        // Cek user
        $user = $db->getUserByEmailAndPassword($email, $password);
        if ($user != false) {
            // User ditemukan
            $response["success"] = 1;
            echo json_encode($response);
        } else {
            // User tidak ditemukan
            $response["success"] = 0;
            echo json_encode($response);
        }
    }
    else if ($tag == 'register') {
        // Tangkap data yang dikirim dari android
        $name = $_POST['name'];
        $email = $_POST['email'];
        $password = $_POST['password'];

        // cek user sudah ada atau belum
        if ($db->isUserExisted($email)) {
            // User sudah ada
            $response["success"] = 0;
            $response["error_msg"] = "User sudah ada";
            echo json_encode($response);
        } else {
            // Simpan user baru
            $user = $db->storeUser($name, $email, $password);
            if ($user) {
                // Registrasi Berhasil
                $response["success"] = 1;
                echo json_encode($response);
            } else {
                // Registrasi Gagal
                $response["success"] = 1;
                echo json_encode($response);
            }
        }
    }
 
    else {
        echo "Invalid Request";
    }
} else {
    echo "Access Denied";
}
?>

config.php

<?php

/**
* Database config variables
*/
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_DATABASE", "tes");
?>

DB_Connect.php


<?php
class DB_Connect {

    // constructor
    function __construct() {
    }

    // destructor
    function __destruct() {
        // $this->close();
    }

    // Connecting to database
    public function connect() {
        require_once 'include/config.php';
        // connecting to mysql
        $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        // selecting database
        mysql_select_db(DB_DATABASE);

        // return database handler
        return $con;
    }

    // Closing database connection
    public function close() {
        mysql_close();
    }

}

?>

DB_Function.php
<?php

class DB_Functions {

    private $db;
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // Koneksi ke database
        $this->db = new DB_Connect();
        $this->db->connect();
    }

    // destructor
    function __destruct() {
     
    }
 
    public function storeUser($name, $email, $password) {
        $uuid = uniqid('', true);
        $hash = $this->hashSSHA($password);
        $encrypted_password = $hash["encrypted"]; // Enkripsi password
        $salt = $hash["salt"]; // salt
        $result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())");
        // Cek registrasi berhasil
        if ($result) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Cek user di database
     */
    public function getUserByEmailAndPassword($email, $password) {
        $result = mysql_query("SELECT * FROM users WHERE email = '$email'") or die(mysql_error());
        $no_of_rows = mysql_num_rows($result);
        if ($no_of_rows > 0) {
            $result = mysql_fetch_array($result);
            $salt = $result['salt'];
            $encrypted_password = $result['encrypted_password'];
            $hash = $this->checkhashSSHA($salt, $password);
            // Cek kesamaan password
            if ($encrypted_password == $hash) {
                // Identifikasi berhasil
                return true;
            }
        } else {
            // User tidak ditemukan
            return false;
        }
    }

    /**
     * Cek user exist atau tidak
     */
    public function isUserExisted($email) {
        $result = mysql_query("SELECT * from users WHERE email = '$email'");
        $no_of_rows = mysql_num_rows($result);
        if ($no_of_rows > 0) {
            // user existed
            return true;
        } else {
            // user not existed
            return false;
        }
    }
        /**
    Enkripsi password
     */
    public function hashSSHA($password) {

        $salt = sha1(rand());
        $salt = substr($salt, 0, 10);
        $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
        $hash = array("salt" => $salt, "encrypted" => $encrypted);
        return $hash;
    }


    public function checkhashSSHA($salt, $password) {

        $hash = base64_encode(sha1($password . $salt, true) . $salt);

        return $hash;
    }
}
?>

Bagian 3 Hasil running aplikasi

File JSON yang dikirim ke android berbentuk

// Jika berhasil
{"tag":"login","success":1}
// Jika gagal
{"tag":"login","success":0}
// Jika user exist
{"tag":"register","success":0,"error_msg":"User sudah ada"}