Android PHP dan MYSQL database bagian 2

Sebelum membaca halaman ini, bacalah dahulu 'Android PHP dan MYSQL database bagian 1' di sana sudah di cantumkan kode untuk halaman login baik dari sisi server maupun dari sisi klien. Disana juga telah di jelaskan bahwa halaman login,.. juga akan membuka halaman komentar agar user yang sudah register bisa membaca komentar maka berikut adalah isi dari class Baca Komentar yang saya berinama ClassBacaKomentar.java
 package com.vik_sintus.projects.koneksiandroidmysql;
/*
 * ©Vik Sintus Projects
 *
 * Segala kelebihan dan kekurangan di luar tanggung jawab pembuat.
 * Di larang memakai kode ini untuk kepentingan komersial tanpa ijin.
 * Silahkan di pakai untuk kepentingan belajar.
 * vik.sintus@gmail.com
 *
 * Unless required by applicable law or agreed to in writing, this software
 * is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 
 * 
 */
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class ClassBacaKomentar extends ListActivity {

 // Progress bar_nya
 private ProgressDialog progressBarNya;

 // lokasi script utk baca_komentar.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_SEMUA_KOMENTAR =
  // "http://xxx.xxx.x.x.xxx/folderNya/baca_komentar.php";

  // coba di Emulator:jangan lupa ganti dengan IP sendiri yah
 private static final String LINK_SEMUA_KOMENTAR = "http://192.168.1.102/mysql_android/baca_komentar.php";

 // kalau di server benaran:
  // private static final String LINK_SEMUA_KOMENTAR =
  // "http://www.namaWeb.com/folderNya/baca_komentar.php";

  // berikut adalah identitas dari JSON element yang
  // merespond dari halaman PHP (baca_komentar.php)
 private static final String TAG_SUKSES = "koneksi_sukses";
 private static final String TAG_JUDUL_KOMENTAR = "judul_komentar";
 private static final String TAG_SEMUA_KOMENTAR = "semua_komentar";
 private static final String TAG_POST_ID = "komentar_id";
 private static final String TAG_USERNAME = "username_nya";
 private static final String TAG_ISI_KOMENTAR = "isi_komentar";

 // sebuah array utk semua komentar
 private JSONArray semuaKomentar = null;
 // atur semua komentar dalam bentuk berbaris(daftar).
 private ArrayList<HashMap<String, String>> susunanKomentar;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // tampilan yg di pakai disini adalah baca_komentar.xml dan
  // bukan single_post.xml yah
  setContentView(R.layout.baca_komentar);
 }

 @Override
 protected void onResume() {
  super.onResume();
  // pasang(loading) semua komentar melalui AsyncTask
  new TampilSemuaKomentar().execute();
 }
    //pada class BacaKomentar ini juga akan ada intent baru utk
 //membuka halaman(activity) baru yaitu activity utk classTambahKomentar
 //maka di buat metode 'tambahKomentar' berikut ini yg akan di
 //panggil dari xml dengan metode onclick... lihat di 'baca_komentar.xml'
 public void tambahKomentar(View v) {
  Intent intentNya = new Intent(ClassBacaKomentar.this, ClassTambahKomentar.class);
  startActivity(intentNya);
 }

 /**
  * ambil posting terbaru dari server dengan
  * meng-update JSON-nya.
  */
 public void jsonDataNyaDiUpdate() {
        //buatkan arraylist utk menampung semua JSON data dan
  //kita akan menggunakan beberapa 'key value pairs' ber
  //dasarkan nama JSON element yang kita tanam di 
  //halaman php yg identitasnya telah di sebutkan 
  //pada beberapa TAG di atas
 
  susunanKomentar = new ArrayList<HashMap<String, String>>();

  // hidupkan JSONParser-nya
  ClassJSONParser jsonParserNya = new ClassJSONParser();
  // masukan url untuk komentar-nya, sehingga 
  // JSONObject memuntahkan isi komentar yang ada
  JSONObject jsonObjectNya = jsonParserNya.ambilJsonDariUrl(LINK_SEMUA_KOMENTAR);

  // ketika parsing sesuatu lewat JSON , ada baiknya
  // di pasang 'try catch exceptions' utk menanggkap hal2 yang
  // tak terduga(error) :
  try {

   semuaKomentar = jsonObjectNya.getJSONArray(TAG_SEMUA_KOMENTAR);

   // terus looping ke semua komentar yang telah ada sesuai
   // dengan apa yang di dapatkan oleh JSONObject
   for (int i = 0; i < semuaKomentar.length(); i++) {
    JSONObject komentarNya = semuaKomentar.getJSONObject(i);

    // ambil isi dari masing2 tag
    String username_nya = komentarNya.getString(TAG_USERNAME);
    String judul_komentar = komentarNya.getString(TAG_JUDUL_KOMENTAR);
    String isi_komentar = komentarNya.getString(TAG_ISI_KOMENTAR);
    

    // buatkan HashMap baru utk mencocokan TAG dan parameter-nya
    HashMap<String, String> map = new HashMap<String, String>();
                
    map.put(TAG_USERNAME, username_nya);
    map.put(TAG_JUDUL_KOMENTAR, judul_komentar);
    map.put(TAG_ISI_KOMENTAR, isi_komentar);
    
    susunanKomentar.add(map);

   }

  } catch (JSONException e) {
   e.printStackTrace();
  }
 }

 /**
  * masukan data yg sudah di parsing
  * ke dalam listview.
  */
 private void updateListViewNya() {
  //utk listActivity kita perlu memasang List Adapter dengan 
  //mendeklarasikan-nya
  //SimpleAdapter ini akan memakai HashMap arrayList yang
  //telah di update.
  //gunakan komentar_tunggal.xml sebagai template utk 
  //setiap item di dalam list dan perhatikan identitas GUI_nya
  //agar jangan salah mengikuti susunan-nya
  ListAdapter adapterNya = new SimpleAdapter(this, susunanKomentar,
    R.layout.komentar_tunggal, new String[] { TAG_USERNAME, TAG_JUDUL_KOMENTAR, TAG_ISI_KOMENTAR
       }, new int[] { R.id.usernameNya, R.id.judul, R.id.komentar
       });

  // kalau semuanya sudah benar maka
  //pasanglah ListAdapter-nya
  setListAdapter(adapterNya);
  //ketika klik pada satu komentar sebenarnya 
  //bisa melakukan sesuatu, misalnya pergi ke activity 
  //lain atau ke link tapi disini saya pilih utk 
  //tidak melakukan apa2
  ListView lv = getListView(); 
  lv.setOnItemClickListener(new OnItemClickListener() {

   @Override
   public void onItemClick(AdapterView<?> parent, View view,
     int posisiNya, long idNya) {

   }
  });
 }

 public class TampilSemuaKomentar extends AsyncTask<Void, Void, Boolean> {

  @Override
  protected void onPreExecute() {
   super.onPreExecute();
   progressBarNya = new ProgressDialog(ClassBacaKomentar.this);
   progressBarNya.setMessage("Tunggu yah, masih loading...");
   progressBarNya.setIndeterminate(false);
   progressBarNya.setCancelable(true);
   progressBarNya.show();
  }

  @Override
  protected Boolean doInBackground(Void... arg0) {
   jsonDataNyaDiUpdate();
   return null;

  }

  @Override
  protected void onPostExecute(Boolean tampilkanHasilNya) {
   super.onPostExecute(tampilkanHasilNya);
//setelah tampil hasilnya matikan progress barnya 
//dengan metode dismiss();
   progressBarNya.dismiss();
   updateListViewNya();
  }
 }
}




