Judul : Android PHP dan MYSQL Database bagian 1
link : Android PHP dan MYSQL Database bagian 1
Android PHP dan MYSQL Database bagian 1
Bagaimana aplikasi Android bisa berkomunikasi dengan Mysql database?Pertanyaan di atas banyak bergentayangan di internet. Jawaban_nya bervariasi sesuai dengan pengalaman orang yang menjawabnya. Di sini saya hanya ingin ikut meramaikan dan ingin melanjutkan percakapan tentang hal tesebut karena menurut saya hal itu adalah sangat penting sebagai basis untuk berkiprah dalam dunia develop aplikasi android.
Banyak developer yang ingin mejawab pertanyaan tsb, tapi jawaban-nya tak ada yang singkat tapi semuanya panjang dan berliku karena memang develop aplikasi memakan waktu panjang dan dengan jalan yang penuh liku. Itulah indahnya kalau mau jadi developer, selalu ada tantangan setiap saat.
Saya akan mencoba menjelaskan-nya sebisa saya dan sesingkat mungkin. Semoga ada yang lain akan menambahkan-nya.
Untuk menjawab pertanyaan di atas, saya harus membuat sebuah kasus atau skenario untuk sebuah aplikasi yang sangat singkat, sehingga coding-nya nanti juga akan lebih singkat untuk bisa di telusuri.... developing tak ada yang singkat, kawan...
Kasus yang saya pakai sebagai contoh adalah sebuah forum kecil yang sifatnya sbb:
- Registrasi dulu sebelum bisa jadi anggota
- Aplikasi akan menolak meregistrasi dengan nama yang sama
- Hanya anggota, yang bisa membaca dan bisa menulis komentar
- Setelah jadi anggota harus login dulu sebelum bisa membaca komentar
- Pasang kotak utk isi username dan password di halaman login
- Di halaman login juga ada tombol 'Registrasi' utk yg belum registrasi
- Beri peringatan jikalau login dengan username dan password yang salah
- Setelah sukses login bawalah anggota ke halaman komentar
- Bubuhkan tombol 'Isi Komentar' untuk mengisi komentar
- Bubuhkan tempat untuk tulis 'Judul Komentar' dan 'Isi Komentar
- Bubuhkan tombol 'Kirim Komentar' untuk bisa kirim komentar
- Beri peringatan jika 'Judul Komentar' dan 'Isi Komentar' kosong
Di lihat dari sifat aplikasi tersebut di atas maka kita akan membutuhkan beberapa halaman atau 'activity atau class, antara lain:
- Halaman Login
- Halaman Registrasi
- Halaman Baca Komentar
- Halaman Tambah Komentar
- Halaman JSON
Kita tambahkan halaman JSON (Javascript Object Notation)
JSON adalah language independent artinya ia di mengerti oleh hampir semua bahasa programan sehingga ia sangat cocok menjadi jembatan antara bahasa program yang berbeda. JSON-lah yang akan bertanggung jawab agar aplikasi-nya dinamik dan responsive, misalnya memberi peringatan kepada pengguna jikalau mereka masukan password dan username yang salah dll
Silahkan baca tentang json di http://en.wikipedia.org/wiki/JSON
Halaman Login
Halaman login akan ada tempat untuk isi username, password. dan dua buah tombol satunya tombol Login dan yang lain-nya adalah tombol Registrasi.
Ketika tekan tombol login tanpa password maka aplikasi memberikan peringatan kepada pengguna agar mengisi password dan usernamenya. Demikian juga ketika tekan tombol Registrasi tanpa username dan password.
Halaman Baca Komentar
User yang login dengan benar langsung di antar ke halaman Baca Komentar dan pada bagian bawah halaman komentar ada tombol Tambah Komentar agar pengguna bisa ikut berkomentar. Aplikasi akan menolak untuk submit komentar yang kosong dengan memberikan warning.
Halaman-halaman tersebut (terkecuali JSON) akan di bangun di dua sisi. Di sisi klien akan di bangun menggunakan java(android) dan di sisi server akan di bangun menggunakan PHP. (alasan-nya karena PHP teman baik dengan MYSQL).
Apa saja yang di perlukan untuk membangun aplikasi seperti ini
- Server
- Android dan Eclipse
- PHP dan Mysql
Jikalau sudah ada server bayaran, silahkan atur Mysql database-nya disana. Tapi kalau tak bisa bayar server, saya rekomendasikan untuk download server yang free dari internet untuk di pasang di komputer sendiri. Di internet bergentayangan server seperti WAMP ada juga XAMPP. Silahkan pilih menurut selera masing2. Walaupun sudah ada server bayaran, namun untuk develop ada baiknya install server di komputer sendiri agar semua server side code bisa di coba tanpa harus selalu konek ke internet.
Saya akan membicarakan tentang server pada kesempatan lain... semoga
Android dan Eclipse
Download Android dan Eclipse .. free loh...
PHP dan Mysql
Hampir semua server bisa PHP dan Mysql.
Saya berasumsi bahwa anda membaca tutorial ini karena ingin melihat cara kerja aplikasi android, sehingga saya tidak meng-elaborasi lebih jauh tentang PHP, MYSQL dan yang lain-nya. Tapi kalau ingin membaca PHP dan MYSQL silahkan kesana dahulu dengan tekan link yang sudah saya sediakan di atas.
Kembali ke daftar sifat-sifat aplikasi di atas...... Halaman pertama yang harus di bangun tentunya adalah halaman 'Login' ...Kode halaman Login ini akan di representasikan dengan dua buah halaman yaitu sebuah halaman di sisi klien dan sebuah halaman di sisi server. Di sisi server saya beri nama login_nya.php di bangun dengan php, dan di sisi klien dengan nama ClassUtkLogIn.java di bangun pakai java. Semua server side script dalam hal ini adalah halaman PHP harus di simpan di dalam sebuah folder dengan nama sesuka hati, tapi di dalam contoh disini saya menamakan folder-nya mysql_android.
Di server XAMPP folder mysql_android tersebut di masukan lagi di dalam folder htdocs, Sedangkan di server lain mungkin di simpan di dalam folder bernama www atau public_html dan lain-lain. Mohon baca petunjuk server-nya
Tapi... sebelum itu buatlah terlebih dahulu databasenya di server dengan nama tampung_data saya sengaja menamakan_nya demikian karena semua data akan di tampung disana, baik data pengguna maupun data komentarnya.
Di dalam database tampung_data tersebut, masukan dua buah table, satunya dengan nama 'tempat_komentar' untuk menampung komentar dengan isi sbb:
CREATE TABLE tempat_komentar
(
komentar_id int(11) UNIQUE AUTO_INCREMENT,
username_nya varchar(64),
judul_komentar varchar(120),
isi_komentar varchar(255)
)
dan table 'anggota' untuk menampung keterangan tentang anggota sbb:
CREATE TABLE anggota
(
anggota_id int(11) UNIQUE AUTO_INCREMENT,
username_nya varchar(64) UNIQUE,
password_nya varchar(120),
)
Berikut adalah isi dari login_nya.php yang harus di simpan di server sebagai server side code
<?phpSaya sisipkan penjelasan dalam kode di atas, silahkan telusuri... mereka yang jago PHP pasti tidak asing dengan kode di atas
//©Vik Sintus Projects
//pasang halaman konfigurasi_nya.php agar
//bisa konek
require("/konfigurasi_nya.php");
if (!empty($_POST)) {
if (empty($_POST['username_nya']) || empty($_POST['password_nya'])) {
// kalau 'username' dan 'password' kosong
// JSON menjawab agar pengguna tahu apa yg terjadi
$jawaban_nya["berhasil"] = 0;
$jawaban_nya["tampilkan_pesan"] = "Masukan NamaUser dan PasswordNya!.";
// metode die() akan matikan halaman dan tidak
// mengeksekusi kode2 selanjutnya, dan juga akan
// memperlihatkan parameter2, yaitu JSON data yang
// akan di parsing oleh android
die(json_encode($jawaban_nya));
}
// ambil info dari user berdasarkan username.
$query = "
SELECT
anggota_id,
username_nya,
password_nya
FROM anggota
WHERE
username_nya = :username
";
$parameter_nya = array(
':username' => $_POST['username_nya']
);
try {
$statement_nya = $db->prepare($query);
$result = $statement_nya->execute($parameter_nya);
}
catch (PDOException $ex) {
// utk percobaan, bisa saja menggunaka metode die();
//atau pakai cara berikut untuk menampilkan data dari JSON
$jawaban_nya["berhasil"] = 0;
$jawaban_nya["tampilkan_pesan"] = "DatabaseNya salah. Di coba lagi yah!";
die(json_encode($jawaban_nya));
}
//bikin satu variable utk priksa kebenaran login dan
//di inisialisasikan dengan false.
$validasi_identitas = false;
//tarik semua parameter pada 'query' di atas dengan
//metode fetch()
$row = $statement_nya->fetch();
if ($row) {
//kalau passwordnya di encrypt, maka di lakukan di sini tapi
//saya bukan ahli encrypt, silahkan baca2 tentang encrypt,
//disini saya hanya berkepentingan utk
//menjalankan script ini sejajar dengan java (android) sehingga
//saya hanya membandingkan password yg di input dan
//password yg ada di database
if ($_POST['password_nya'] === $row['password_nya']) {
$login_nya_ok = true;
}
}
// kalau login-nya berhasil, orangnya di antar ke halaman users
// kalau tidak, tampilkan pesan gagal dan tunjukan form lagi
if ($login_nya_ok) {
$jawaban_nya["berhasil"] = 1;
$jawaban_nya["tampilkan_pesan"] = "LoginNya Berhasil!";
die(json_encode($jawaban_nya));
} else {
$jawaban_nya["berhasil"] = 0;
$jawaban_nya["tampilkan_pesan"] = "LoginNya Gagal!";
die(json_encode($jawaban_nya));
}
}
else {
?>
<h1>Login</h1>
<form action="login_nya.php" method="post">
Username:<br />
<input type="text" name="username" placeholder="username" />
<br /><br />
Password:<br />
<input type="password" name="password" placeholder="password" value="" />
<br /><br />
<input type="submit" value="Login" />
</form>
<a href="registrasi.php">Register</a>
<?php
}
?>
Di baris pertama ia minta 'require("/konfigurasi_nya.php");' maka berikut adalah isi dari konfigurasi_nya.php
<?php
// ©Vik Sintus Projects
// 4 variable berikut harus cocok dengan yang ada di database
$username = "root";
$password = "";
$host = "localhost";
$dbname = "tampung_komentar";
// pakai utf8 agar databasenya bisa muat banyak jenis karakter seperti
// huruf dan agka
// silahkan baca2 tentang utf8 di
// http://en.wikipedia.org/wiki/UTF-8
$pakai_utf8 = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
// bagi mereka yang pintar PHP tentunya tak asing dengan try/catch
// Metode tersebut di pakai utk menangkap kesalahan pada kode yg
// bersifat object oriented,
// pertama di eksekusi dalam 'try' dan kalau memukan kesalahan maka akan
// berhenti eksekusi dan melompat ke 'catch' dengan sebuah pesan agar
// pengguna tak garuk2 kepala
// Silahkan baca2 tentang exceptions di
// http://us2.php.net/manual/en/language.exceptions.php
try
{
// statement dalam wilayah 'try' ini membukan koneksi ke datbase menggunakan
// PDO library
// PDO di design utk menyediakan flexible interface antara PHP dengan
// banyak jenis database servers.
// silahkan baca2 tentang PDO di
// http://us2.php.net/manual/en/class.pdo.php
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $pakai_utf8);
}
catch(PDOException $eksepsinya)
{
// jika ada kesalahan saat buka koneksi ke database maka
// akan terperangkap disini dan berhenti eksekusi dan
// menunjukan pesan (apanya yg salah)
// Kalau utk produksi mungkin tak perlu output $eksepsinya->getMessage().
// agar tak mudah di mainkan oleh orang nakal.
die("Koneksi ke database Gagal: " . $eksepsinya->getMessage());
}
// berikut adalah konfigurasi PDO mengeluarkan exception ketika
// menemukan kesalahan dalam kode, agar bisa di pakai utk
// try/catch
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// berikut adalah konfigurasi PDO utk melihat barisan data(rows) di
// dalam database menggunakan 'associative array'
// maksudnya array akan ada 'string indexes', dimana isi
// string me-representasikan nama kolom di database .
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// get_magic_quotes_gpc sudah wafat tapi jaga kemungkinan jikalau
// ada manusia yg masih pakai PHP tua bangka (PHP 5.3 kebawah) maka
// kode berikut adalah berguna untuk mengagaglkan magic quotes.
// baca tentang magic qoutes selengkapnya di:
// http://php.net/manual/en/security.magicquotes.php
if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
function matikan_magic_quotes_nya(&$array)
{
foreach($array as &$value)
{
if(is_array($value))
{
matikan_magic_quotes_nya($value);
}
else
{
$value = stripslashes($value);
}
}
}
matikan_magic_quotes_nya($_POST);
matikan_magic_quotes_nya($_GET);
matikan_magic_quotes_nya($_COOKIE);
}
// berikut utk informasikan web browser bahwa isinya adalah di
// encoded dengan UTF-8 sehingga content yang di return adalah
// dalam bentuk utf8 juga
header('Content-Type: text/html; charset=utf-8');
// 'sessions' di gunakan utk menyimpan informasi tentang
// pengunjung dari halaman ke halaman
// Berbeda dengan 'cookie', sessions menyimpan infromasi di server
// Namun demikian, dalam banyak kasus 'sessions' masih menggunakan
// cookies tapi pengunjung juga harus menghidupkan cookie_nya
// silahkan baca2 tentang cookie di:
// http://us.php.net/manual/en/book.session.php
session_start();
?>
Halaman untuk login dari sisi server sudah selesai, berikut adalah halaman login dari sisi klien yaitu dari aplikasi android dengan nama ClassUtkLogIn.java
package com.vik_sintus.projects.koneksiandroidmysql;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ClassUtkLogIn extends Activity implements OnClickListener {
private EditText isiNamaUser, isiPassword;
private Button tombolLogin, tombolRegistrasi;
// utk progress bar_nya
private ProgressDialog progressBarNya;
// pasang class JSON parser
ClassJSONParser classJsonParser = new ClassJSONParser();
// lokasi script utk login: bernama login_nya.php
// biasanya localhost :
// tapi untuk testing, lebih baik pakai alamat IP
// kalau tak tahu IP-nya di windows silahkan buka
// command prompt lalu ketik ipconfig
// lihat IPv4 Address
// kalau di mac ketik ifconfig dan cari ip dengan en0 atau en1
// private static final String LINK_UNTUK_LOGIN =
// "http://xxx.xxx.x.x.xxx/folderNya/login_nya.php";
// kalau cobe di emulator:
private static final String LINK_UNTUK_LOGIN = "http://192.168.1.102/mysql_android/login_nya.php";
// coba di server jauh(remote), server bayaran:
// private static final String LINK_UNTUK_LOGIN =
// http://www.namaWeb.com/folderNya/login_nya.php;
// identitas elemen yg perlu di
// jawab oleh JSON dari php script:
private static final String TAG_SUKSES = "berhasil";
private static final String TAG_PESAN = "tampilkan_pesan";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tampilan_login);
// utk kotak input yg perlu di di isi pengguna
isiNamaUser = (EditText) findViewById(R.id.username);
isiPassword = (EditText) findViewById(R.id.password);
// utk tombol
tombolLogin = (Button) findViewById(R.id.login);
tombolRegistrasi = (Button) findViewById(R.id.register);
// agar tombol bisa di klik
tombolLogin.setOnClickListener(this);
tombolRegistrasi.setOnClickListener(this);
}
@Override
public void onClick(View apaYgDiKlik) {
switch (apaYgDiKlik.getId()) {
case R.id.login:
new MencobaLogin().execute();
break;
case R.id.register:
Intent i = new Intent(this, ClassRegistrasi.class);
startActivity(i);
break;
default:
break;
}
}
class MencobaLogin extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBarNya = new ProgressDialog(ClassUtkLogIn.this);
progressBarNya.setMessage("Mencoba login...");
progressBarNya.setIndeterminate(false);
progressBarNya.setCancelable(true);
progressBarNya.show();
}
@Override
protected String doInBackground(String... args) {
// jika sukses
int jikaSukses;
String namaUser = isiNamaUser.getText().toString();
String password = isiPassword.getText().toString();
try {
// menyusun parameternya (disini parameternya
// cuma 2 (username dan password))
List<NameValuePair> namaDanPassword = new ArrayList<NameValuePair>();
namaDanPassword.add(new BasicNameValuePair("username_nya", namaUser));
namaDanPassword.add(new BasicNameValuePair("password_nya", password));
Log.d("requestNya!", "dimulai");
// utk melengkapi proses login, maka
// perlu membuatHttpRequst ke server
JSONObject jsonObjectNya = classJsonParser.membuatHttpRequest(LINK_UNTUK_LOGIN, "POST",
namaDanPassword);
// priksa log jawaban dari JSON
Log.d("Coba login", jsonObjectNya.toString());
// apa kata JSON tentang TAG_SUKSES
jikaSukses = jsonObjectNya.getInt(TAG_SUKSES);
if (jikaSukses == 1) {
Log.d("Login_nya Sukses!", jsonObjectNya.toString());
// simpan data yg di masukan pengguna
SharedPreferences sharedPrefNya = PreferenceManager
.getDefaultSharedPreferences(ClassUtkLogIn.this);
Editor editorNya = sharedPrefNya.edit();
editorNya.putString("username_nya", namaUser);
editorNya.commit();
Intent intentNya = new Intent(ClassUtkLogIn.this, ClassBacaKomentar.class);
finish();
startActivity(intentNya);
return jsonObjectNya.getString(TAG_PESAN);
} else {
Log.d("Login_nya Gagal!", jsonObjectNya.getString(TAG_PESAN));
return jsonObjectNya.getString(TAG_PESAN);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String urlFileNya) {
// kalau sudah selesai di gunakan, matikanlah
// progressbar_nya dengan metode dismiss();
progressBarNya.dismiss();
if (urlFileNya != null) {
Toast.makeText(ClassUtkLogIn.this, urlFileNya, Toast.LENGTH_LONG).show();
}
}
}
}
Dalam kode java di atas di minta tampang atau user interface(UI) dari halaman login di setContentView(R.layout.tampilan_login);
Berikut adalah isi dari tampilan_login.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/login"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/login"
android:layout_marginBottom="25dp"
android:text="Registrasi" />
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/register"
android:layout_alignLeft="@+id/password"
android:layout_alignRight="@+id/password"
android:text="Login" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/login"
android:layout_centerHorizontal="true"
android:ems="10"
android:inputType="textPassword" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="17dp"
android:gravity="center"
android:text="Belajar Android PHP Mysql"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" />
<ImageView
android:contentDescription="Lodokn One Cicingn Pe'ang"
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true"
android:src="@drawable/lodok" />
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/password"
android:layout_alignLeft="@+id/password"
android:layout_marginLeft="22dp"
android:text="PasswordNya" />
<EditText
android:inputType="text"
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/TextView01"
android:layout_centerHorizontal="true"
android:ems="10" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/TextView01"
android:layout_centerVertical="true"
android:text="NamaUserNya" />
</RelativeLayout>
Berikut adalah tampilan halaman Login
Halaman Login |
Intent intentNya = new Intent(ClassUtkLogIn.this, ClassBacaKomentar.class);intentNya apa? Kode di antas menunjukan bahwa intentNya adalah untuk buka halaman Login dan juga buka halaman Baca Komentar ... Dengan demikian kini saatnya kita membuat class untuk baca komentar yang saya beri nama ClassBacaKomentar.java.
finish();
startActivity(intentNya);
Tetapi... oleh karena halaman ini sudah terlalu panjang maka saya akan memulai ClassBacaKomentar pada post baru... silahkan baca di http://belajar-android-indonesia.blogspot.com.au/2013/10/android-php-dan-mysql-database-bagian-2.html
Demikianlah Artikel Android PHP dan MYSQL Database bagian 1
Sekianlah artikel Android PHP dan MYSQL Database bagian 1 kali ini, mudah-mudahan bisa memberi manfaat untuk anda semua. baiklah, sampai jumpa di postingan artikel lainnya.
Anda sekarang membaca artikel Android PHP dan MYSQL Database bagian 1 dengan alamat link https://aplikasi212.blogspot.com/2013/10/android-php-dan-mysql-database-bagian-1.html
0 Response to "Android PHP dan MYSQL Database bagian 1"
Posting Komentar