Kamis, 12 Juni 2014

Panduan Belajar PHP

Bermula dari pertanyaan seseorang mengenai bagaimana belajar PHP, maka saya tuliskan beberapa langkah dibawah ini sebagai panduan untuk mempelajari PHP. Semoga bermanfaat.

Catatan: database yang digunakan adalah MySQL.
  1. PHP sebagai server side scripting secara umum digunakan untuk membuat situs dinamis atau aplikasi berbasis web. Jadi langkah awal untuk mempelajari PHP adalah menguasai HTML terlebih dahulu. Tanpa penguasaan HTML dasar, rasanya PHP kurang bermanfaat untuk dipelajari.Links untuk belajar HTML
  2. PHP adalah bahasa pemrograman, artinya untuk menguasai PHP haruslah mengerti algoritma. Minimal yang harus diketahui untuk hal ini adalah apa dan bagaimana menggunakan variable, kondisi atau pencabangan, perulangan dan sub-rutin untuk menyelesaikan suatu masalah. Saat ini sudah banyak buku yang membahas mengenai algoritma dan pemrograman, silakan cari dan pilih sendiri.
  3. Install ApachePHP dan MySQL pada PC Anda. Saya menyarankan untuk tidak menggunakan installer yang instant (seperti PHPTriadWampserver,e-novative dsb), tetapi lebih baik belajar dan mencoba menginstallnya satu demi satu diawali dari Apache, lalu PHP dan MySQL.Link panduan menginstal Apache, PHP dan MySQL
  4. Setelah langkah 1 & 2 sudah dipelajari dan sudah dimengerti (meskipun hanya sedikit) dan langkah 3 sudah bisa Anda lalui. Langkah berikutnya adalah mempelajari sintaks-sintaks dari PHP dan Anda wajib memiliki atau mendownload file Help PHP.Link untuk belajar PHP
  5. Coba untuk membuat form isian sederhana menggunakan PHP beserta HTML yang telah dikuasai. Lalu, tambahkan fitur validasi untuk beberapa atau semua data sehingga tidak boleh kosong saat submit ditekan.Links Tutorial membuat form
  6. Pelajari juga teknik session dan atau cookies. Ini penting dan sangat sering digunakan dalam pembuatan situs dinamis atau aplikasi berbasi web. Pada langkah ini, minimal Anda bisa membuat halaman login dengan user dan password yang masih ditulis secara hardcode dalam script.Links tutorial session dan cookies
  7. Langkah berikutnya adalah mempelajar seluk beluk mengenai database seperti apa itu database, table, record, field dsb. Download dan pergunakanphpMyAdmin untuk mencoba membuat database, table dan field-fieldnya.
  8. Pelajari SQL khusus untuk empat perintah dasar yaitu SELECT, INSERT, UPDATE dan DELETE. Perintah SELECT adalah perintah SQL yang paling kompleks karena meliputi klausa JOIN (INNER/OUTER), WHERE, GROUP BY, HAVING, ORDER BY dan LIMIT (limit adalah klausa yang diperkenalkan MySQL).Link tutorial SQL
  9. Setelah perintah SQL bisa Anda mengerti (syukur-syukur menguasai), maka pelajari bagaimana PHP berinteraksi dengan MySQL. Pada langkah ini, Anda diharuskan menguasai fungsi-fungsi wajib sehubungan dengan MySQL, yaitu mysql_connect_db, mysql_select_db, mysql_query dan mysql_fetch_object / mysql_fetch_array.Download Help MySQL.
  10. Sampai disini, coba untuk membuat script sederhana untuk input data menggunakan form. Data yang diinput melalui form disimpan dalam database (INSERT). Lalu buat juga script untuk menampilkan data-data yang telah tersimpan dalam database (SELECT). Selanjutnya, buat fasilitas untuk mmenghapus (DELETE) dan mengedit data (UPDATE).
  11. Coba membuat halaman login dimana user dan passwordnya dibaca dari database
  12. Coba gabungkan karya nomor 10 dan 11 sehingga hanya mereka yang login saja yang bisa menghapus/mengedit data.
  13. Sampai disini, Anda bisa dikatakan sudah sampai pada tahap beginner. Selanjutnya banyak-banyaklah bereksperimen dengan membuat proyek-proyek kecil minimal untuk kesenangan Anda sendiri. Saat Anda mengerjakan proyek, disanalah pelajaran demi pelajaran bisa Anda dapat dari berbagai masalah yang muncul.
  14. Selanjutnya, Anda harus mulai mempelajari masalah security seperti masalah Code/SQL Injectionsession hijackingsession fixation, teknik enkripsi dsb.
  15. Sempatkan untuk belajar Javascript saat Anda merasa kemampuan PHP yang dimiliki sudah lumayan. Kelemahan dari script PHP adalah tidak dimungkinkannya interaksi pengguna secara on the fly. Nah, kekurangannya inilah yang di “tambal” menggunakan Javascript. Syukur-syukur Anda bisa menguasai AJAX.Link tutorial Javascript
  16. Sempatkan pula untuk mempelajari CSS. Ini penting untuk membuat tampilan/interface situs atau web-based application secara lebih baik.Link tutorial CSS:
  17. Terakhir. Karena PHP lebih banyak hidup di OS Linux, pelajari juga linux barang sedikit. Syukur-syukur kalo Anda ternyata sejak awal belajar di linux
