Android, PHP dan MYSQL database bagian 3

Sebelum baca halaman bagian 3 ini, bacalah dahulu Android PHP dan MYSQL bagian 1 dan Android PHP dan MYSQL bagian 2
Bagian 1 dan bagian 2 meliputi halaman Login, halaman Baca Komentar dan halaman Registrasi
Dan sekarang sampailah kita pada halaman untuk Tambah Komentar, baik itu untuk Tambah Komentar di bagian server maupun tentang Tambah Komentar bagian klien-nya. Seperti saya katakan sebelumnya, bahwa bagian klien-nya di bangun pakai java dan bagian server di bangun pakai PHP.

Perhatikan kode di ClassBacaKomentar.java di tutorial bagian 2. Disana saya telah tulis sebuah metode untuk membuka class baru bernama tambahKomentar(); yang nampak sebagai berikut
public void tambahKomentar(View v) {
  Intent intentNya = new Intent(ClassBacaKomentar.this, ClassTambahKomentar.class);
  startActivity(intentNya);
 }

Itu berarti bahwa dari dalam ClassBacaKomentar ada ClassTambahKomentar, dan oleh karena ClassTambahKomentar tersimpan di sebuah tombol di dalam ClassBacaKomentar maka metode tambahKomentar(); di panggil dari UI(user interface) dalam hal ini metode-nya di panggil dari dalam baca_komentar.xml melalui metode android:onClick
Perhatikan kode berikut yang saya ambil dari dalam baca_komentar.xml. Perlu di ingat bahwa baca_komentar.xml adalah UI-nya ClassBacaKomentar

<button 
    android:background="@drawable/tombol_kirim" 
    android:id="@+id/tombol_kirim" 
    android:layout_gravity="right" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:onclick="tambahKomentar" 
    android:text="@string/tombol_kirim" />


Sangat jelas terlihat bahwa sepotong kode xml di atas adalah membicarakan tombol Kirim Komentar yang letaknya pada bagian bawah halaman Baca Komentar, sangat jelas bukan? Mau lihat lagi bentuknya? nihhh