Perhatikan kode di atas dan lihat di baris yang nampak sbb:
 Intent intentNya = new Intent(ClassBacaKomentar.this, ClassTambahKomentar.class);
  startActivity(intentNya);
IntentNya apa? atau tujuan bentuknya halaman ini untuk apa?...tentunya untuk buka classBacaKomentar itu sendiri dan juga buka ClassTambahKomentar. Tetapi... sebelum saya tulis ClassTambahKomentar ada baiknya saya tulis dahulu tampang design dari ClassBacaKomentar tersebut di atas dengan nama baca_komentar.xml yang di dalam kode java nampak sebagai berikut
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // tampilan yg di pakai disini adalah baca_komentar.xml
  setContentView(R.layout.baca_komentar);
 }
Berikut adalah isi dari baca_komentar.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff" >

    <LinearLayout
        android:id="@+id/baret_hijau_atas"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/baret_hijau"
        android:orientation="horizontal" >

        <TextView
            style="@style/huruf_hitam"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="@string/baca_komentar_judul"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/baret_hijau_bawah"
        android:layout_below="@+id/baret_hijau_atas"
        android:background="#fff"
        android:divider="@android:color/transparent"
        android:scrollbars="none" />

    <LinearLayout
        android:id="@+id/baret_hijau_bawah"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@drawable/baret_hijau"
        android:orientation="horizontal"
        android:weightSum="2" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical" >
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical" >

            <Button
                android:id="@+id/tombol_kirim"
                style="@style/huruf_putih"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:background="@drawable/tombol_kirim"
                android:onClick="tambahKomentar"
                android:text="@string/tombol_kirim" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>