TIPS:
  • Jangan terlalu memaksakan untuk menghapalkan fungsi, sintaks dari PHP atau MySQL. Manfaatkan file HELP dalam praktek dan latihan. Semakin Anda sering praktek dan melatih diri, maka fungsi dan sintaks yang sering dipakai akan bisa Anda hapal dengan sendirinya.
  • Jangan terlalu cepat untuk mengambil keputusan untuk bertanya terhadap masalah atau kesulitan yang timbul. Bertanyalah setelah Anda mencoba terlebih dahulu.
  • Rajin-rajin mengikuti milis atau forum dan selalu ingat, diatas langit ada langit

Dikirim: August 26th, 2006 | Oleh:  | Kategori: PHP
sumber: http://riyogarta.com/2006/08/26/panduan-belajar-php/

Rabu, 23 April 2014

J2SE Encrypt MD5 with GUI


/** 9022fb1f3cf3e595b6ef6deb22d5528e **/

/**
 * Wednesday, 23 April 2014 09:36:25 PM
 * Java Encrypt MD5 
 * Dengan File Format .txt
 *
 **/

/**
 * Studi Kasus:
 *
 * Terdapat sebuah Universitas yang membuat sistem dengan model enkripsi data nilai Mahasiswa.
 * Kemudian nilai asli diberikan kepada Mahasiswa tersebut jika terjadi perubahan
 * pada Nilai yang dilakukan oleh Mahasiswa dapat dilakukan pengujian enkripsi dengan
 * melakukan perbandingan enkripsi yang sebelumnya sudah disimpan pada database.
 *
 **/

/**
 * Logika:
 *
 * Pilih File (Format: .txt) -> Ambil Isi File ->
 * Pindahkan ke Variabel -> Fungsi MD5 -> Hasil Output
 *
 **/

/**
 * Link:
 * 
 * http://stackoverflow.com/questions/21870607/java-test-for-md5-using-a-file
 * http://www.asjava.com/core-java/java-md5-example/
 * 
 **/

/**
 * Hasil Program:
 * 
 * File: JavaMD5Doc.txt
 * MD5: 2211309a572e1764490356784565f4dd
 * Isi File: Firmansyah Maulana
 * 
 * File: JavaMD5Doc.txt
 * MD5: 9ba13c41ceb4d3f211df4da7f106663b
 * Isi File: Firmansyah Maulana 2
 * 
 * File: JavaMD5Doc2.txt
 * MD5: 2211309a572e1764490356784565f4dd 
 * Isi File: Firmansyah Maulana
 * 
 * File: JavaMD5Doc2.txt
 * MD5: 9ba13c41ceb4d3f211df4da7f106663b 
 * Isi File: Firmansyah Maulana 2
 * 
 **/

