Hai kembali lagi di kodekreasi.com . Pada kesempatan kali ini saya akan membagikan sebuah tutorial tentang cara membuat Rest API login dan register dengan mysqli. Sedikit penjelasan pada tutorial PHP yang akan kita buat kali ini ,kita akan membuat Rest Api pada sisi server dan untuk mencobanya nanti kita akan menggunakan Aplikasi POSTMAN yang dapat kalian download secara gratis. Untuk penggunaan sendiri Rest API login dan register ini bisa kalian integrasikan dengan project aplikasi android yang sedang kalian buat atau mau kalian integrasikan dengan website yang sedang kalian buat. Untuk melakukan komunikasi ke database mysql pada tutorial ini kita gunakan mysqli. Yuk langsung simak tutorialnya Membuat REST API Login dan Register Dengan MysQLi.
Persiapan Membuat REST API Login dan Register Dengan MySQLi
Untuk mengikuti Tutorial PHP kali ini ada beberapa hal yang perlu anda siapkan diantaranya :
- Pastikan anda telah menginstall text editor seperti Notepad++ ,Sublime Text atau Visual Studio Code untuk menuliskan kode program yang akan kalian buat.
- Lakukan installasi Xampp pada laptop atau pc kalian.
- Install Postman pada pc atau laptop kalian.
Langkah-langkah Membuat REST API Login dan Register Dengan MySQLi
- Buka php myadmin kemudian buat database baru.
- Pastekan query berikut pada database yang telah kalian buat :
-- phpMyAdmin SQL Dump -- version 4.9.0.1 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Generation Time: Jan 18, 2020 at 03:48 PM -- Server version: 10.4.6-MariaDB -- PHP Version: 7.1.32 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `tes` -- -- -------------------------------------------------------- -- -- Table structure for table `users` -- CREATE TABLE `users` ( `id` int(11) NOT NULL, `user_username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `user_password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `unique_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, `user_email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Indexes for dumped tables -- -- -- Indexes for table `users` -- ALTER TABLE `users` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `users` -- ALTER TABLE `users` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
- Buat folder project kalian didalam folder htdocs kalian.
- Buka text editor kalian kemudian buat folder baru bernama config dan simpan di folder project kalian.
- Didalam folder config buat file dengan nama koneksi.php kemudian isikan dengan skribt berikut :
<?php $host = 'localhost'; $user = 'root'; // diisi dengan user database kalian biasanya // defaultnya bernama root jika kita belum // merubahnya $password = ''; //diisi dengan password database kalian biasanya // defaultnya kosong $db = 'tes'; //diisi dengan nama database kalian $link = mysqli_connect($host, $user, $password, $db) or die(mysqli_error()); ?>
Sedikit penjelasan scribt diatas digunakan untuk melakukan koneksi ke database kalian. Untuk melakukan koneksi kedatabase di sini kita menggunakan mysqli.
- Setelah itu keluar dari folder config dan buat file baru bernama register.php dan isikan scribt sebagai berikut kemudian simpan di folder project kalian tadi:
<?php //meng include kan halaman init.php require_once "core/init.php"; // json response array $response = array("error" => FALSE); if (isset($_POST['name']) && isset($_POST['password']) && isset($_POST['email'])) { // menerima parameter POST ( name, password, email ) $name = $_POST['name']; $password = $_POST['password']; $email = $_POST['email']; //mengecek id apakah sudah pernah daftar atau belum if( cek_nama($name) == 0 ){ //mendaftarkan user baru $user = register_user($name, $password, $email); if($user){ // simpan user berhasil $response["error"] = FALSE; $response["user"]["name"] = $user["user_username"]; $response["user"]["key"] = $user["unique_id"]; echo json_encode($response); }else{ // gagal menyimpan user $response["error"] = TRUE; $response["error_msg"] = "Terjadi kesalahan saat melakukan registrasi"; echo json_encode($response); } }else{ // user telah ada $response["error"] = TRUE; $response["error_msg"] = "User telah ada "; echo json_encode($response); } } ?>
Untuk alur kerja dari scribt register diatas adalah menerima data user kemudian mengecek apakah nama user sudah terdaftar atau belum jika belum maka data akan disimpan kedalam database.
- Buka folder config kemudian buat file baru dengan nama functions.php . Isikan file functions.php dengan scribt program sebagai berikut :
<?php //-------------- mendaftarkan user -------------------// function register_user($name, $password, $email){ global $link; //mencegah sql injection $nama = escape($name); $pass = escape($password); $hash = hashSSHA($pass); //mengencrypt password $salt = $hash["salt"]; //berisi kode string random yang nantinya digunakan saat proses decrypt pada proses validasi $encrypted_password = $hash["encrypted"]; //mengambil data password yang sudah di enkripsi untuk ditampung pada variabel encrypted_password $query = "INSERT INTO users(user_username, user_password, unique_id, user_email) VALUES('$nama', '$encrypted_password', '$salt', '$email') ON DUPLICATE KEY UPDATE unique_id = '$salt'"; $user_new = mysqli_query($link, $query); if( $user_new ) { $usr = "SELECT * FROM users WHERE user_username = '$nama'"; $result = mysqli_query($link, $usr); $user = mysqli_fetch_assoc($result); return $user; }else{ return NULL; } } //-------------- *** end *** -------------------// //---- mencegah sql injection -----// function escape($data){ global $link; return mysqli_real_escape_string($link, $data); } //----------- *** end *** ---------// //--- mengecek nama apakah sudah terdaftar atau belum ---// function cek_nama($name){ global $link; $query = "SELECT * FROM users WHERE user_username = '$name'"; if( $result = mysqli_query($link, $query) ) return mysqli_num_rows($result); } //---------------- *** end ***-------------------------// //------------ mengenkripsi password ----------------// 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; } //------------ *** end *** -------------------------// // -------- mengenkripsi password yang dimasukkan user saat login --> public function checkhashSSHA($salt, $password) { $hash = base64_encode(sha1($password . $salt, true) . $salt); return $hash; } //------------ *** end *** -------------------------// //----------------- cek data user dan validasi------------------// function cek_data_user($name,$pass){ global $link; //mencegah sql injection $nama = escape($name); $password = escape($pass); $query = "SELECT * FROM users WHERE user_username = '$nama'"; $result = mysqli_query($link, $query); $data = mysqli_fetch_assoc($result); $unique_id = $data['unique_id']; $encrypted_password = $data['user_password']; // mengencrypt password $hash = checkhashSSHA($unique_id, $password); //validasi password if($encrypted_password == $hash){ return $data; }else{ return false; } } //---------------------- *** end *** -------------------------// ?>
- Kemudian keluar lagi dari folder config dan tambahkan folder baru dengan nama core .
- Masuk kedalam folder core kemudian tambahkan file baru dengan nama init.php . Isikan file init.php dengan scribt seperti berikut ini :
<?php require_once "config/koneksi.php"; require_once "config/functions.php"; ?>
Sebenarnya file init.php diatas hanya untuk memudahkan kita saat proses include file-file yang akan kita butuhkan sehingga kita tidak perlu mengincludekanya satu persatu lagi kedalam file tersebut cukup includekan file init.php ini sehingga akan sangat menghemat waktu jika file yang akan diincludekan cukup banyak.
- Didalam folder project kalian dimana file register.php berada tambahkan file baru dengan nama login.php . Isikan scribt berikut pada file login.php :
<?php require_once "core/init.php"; //mengecek parameter post if (isset($_POST['name']) && isset($_POST['password'])) { //menampung parameter ke dalam variabel $nama = $_POST['name']; $pass = $_POST['password']; $user = cek_data_user($nama,$pass);//validasi user if($user != false){ //jika berhasil login $response["error"] = FALSE; $response["user"]["name"] = $user["user_username"]; $response["user"]["user_key"] = $user["unique_id"]; echo json_encode($response); }else{ // user tidak ditemukan password/email salah $response["error"] = TRUE; $response["error_msg"] = "Login gagal. Password/Nik salah"; echo json_encode($response); } }else{ $response["error"] = TRUE; $response["error_msg"] = "Nik atau Password tidak boleh kosong !"; echo json_encode($response); } ?>
Jika kalian masih kebingungan tentang struktur file yang telah saya buat berikut adalah gambar struktur file yang telah saya buat :
Testing Scribt Program :
Untuk melakukan pengetesan pada script program API Login dan Registrasi Menggunakan PHP dan mysqli ini saya menggunakan POSTMAN . Aplikasi POSTMAN disini akan bertindak sebagai REST client dari REST Api server yang telah kita buat tadi dengan tujuan untuk mengetahui REST server dapat berjalan atau tidak sebelum diimplementasikan ke REST client sesungguhnya. Berikut adalah hasilnya :
- Api register user
Untuk mencoba REST Api register yang telah kita buat menggunakan postman terlebih dahulu atur methodnya menjadi POST kemudian di bagian body -> form-data isikan data key dan valuenya seperti pada gambar dibawah ,kemudian klik tombol send. Jika register berhasil maka akan didapati response seperti pada gambar di bawah ini :
- Api login user
Untuk pengetesan Api login ini hampir sama dengan Api register yaitu menggunakan method POST ,akan tetapi pada bagian body nya kita rubah menjadi seperti gambar dibawah serta url apinya pun kita ganti menjadi seperti gambar dibawah ,kemudian klik tombol send. Jika login berhasil maka akan didapati response seperti pada gambar di bawah ini :
Sekian penjelasan tentang tutorial PHP membuat REST Api login dan register dengan MySQLi apabila kalian mengalami kesulitan atau error bisa kalian tanyakan pada kolom komentar di bawah.
cara biar tampil di postman gimana?
Udah install postman ? … kalau udah tinggal buat request baru di postman, kemudian copykan url login atau register seperti pada gambar … method nya dibuat post dan paada bagian bodynya bisa disamakan pada gambar …
pas coba proses login di postman terdapat error Call to undefined function checkhashSSHA()
o iya ada yang kelupaan di file function harusnya ada fungsi checkhashSSHA() … Sudah saya update kembali artikelnya silahkan dicek kembali jika ada kesulitan bisa tinggalkan komentar lagi … terima kasih 🙂
ini kenapa ya error
Parse error: syntax error, unexpected token “public”, expecting end of file in C:\xampp\htdocs\e-kas\config\functions.php on line 55
// ——– mengenkripsi password yang dimasukkan user saat login –>
public function checkhashSSHA($salt, $password) {
$hash = base64_encode(sha1($password . $salt, true) . $salt);
return $hash;
}
//———— *** end *** ————————-//
coba cek penulisan scribtnya lagi mas di file function baris 55 … pastikan di deket tag buka tutup php harus dikasih spasi jangan ada scribt yang menempel di tag buka tutup php
di postman sama kayak di gambar. tapi kok didatabase datanya nggak ke simpen ya gan? satu lagi, saya register ulang, katanya datanya sudah ada
saya sudah berhasil tapi data nggak ke simpan didatabase, tapi saat saya ulang register katanya data sudah ada.
berkali kali saya refresh mySQL tetap sama.
udah masuk gan. ternyata harus di close open dulu…. thanks ya gan
hee ok lah kalau udah bisa , maaf baru buka kolom komentar