Berikut adalah tampilan halaman baca komentar dan saya sudah masukan dua orang anggota untuk di gunakan sebagai contoh ... tuh telah registrasi bernama Tirok Ndibol dan Kristina Molas. Keduanya telah meninggalkan pesan seperti terlihat pada gambar Baca Komentar berikut:
Baca Komentar

Silahkan mempelajari android UI design dengan membandingkan kode xml dan gambar di atas. Mungkin ada beberapa object yang redundant, tapi saya malas membersihkan-nya. Tapi yang jelas redundancy tersebut tidak akan mengurangi proses kerja aplikasi
Kedua kode yang telah saya tulis di atas adalah untuk sisi klien yaitu di buat di project android... berikut adalah kode PHPnya untuk sisi server yang saya beri nama baca_komentar.php. Antara sisi server dan sisi klien, keduanya harus saling bercermin yah
<?php
//©Vik Sintus Projects
//di sini juga perlu konfigurasi_nya.php agar
//bisa konek ke server
require("/konfigurasi_nya.php");

//agar bisa lihat semua komentar maka
//Select * ( pilih semua) FROM tempat_komentar
$query = "Select * FROM tempat_komentar";

//query-nya di eksekusi
try {
    $apa_yang_di_query  =  array();
    $statement_nya   = $db->prepare($query);
    $result = $statement_nya->execute($apa_yang_di_query);
 
}
catch (PDOException $ex) {
    $jawab["sukses"] = 0;
    $jawab["pesan"] = "Database_nya Salah!";
    die(json_encode($jawab));
}
// ambil semua baris komentar yang di ketemukan dan
// masukan semuanya kedalam sebuah array() menggunakan fetchAll() 
$rows = $statement_nya->fetchAll();


if ($rows) {
    $jawab["sukses"] = 1;
    $jawab["pesan"] = "Telah ada komentar!";
    $jawab["semua_komentar"]   = array();
    
    foreach ($rows as $baris) {
        $komentar             = array();
  $komentar["komentar_id"]  = $baris["komentar_id"];
        $komentar["username_nya"] = $baris["username_nya"];
        $komentar["judul_komentar"]    = $baris["judul_komentar"];
        $komentar["isi_komentar"]  = $baris["isi_komentar"];
        
        
        //setelah di masukan ke dalam array maka
  //jawaban JSON harus di update
        array_push($jawab["semua_komentar"], $komentar);
    }
    
    // tunjukan jawaban JSON ke layar
    echo json_encode($jawab);
    
    
} else {
    $jawab["sukses"] = 0;
    $jawab["pesan"] = "Belum ada komentar!";
    die(json_encode($jawab));
}

?>