/** 9022fb1f3cf3e595b6ef6deb22d5528e **/

/**
 * Tampilan Program:
 * 
 **/


Gambar 1 Tampilan Awal Aplikasi.

Gambar 2 Ambil File Dari Direktori.

Gambar 3 Tampil Isi File.


Gambar 4 Hasil Encrypt MD5.


/**
 * Code Program:
 * 
 **/

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javamd5example2;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 *
 * @author firmansyahMYE
 * firmansyahmye@gmail.com
 * 
 */
public class JavaMD5Example2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new JavaMD5Example2();
    }
    
    public JavaMD5Example2() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("J2SE Encrypt MD5");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = 0;
                gbc.weighty = 1;
                gbc.weightx = 1;
                gbc.fill = GridBagConstraints.BOTH;

                final FilePane sourcePane = new FilePane(true);
                final FilePane encryptPane = new FilePane(false);

                frame.add(sourcePane, gbc);
                gbc.gridx = 2;
                frame.add(encryptPane, gbc);

                JButton encrypt = new JButton("Encrypt >>");
                JPanel panel = new JPanel(new GridBagLayout());
                panel.add(encrypt);

                encrypt.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        File source = sourcePane.getFile();
                        try (BufferedReader br = new BufferedReader(new FileReader(source))) {
                            char[] buffer = new char[1024];
                            StringBuilder sb = new StringBuilder(1024);
                            int bytesRead = -1;
                            while ((bytesRead = br.read(buffer)) != -1) {
                                sb.append(buffer, 0, bytesRead);
                            }
                            String encrypted = encryptionMD5(sb.toString());

                            File enrypt = new File(source.getPath() + ".enrypted");
                            try (BufferedWriter bw = new BufferedWriter(new FileWriter(enrypt))) {
                                bw.write(encrypted);
                            } catch (Exception exp) {
                                exp.printStackTrace();
                            }

                            encryptPane.setFile(enrypt);

                        } catch (Exception exp) {
                            exp.printStackTrace();
                        }
                    }
                });

                gbc.gridx = 1;
                gbc.weighty = 1;
                gbc.weightx = 0;
                gbc.fill = GridBagConstraints.VERTICAL;
                frame.add(panel, gbc);

                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
    
    public static String encryptionMD5(String token) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(token.getBytes());
            BigInteger number = new BigInteger(1, messageDigest);
            String hashtext = number.toString(16);
            // Now we need to zero pad it if you actually want the full 32 chars.
            while (hashtext.length() < 32) {
                hashtext = "0" + hashtext;
            }
            return hashtext;
        }
        catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
    
    public class FilePane extends JPanel {

        private JTextField field;
        private JButton browse;
        private JTextArea content;

        private File file;

        public FilePane(boolean canOpen) {
            setLayout(new BorderLayout());

            field = new JTextField();
            field.setEditable(false);

            content = new JTextArea(20, 20);
            content.setEditable(false);

            add(new JScrollPane(content));

            JPanel header = new JPanel(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.weightx = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            header.add(field, gbc);
            gbc.gridx = 1;
            gbc.weightx = 0;
            gbc.fill = GridBagConstraints.NONE;
            if (canOpen) {
                browse = new JButton("...");
                browse.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JFileChooser chooser = new JFileChooser();
                        chooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
                        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
                        switch (chooser.showOpenDialog(FilePane.this)) {
                            case JFileChooser.APPROVE_OPTION:
                                setFile(chooser.getSelectedFile());
                                break;
                        }
                    }
                });
                header.add(browse, gbc);
            }

            add(header, BorderLayout.NORTH);

        }

        public File getFile() {
            return file;
        }

        public void setFile(File f) {
            file = f;
            field.setText(file.getPath());
            if (file != null) {
                try (Reader r = new FileReader(file)) {
                    content.read(r, file);
                } catch (Exception exp) {
                }
            } else {
                content.setText(null);
            }
            content.setCaretPosition(0);
        }

    }
}


/** 9022fb1f3cf3e595b6ef6deb22d5528e **/