Ok ketika tekan tombol Kirim Komentar tentunya yang di triger adalah halaman Tambah Komentar, Oleh karena itu mari kita bangun sebuah class yang bekerja untuk itu. Kita sebut saja nama class-nya  ClassTambahKomentar.java Berikut adalah isinya
package com.vik_sintus.projects.koneksiandroidmysql;
/**
 * Copyright ©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
 * http://belajar-android-indonesia.blogspot.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.content.SharedPreferences;
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 ClassTambahKomentar extends Activity implements OnClickListener{
 
 private EditText isiJudul, isiKomentar;
 private Button  kirimKomentar;
 
  // utk progress bar_nya
    private ProgressDialog progressBarNya;
 
    // utk tambah komentar perlu deklarasi class JSON
    ClassJSONParser jsonParserNya = new ClassJSONParser();
    
 // lokasi script utk tambah komentar: bernama tambah_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_TAMBAH_KOMENTAR =
  // "http://xxx.xxx.x.x.xxx/folderNya/tambah_komentar.php";

  // coba di Emulator:jangan lupa di ganti dengan 
        //alamat IP komputer anda sendiri
    private static final String LINK_TAMBAH_KOMENTAR = "http://192.168.1.109/mysql_android/tambah_komentar.php";
    
    // coba di server jauh(remote), server bayaran:
 // private static final String LINK_TAMBAH_KOMENTAR =
 // http://www.namaWeb.com/folderNya/tambah_komentar.php;

 // berikut adalah identitas dari JSON element yang
 // merespond dari halaman PHP (tambah_komentar.php)
    private static final String TAG_BERHASIL = "sukses";
    private static final String TAG_PESAN = "pesan";
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  
  super.onCreate(savedInstanceState);
  setContentView(R.layout.tambah_komentar);
  
  isiJudul = (EditText)findViewById(R.id.judulKomentar);
  isiKomentar = (EditText)findViewById(R.id.isiKomentar);
  
  kirimKomentar = (Button)findViewById(R.id.kirimKomentar);
  kirimKomentar.setOnClickListener(this);
  
 }

 @Override
 public void onClick(View v) {
    new TambahKomentar().execute();
 }
 
 
 class TambahKomentar extends AsyncTask<String, String, String> {
  
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBarNya = new ProgressDialog(ClassTambahKomentar.this);
            progressBarNya.setMessage("Sedang kirim Komentarnya...");
            progressBarNya.setIndeterminate(false);
            progressBarNya.setCancelable(true);
            progressBarNya.show();
        }
  
  @Override
  protected String doInBackground(String... args) {
   // priksa jika proses tambah komentar berhasil
    // lihat TAG_BERHASIL
            int komentar_sukses;
            String judulKomentar = isiJudul.getText().toString();
            String komentar = isiKomentar.getText().toString();
            
            //ini harus di ubah 
            SharedPreferences sharedPrefNya = PreferenceManager.getDefaultSharedPreferences(ClassTambahKomentar.this);
            String userNameNya = sharedPrefNya.getString("username_nya", "anon");
            
            try {
                // menyusun parameter-nya
                List<NameValuePair> parameterNya = new ArrayList<NameValuePair>();
                parameterNya.add(new BasicNameValuePair("username_nya", userNameNya));
                parameterNya.add(new BasicNameValuePair("judul_komentar", judulKomentar));
                parameterNya.add(new BasicNameValuePair("isi_komentar", komentar));
 
                Log.d("me-request!", "dimulai");
                
                //kirim data dari user ke halaman php script 
                JSONObject jsonObjectNya = jsonParserNya.membuatHttpRequest(
                  LINK_TAMBAH_KOMENTAR, "POST", parameterNya);
 
                // jawaban dari JSON
                Log.d("mencoba kirim komentar", jsonObjectNya.toString());
 
                // Bagian JSON jika komentarnya berhasil/tidak terkirim
                komentar_sukses = jsonObjectNya.getInt(TAG_BERHASIL);
                if (komentar_sukses == 1) {
                 Log.d("Komentar_nya telah di masukan!", jsonObjectNya.toString());    
                 finish();
                 return jsonObjectNya.getString(TAG_PESAN);
                }else{
                 Log.d("Kirim komentar_nya Gagal!", jsonObjectNya.getString(TAG_PESAN));
                 return jsonObjectNya.getString(TAG_PESAN);
                 
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
   
  }
  
        protected void onPostExecute(String url_link_nya) {
            // matikan progressBarnya dengan metode dismiss();
            progressBarNya.dismiss();
            if (url_link_nya != null){
             Toast.makeText(ClassTambahKomentar.this, url_link_nya, Toast.LENGTH_LONG).show();
            }
 
        }
  
 }
   

}

Agar ClassTambahKomentar.java dapat di lihat oleh manusia maka di perlukan tampang UI_nya dengan nama tambah_komentar.xml berikut adalah isinya:
<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/lodok" />

    <EditText
        android:id="@+id/isiKomentar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/kirimKomentar"
        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/textView2"
        android:layout_below="@+id/TextView01"
        android:ems="10"
         />

    <EditText
        android:id="@+id/judulKomentar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/imageView1"
        android:text="isi Judul" />

    <Button
        android:id="@+id/kirimKomentar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:text="Kirim Komentar" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/judulKomentar"
        android:layout_marginTop="14dp"
        android:text="isi Komentar" />

    <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="Koneksi Android MYSQL"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textStyle="bold" />

</RelativeLayout>

Berikut adalah tampang dari halaman Tambah Komentar pada layar HP anda

Bandingkan kode XML-nya dengan tampangnya, disana dengan jelas terlihat bahwa UI android tidak sesulit yang di bayangkan.
Kode untuk halaman Tambah Komentar bagian klien sudah selesai...
Berikut adalah kode untuk halaman Tambah Komentar bagian server yang saya beri nama tambah_komentar.php
<?php
/**
 * Copyright ©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
 * http://belajar-android-indonesia.blogspot.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.
 * 
 * 
 */
