Wednesday, October 11, 2017

# Databases MySQL # Tutorial

[Tutorial] Membuat API Login dan Register Dengan PHP MySQL

Assalamualaikum Warahmatullah..  Halo temen-temen.. Balik lagi bersama saya Ramadhany si programmer ganteng... Nah, kali ini saya akan membagi tutorial tentang Bagaimana Caranya untuk membuat API Login dan Register Dengan menggunakan PHP.. Apa itu API ? API adalah singkatan dari Application Programming Interface, Apa kegunaan API ini?  Kegunaannya API ini jika dalam kasus develop aplikasi android adalah sebagai penghubung antara android dan server. API ini berada di tengah-tengah antara android dan server,  Yang dimana android mengirim ke API lalu API akan meneruskan ke server.  Jadi kurang lebih seperti itu pemahaman mengenai API yang saya tau. Mau tau gimana cara membuatnya.. Yuk kita ikuti langkah-langkah nya....





Pertama

Jika kalian belum mempunyai Aplikasi XAMPP, Bisa di download terlebih dahulu. Langsung di buka saja link di bawah ini...


Jika kalian belum tau caranya untuk menginstall XAMPP.. Bisa kunjungi artikel di bawah ini


Kedua

Pastikan XAMPP Anda sudah di aktifkan..


Ketiga

Buatlah databases sesuai dengan keinginan kalian... Untuk contoh, saya beri nama databases dengan db_latihan1...

Keempat

Tambahkan table di databases db_latihan1.. Sebagai contoh, saya disini menambahkan table dengan nama Tb_User

'create table tb_user(
   id int(11) primary key auto_increment,
   unique_id varchar(23) not null unique,
   nama varchar(50) not null,
   email varchar(100) not null unique,
   encrypted_password varchar(80) not null,
   salt varchar(10) not null
);'

Berikut ini adalah tampilan tb_user yang sudah 


Kelima

Buatlah folder di dalam folder htdocs.. Sebagai contoh, saya membuat folder dengan nama latihan1. Lalu setelah itu buat lah folder include di dalam folder latihan1

htdocs -> latihan1 -> include

Keenam

Di dalam folder include buatlah file php dengan nama Config.php. Kelas ini berisi variable-variable Server kita..

'<?php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", ""); // jika kalian menggunakan password.. masukan password nya
define("DB_DATABASE", "db_latihan1");
?>'

Ketujuh

Di dalam folder include buatlah file dengan nama DB_Connect.php .  Kelas ini berfungsi untuk menghubungkan kita ke server...

'<?php
class DB_Connect {
    private $conn;
    // koneksi ke database
    public function connect() {
        require_once 'include/Config.php';
         
        // koneksi ke mysql database
        $this->conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
         
        // return database handler
        return $this->conn;
    }
}
?>'

Kedelapan

Di Dalam folder include buatlah file DB_Function.php . Kelas ini berfungsi untuk menyimpan suatu fungsi yang didalam fungsi tersebut akan mengirim data ke server.

'<?php
class DB_Functions {
    private $conn;
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // koneksi ke database
        $db = new Db_Connect();
        $this->conn = $db->connect();
    }
    // destructor
    function __destruct() {
         
    }
    public function simpanUser($nama, $email, $password) {
        $uuid = uniqid('', true);
        $hash = $this->hashSSHA($password);
        $encrypted_password = $hash["encrypted"]; // encrypted password
        $salt = $hash["salt"]; // salt
        $stmt = $this->conn->prepare("INSERT INTO tbl_user(unique_id, nama, email, encrypted_password, salt) VALUES(?, ?, ?, ?, ?)");
        $stmt->bind_param("sssss", $uuid, $nama, $email, $encrypted_password, $salt);
        $result = $stmt->execute();
        $stmt->close();
        // cek jika sudah sukses
        if ($result) {
            $stmt = $this->conn->prepare("SELECT * FROM tbl_user WHERE email = ?");
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $user = $stmt->get_result()->fetch_assoc();
            $stmt->close();
            return $user;
        } else {
            return false;
        }
    }
    /**
     * Get user berdasarkan email dan password
     */
    public function getUserByEmailAndPassword($email, $password) {
        $stmt = $this->conn->prepare("SELECT * FROM tbl_user WHERE email = ?");
        $stmt->bind_param("s", $email);
        if ($stmt->execute()) {
            $user = $stmt->get_result()->fetch_assoc();
            $stmt->close();
            // verifikasi password user
            $salt = $user['salt'];
            $encrypted_password = $user['encrypted_password'];
            $hash = $this->checkhashSSHA($salt, $password);
            // cek password jika sesuai
            if ($encrypted_password == $hash) {
                // autentikasi user berhasil
                return $user;
            }
        } else {
            return NULL;
        }
    }
    /**
     * Cek User ada atau tidak
     */
    public function isUserExisted($email) {
        $stmt = $this->conn->prepare("SELECT email from tbl_user WHERE email = ?");
        $stmt->bind_param("s", $email);
        $stmt->execute();
        $stmt->store_result();
        if ($stmt->num_rows > 0) {
            // user telah ada 
            $stmt->close();
            return true;
        } else {
            // user belum ada 
            $stmt->close();
            return false;
        }
    }
    /**
     * Encrypting password
     * @param password
     * returns salt and encrypted 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;
    }
    /**
     * Decrypting password
     * @param salt, password
     * returns hash string
     */
    public function checkhashSSHA($salt, $password) {
        $hash = base64_encode(sha1($password . $salt, true) . $salt);
        return $hash;
    }
}
?>'