Kode di atas cukup self-explanatory-lah, silahkan di telusuri... Halaman baca_komentar.php yang nota bene adalah berada di sisi server adalah hanya untuk menyusun data output dalam format JSON, sehingga isinya gampang di parsing dan di olah oleh class JSON yang berada di sisi klien. Saya telah masukan beberapa anggota di dalam aplikasi forum ini yang kita akan pakai sebagai contoh, dua di antaranya yaitu si Tirok Ndibol dan si Kristina Molas telah isi komentar di forum seperti terlihat pada gambar Baca Komentar di atas. Berikut tampilan data mentah dari JSON (atau sering di sebut JSON format) yang di hasilkan dari kode di halaman baca_komentar.php di atas. Perhatikan komentar dari Tirok Ndibol dan Kristina Molas.... sangat tak rapi untuk di lihat manusia tapi aplikasi akan sangat senang untuk konsumsi data seperti itu
{"sukses":1,"pesan":"Telah ada komentar!",<br />"semua_komentar":[{"komentar_id":"1","username_nya":"tirokNdibol",<br />"judul_komentar":"cobay di e... kesa",<br />"isi_komentar":"halo...halo test"},<br />{"komentar_id":"2","username_nya":"kristinaMolas","judul_komentar":"cobab di tah",<br />"isi_komentar":"oe... lawa, aku hi Kristina e... nia ngaok lawa"}]}
Kalau mau paham benar akan pekerjaan JSON maka perhatikan secara saksama antara lain kode php, hasil olahan JSON dan hasil olahan manusia. Hasil olahan manusia tentunya nampak lebih cantik seperti terlihat pada gambar 'Baca Komentar' ... semua itu kita patut berterima kasih kepada ClassBacaKomentar.java dan pasangan cantiknya si baca_komentar.xml dan juga sebuah ClassJSONParser.java yang akan segera saya tulis.
Halaman baca komentar sudah selesai, Tapi di ClassUtkLogIn.java juga ada tombol Registrasi yang mengarahkan ke Halaman Registarasi ... maka untuk itu mari kita buatkan class untuk halaman Registrasi yang saya beri nama ClassRegistrasi.java
Berikut adalah isi dari ClassRegistrasi.java
package com.vik_sintus.projects.koneksiandroidmysql;
/*
 * ©Vik Sintus Projects
 *
 * Segala kelebihan dan kekurangan di luar tanggung jawab pembuat.
 * Di larang memakai kode ini untuk kepentingan komersial tanpa ijin.
 * Silahkan di pakai untuk kepentingan belajar.
 * vik.sintus@gmail.com
 *
 * Unless required by applicable law or agreed to in writing, this software
 * is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 
 * 
 */
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.os.AsyncTask;
import android.os.Bundle;
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 ClassRegistrasi extends Activity implements OnClickListener {
 private EditText kotakUser, kotakPassword;
 private Button  tombolRegistrasi;
 
  // utk progress bar
    private ProgressDialog progressBarNya;
 
    // panggil ClassJsonParser ke sisni
    ClassJSONParser classJSONParserNya = new ClassJSONParser();
    
    //lokasi registrasi.php
    
    //kalau localhost atau komputer rumah lebih baik pakai
    // alamat IP
    //kalau di windows, buka command prompt lalu ketik ipconfig
    //lihat IPv4 Address
    //atau kalau di aple mac terminal silahkan ketik ifconfig dan 
    //lihat IPnya di bawah en0 or en1
    
    //sehingga kalau coba di Emulator akan terlihat mirip sbb:
    private static final String LINK_UTK_REGISTRASI = "http://192.168.1.102/mysql_android/registrasi.php";
    
    //tapi kalau di server bayaran(remote) maka akan terlihat sbb:
    //private static final String LOGIN_URL = "http://www.namaWebMu.com/namafolderNya/registrasi.php";
    
    //id's
    private static final String TAG_BERHASIL = "sukses";
    private static final String TAG_PESAN = "pesan";
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.tampilan_registrasi);
  
  kotakUser = (EditText)findViewById(R.id.username);
  kotakPassword = (EditText)findViewById(R.id.password);
  

  tombolRegistrasi = (Button)findViewById(R.id.register);
  tombolRegistrasi.setOnClickListener(this);
  
 }

 @Override
 public void onClick(View v) {
  // klik tombol register untuk apa?
    new MendaftarPenggunaBaru().execute();
  
 }
 
 class MendaftarPenggunaBaru extends AsyncTask<String, String, String> {

   /**
         * saat setelah tekan tombol registrasi tunjukanlah progressBar kepada 
         * *pengguna agar ia tahu aplikasi sedang apa
         * */
  boolean failure = false;
  
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBarNya = new ProgressDialog(ClassRegistrasi.this);
            progressBarNya.setMessage("Menyimpan User...");
            progressBarNya.setIndeterminate(false);
            progressBarNya.setCancelable(true);
            progressBarNya.show();
        }
  
  @Override
  protected String doInBackground(String... args) {
    // priksa TAG_BERHASIL
            int berhasil;
            String usernameNya = kotakUser.getText().toString();
            String passwordNya = kotakPassword.getText().toString();
            try {
                // Cocokan parameternya yah 'username ke username dan
             // password ke password
                List<NameValuePair> parameterNya = new ArrayList<NameValuePair>();
                parameterNya.add(new BasicNameValuePair("username_nya", usernameNya));
                parameterNya.add(new BasicNameValuePair("password_nya", passwordNya));
 
                Log.d("Request ke server!", "dimulai");
                
                // kirim data dari user ke script di server 
                JSONObject jsonObjectNya = classJSONParserNya.membuatHttpRequest(
                       LINK_UTK_REGISTRASI, "POST", parameterNya);
 
                // json response-nya
                Log.d("Coba Login", jsonObjectNya.toString());
 
                // json berhasil
                berhasil = jsonObjectNya.getInt(TAG_BERHASIL);
                if (berhasil == 1) {
                 Log.d("Proses Registrasi berhasil!", jsonObjectNya.toString());               
                 finish();
                 return jsonObjectNya.getString(TAG_PESAN);
                }else{
                 Log.d("Registrasi_nya Gagal!", jsonObjectNya.getString(TAG_PESAN));
                 return jsonObjectNya.getString(TAG_PESAN);
                 
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
   
  }
  /**
         * kalau sudah selesai tugas background_nya matikan 
         * progressbar_nya
         * **/
        protected void onPostExecute(String url_registrasi_nya) {
            // matikan progressBar-nya setelah selesai di gunakan
            progressBarNya.dismiss();
            if (url_registrasi_nya != null){
             Toast.makeText(ClassRegistrasi.this, url_registrasi_nya, Toast.LENGTH_LONG).show();
            }
 
        }
  
 }
   


}