//perlu data dari konfigurasi_nya.php untuk bisa koneksi
require("/konfigurasi_nya.php");

if (!empty($_POST)) {
     
  if (empty($_POST['judul_komentar']) || empty($_POST['isi_komentar'])) {
        
        
        // data yang di pakai oleh JSON untuk respond ke android 
        $jawaban_dari_server["sukses"] = 0;
        $jawaban_dari_server["pesan"] = "Mohon di isi Judul dan komentarNya.";
        
        // kalau judul dan komentar belum di isi maka
  // hentikan aplikasi-nya dengan metode die(); sambil mengeluarkan 
  // pesan tsb diatas ke android
        die(json_encode($jawaban_dari_server));
    }

 //query yang di perlukan utk isi komentar
 $query = "INSERT INTO tempat_komentar ( username_nya, judul_komentar, isi_komentar ) VALUES ( :user, :judul, :komentar ) ";

    //query-nya perlu di update karena VALUES belum ada di database,
 // :user, :judul, :komentar hanya di buat2 sebagai
 //  place holder persiapkan tempat kosong yg 
 // akan di tempatkan data
    $query_parameter_nya = array(
        ':user' => $_POST['username_nya'],
        ':judul' => $_POST['judul_komentar'],
  ':komentar' => $_POST['isi_komentar']
    );
  
 //query_nya di eksekusi
    try {
        $statement_nya   = $db->prepare($query);
        $result = $statement_nya->execute($query_parameter_nya);
    }
    catch (PDOException $ex) {
        // boleh saja pakai metode. 
        die("Gagal menjalankan query: " . $ex->getMessage());
        
        //atau lebih ringan pakai sbb::
        $jawaban_dari_server["sukses"] = 0;
        $jawaban_dari_server["pesan"] = "ada kesalahan database. Tak bisa kirim komentarnya!";
        die(json_encode($jawaban_dari_server));
    }

    $jawaban_dari_server["sukses"] = 1;
    $jawaban_dari_server["pesan"] = "Komentarnya berhasil di kirim!";
    echo json_encode($jawaban_dari_server);
   
} else {
?>
  <h1>Isi Komentar</h1> 
  <form action="tambah_komentar.php" method="post"> 
      Nama User:<br /> 
      <input type="text" name="username_nya" placeholder="username" /> 
      <br /><br /> 
      Judul:<br /> 
      <input type="text" name="judul_komentar" placeholder="kirim_judul" /> 
      <br /><br />
   Komentar:<br /> 
      <input type="text" name="isi_komentar" placeholder="kirim_komentar" /> 
      <br /><br />
      <input type="submit" value="Tambah Komentar" /> 
  </form> 
 <?php
}

?> 

Kode untuk halaman Tambah Komentar sudah selesai.... berikutnya akan saya bangun sebuah class JSON(JavaScript Object Notation) yang akan di siarkan ke semua halaman agar aplikasinya menjadi responsive.
Semua kode yang saya telah tulis telah ada elemen JSON_nya..... silahkan baca tentang class JSON_nya dengan klik disini

7 comments:

  1. terimakasih banyak om atas tutorialnya. sangat membantu :D

    ReplyDelete
    Replies
    1. sama2 Imsy.... tolong di kembangkan plis

      Delete
    2. mas source kode string.xml dan style.xml tolong d share mas

      Delete
  2. kl mau buat bukan view comment tapi lihat data user gmn om sessionnya
    thx

    ReplyDelete
  3. lihat di back-end nya Nung
    lihat di servernya
    biasanya kebanyakan server menggunakan phpmyadmin
    disana kita bisa menghapus user atau ganti paswordnya dll

    ReplyDelete