Kesembilan

Di dalam folder latihan1 buatlah file Login.php . Kelas ini berfungsi untuk login dengan parameternya email dan password.

'<?php
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['email']) && isset($_POST['password'])) {
    // menerima parameter POST ( email dan password )
    $email = $_POST['email'];
    $password = $_POST['password'];
    // get the user by email and password
    // get user berdasarkan email dan password
    $user = $db->getUserByEmailAndPassword($email, $password);
    if ($user != false) {
        // user ditemukan
        $response["error"] = FALSE;
        $response["uid"] = $user["unique_id"];
        $response["user"]["nama"] = $user["nama"];
        $response["user"]["email"] = $user["email"];
        echo json_encode($response);
    } else {
        // user tidak ditemukan password/email salah
        $response["error"] = TRUE;
        $response["error_msg"] = "Login gagal. Password/Email salah";
        echo json_encode($response);
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Parameter (email atau password) ada yang kurang";
    echo json_encode($response);
}
?>'

Kesepuluh

Buatlah file php di dalam folder latihan1 dengan nama register.php . Kelas ini berfungsi untuk menerima data dari Android yang lalu diteruskan menyimpan data ke server.

'<?php
require_once 'include/DB_Function.php';
$db = new DB_Functions();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['nama']) && isset($_POST['email']) && isset($_POST['password'])) {
    // menerima parameter POST ( nama, email, password )
    $nama = $_POST['nama'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    // Cek jika user ada dengan email yang sama
    if ($db->isUserExisted($email)) {
        // user telah ada
        $response["error"] = TRUE;
        $response["error_msg"] = "User telah ada dengan email " . $email;
        echo json_encode($response);
    } else {
        // buat user baru
        $user = $db->simpanUser($nama, $email, $password);
        if ($user) {
            // simpan user berhasil
            $response["error"] = FALSE;
            $response["uid"] = $user["unique_id"];
            $response["user"]["nama"] = $user["nama"];
            $response["user"]["email"] = $user["email"];
            echo json_encode($response);
        } else {
            // gagal menyimpan user
            $response["error"] = TRUE;
            $response["error_msg"] = "Terjadi kesalahan saat melakukan registrasi";
            echo json_encode($response);
        }
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Parameter (nama, email, atau password) ada yang kurang";
    echo json_encode($response);
}
?>'

Kesebelas

Langkah terakhir, coba test terlebih dahulu API Login dan Register tersebut di Aplikasi Postman dengan menggunakan method POST. Apabila kalian belum mempunyai aplikasi Postman, Kalian bisa download di Link berikut 


API Login       : http://localhost/latihan1/login.php

API Register  : http://localhost/latihan1/register.php


Response API Login :

{"error":false,"uid":"59de4ad3595037.83612840","user":{"nama":"rama","email":"rama@gmail.com"}}

Kalo misalkan telah muncul API seperti di atas.. Maka Login Telah Berhasil

Response API Register : 

{"error":false,"uid":"59de4ad3595037.83612840","user":{"nama":"rama","email":"rama@gmail.com"}}

Kalo Misalkan telah muncul API Seperti di atas.. Maka Register Telah Berhasil


Sekian tutorial kali ini, semoga bisa bermanfaat bagi kita semua, apabila ada kesalahan dan kekurangan tolong di maafkan, karena kesalahan itu datang nya dari syaitan dan kebenaran itu datang nya dari Allah. 
Apabila ada yang ingin di tanyakan, bisa langsung DB saya via FB, Instagram, Google Hangout dan WA

Wassalamualaikum Warahmatullah























6 comments:

  1. ko saya munculnya gini ya bro.

    {"error":true,"error_msg":"Parameter (nama, email, atau password) ada yang kurang"}

    ReplyDelete
    Replies
    1. ohh.. mungin mas irfan ada yang belum di isi parameter nya

      Delete
    2. coba di cek lagi di bagian login.php nya

      Delete
    3. sama saja juga error kaya gitu, mohon pencerahannya

      Delete
  2. gan mau tanya, kan itu field db nya ada
    id, unique id, nama, email, encrypted password, & salt
    nah untuk unique id & salt itu diisi apa ya?
    mungkin bisa ditambahkan screenshoot saat ngisi fieldnya
    sama saat dicoba dipostman muncul eror "{"error":true,"error_msg":"Parameter (nama, email, atau password) ada yang kurang"}" untuk file login sama registernya,
    mohon pencerahannya gan

    ReplyDelete