Dan berikut adalah UI_nya yang saya beri nama tampilan_registrasi.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"
   >

    <ImageView
        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/lodokn_one" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/password"
        android:layout_centerVertical="true"
        android:text="NamaUser" />

    <EditText
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:ems="10" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/username"
        android:layout_below="@+id/username"
        android:text="PasswordNya" />

    <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="16dp"
        android:gravity="center"
        android:text="Android PHP Mysql"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/TextView01"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/password"
        android:layout_below="@+id/password"
        android:text="Register" />

</RelativeLayout>

Berikut adalah tampang dari halaman Registrasi setelah tekan tombol Registrasi
Registrasi

Dan berikut adalah kode untuk sisi server dengan nama registrasi.php
<?php

/* ©Vik Sintus Projects
agar bisa register... konek dulu yah
untuk konek kita perlu sertakan halaman konfigurasi koneksi
*/
require("/konfigurasi_nya.php");

//kalau data tak kosong... lanjut bro..
if (!empty($_POST)) {
    //tapi kalau datanya kosong ketika tekan tombol 'Register' maka
 //halaman harus berhenti eksekusi dengan menggunakan metode die(); dan
 //berikan peringatan kepada pengguna agar 
 //di isi username dan password_nya
    //Menggunakan metode die(); adalah tidak cukup, maka kita perlu
 //meninggalkan pesan kepada pengguna..apa yang terjadi? berikan jawaban_nya
 //Untuk mempertebal pertahanan keamanan nanti kita juga akan melakukan
 //validasi dari front_end di ClassRegistrasi.java
    if (empty($_POST['username_nya']) || empty($_POST['password_nya'])) {
        
        //berikut adalah data yang di buat untuk di
  //pakai oleh JSON untuk memberikan penjelasan kepada 
  //pengguna apa yang sedang terjadi agar dia tidak melongo
        $jawaban_nya["sukses"] = 0;
        $jawaban_nya["pesan"] = "Mohon di isi NamaUser dan PasswordNya.";
        
  //matikan halaman registrasi dan kirim pesan balik ke 
  //aplikasi android melalui JSON
        die(json_encode($jawaban_nya));
    }
    //priksa database apakah sudah ada username dengan nama yang sama
 //itu sebabnya saya pakai :username hanya sebagai variabel kosong
 //yang akan berubah saat eksekusi query-nya
    //cara ini cukup bagus untuk menangkal sql injection dari orang jahil
    $query        = " SELECT 1 FROM anggota WHERE username_nya = :username";
    //di update untuk melihat siapa pengguna sebenarnya
    $yang_di_query = array(
        ':username' => $_POST['username_nya']
    );
    
    //jalankan query-nya
    try {
        // bikin statement apa yang mau di query ke database. 
        $statement_nya   = $db->prepare($query);
        $result = $statement_nya->execute($yang_di_query);
    }
    catch (PDOException $ex) {
        
        //jadi developer yg baik yah, jelaskan kepada user apa yg terjadi:
        $jawaban_nya["sukses"] = 0;
        $jawaban_nya["pesan"] = "Databasenya salah. Di coba lagi yah!";
        die(json_encode($jawaban_nya));
    }
    
 // ambil semua data yang telah tercatat di database sehingga 
 // aplikasi bisa lihat apakah nama tsb sudah ada atau belum dan
 // kalau nama sudah ada maka berhenti eksekusi dengan membunuh 
 // aplikasinya dengan metode die();
    $row = $statement_nya->fetch();
    if ($row) {
        
        $jawaban_nya["sukses"] = 1;
        $jawaban_nya["pesan"] = "Maaf, nama tersebut suda ada di pakai";
        die(json_encode($jawaban_nya));
    }
    
 // tapi kalau nama usernya ok maka aplikasi masih terus hidup dan
 // di lanjutkan dengan masukan data yang di input oleh user
 // maka perlu membuat query baru pakai cara berikut yah biar
 // cukup susah buat orang nakal untuk buat sql injection
 
    $query = "INSERT INTO anggota ( username_nya, password_nya ) VALUES ( :username_kosong, :password_kosong ) ";
    
 // berikut adalah blanko kosong harus di update dengan data yang sebenarnya
    
    $yang_di_query = array(
        ':username_kosong' => $_POST['username_nya'],
        ':password_kosong' => $_POST['password_nya']
    );
    // jalankan query akhir untuk mendaftar user baru
    try {
        $statement_nya   = $db->prepare($query);
        $result = $statement_nya->execute($yang_di_query);
    }
    catch (PDOException $ex) {
        
        $jawaban_nya["sukses"] = 0;
        $jawaban_nya["pesan"] = "Username dan PassworNya tak benar. Coba lagi yah!";
        die(json_encode($jawaban_nya));
    }
    
    $jawaban_nya["sukses"] = 1;
    $jawaban_nya["pesan"] = "Registrasi Berhasil!";
    echo json_encode($jawaban_nya);
    
    //mau bawa kemana usernya? terserah anda sebagai developer.
    //header("Location: login_nya.php"); 
    //die("Redirecting ke halaman login_nya.php");
 //tapi disini saya hanya bilang bahwa registrasinya berhasil
 //dan kalau mau baca komentar silahkan login lah kawan
    
    
} else {
?>
 <h1>Register</h1> 
 <form action="registrasi.php" method="post"> 
     UsernameNya:<br /> 
     <input type="text" name="username" value="" /> 
     <br /><br /> 
     PasswordNya:<br /> 
     <input type="password" name="password" value="" /> 
     <br /><br /> 
     <input type="submit" value="Register User Baru" /> 
 </form>
 <?php
}

?>

Halaman in sudah terlalu panjang... oleh karena itu saya tulis halaman Tambah Komentar pada halaman baru .. silahkan kesan dengan klik disini yah

3 comments:

  1. kang kok error disininya
    setListAdpater (adapternya); dan
    ListView lv = getListView();

    ReplyDelete
  2. tidak bisakah saya download project nya?

    ReplyDelete
  3. kenapa saya munculnya begini ya? mohon solusinya :(

    {"sukses":0,"pesan":"Mohon di isi NamaUser dan PasswordNya."}

    ReplyDelete