Tutorial PHP Dan MySQL
Tutorial PHP Dan MySQL
com
PHP sering dijodohkan dengan MySQL untuk membangun aplikasi web. MySQL berperan
sebagai tempat menyimpan data (basis data) sedangkan PHP adalah program yang mengelola
data tersebut.
Sebenarnya PHP tidak hanya bisa dijodohkan dengan MySQL saja. PHP juga bisa dijodohkan
dengan SQLite, PostgreSQL, MongoDB, Ms. Access, dsb.
Pada kesempatan ini, kita akan belajar menggunakan PHP dan MySQL untuk membuat aplikasi
sederhana.
petanikode.com
Login dan register adalah fitur yang banyak dibutuhkan dalam pengembangan aplikasi web.
Biasanya saat membuat halaman admin. Kita pasti akan membuat login dan register.
Tutorial ini menggunakan PHP Native dan PDO sebagai koneksi ke database;
Tutorial ini menggunakan Framework Bootstrap 4 untuk tampilan;
Tutorial ini hanya akan fokus membahas fitur login dan register saja, untuk class-class
bootstrap saya tidak akan jelaskan. Saya anggap, pembaca sudah paham dengan
Bootstrap.
1. Bootstrap 4;
2. Beberapa gambar.
# buka direktori ini dengan VS Code, pastikan kamu sudah menginstall VS Code
code .
Setelah itu, silahkan ekstrak dan copy semua bahan yang di-download tadi ke sana.
Beres…
Menyiapkan Database
Sebelum kita mulai menulis kode, siapkan dulu database-nya.
Setelah itu, buatlah sebuah tabel baru dengan nama users dan buat kolomnya seperti ini:
Kode SQL-nya:
--
-- Indexes for table `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `username` (`username`);
--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
<?php
$db_host = "localhost";
$db_user = "root";
$db_pass = "kopi";
$db_name = "pesbuk";
try {
//create PDO connection
$db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
} catch(PDOException $e) {
//show error
die("Terjadi masalah: " . $e->getMessage());
}
$db_host = "localhost";
$db_user = "root";
$db_pass = "kopi";
$db_name = "pesbuk";
Setelah itu, kita membuat sebuah objek baru bernama $db, objek ini kita perlukan untuk
melakukan query ke database.
Saat kita membuat objek PDO, kita gunakan blok Try/Catch untuk menangai error.
Coba kita tes.
Silahkan buka terminal di VS Code (Tekan Ctrl+`), lalu jalankan server PHP di sana dengan
perintah:
Jika tampilannya kosong, maka koneksi berhasil dan tidak ada error.
Tapi kalau ada error, biasanya akan tampil seperti ini.
Halaman ini bertugas sebagai landing page, isinya cuma html saja.
Silahkan buka file index.php lalu isi kodenya seperti ini:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Pesbuk</title>
<section>
<div class="container">
<div class="row">
<div class="col-md-12">
<img class="img img-responsive" src="img/connect.png" />
</div>
</div>
</div>
</section>
</body>
</html>
Tidak apa-apa, ini kan hanya untuk belajar saja. Nanti kalau sudah buat web sungguhan, tidak
boleh menggunakan gambar orang lain tanpa izin.
Alur kerjanya:
1. Input data dari form;
2. Filter data yang diinputkan;
3. Simpan ke database;
4. Kalau berhasil, alihkan ke halaman login.
<?php
require_once("config.php");
if(isset($_POST['register'])){
// menyiapkan query
$sql = "INSERT INTO users (name, username, email, password)
VALUES (:name, :username, :email, :password)";
$stmt = $db->prepare($sql);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Register Pesbuk</title>
<div class="form-group">
<label for="name">Nama Lengkap</label>
<input class="form-control" type="text" name="name"
placeholder="Nama kamu" />
</div>
<div class="form-group">
<label for="username">Username</label>
<input class="form-control" type="text" name="username"
placeholder="Username" />
</div>
<div class="form-group">
<label for="email">Email</label>
<input class="form-control" type="email" name="email"
placeholder="Alamat Email" />
</div>
<div class="form-group">
<label for="password">Password</label>
<input class="form-control" type="password" name="password"
placeholder="Password" />
</div>
</form>
</div>
<div class="col-md-6">
<img class="img img-responsive" src="img/connect.png" />
</div>
</div>
</div>
</body>
</html>
Penjelasan:
Pertama kita membutuhkan objek $db untuk melakukan query, maka kita impor config.php
dengan fungsi require_once().
require_once("config.php");
Setelah itu, baru kita buat kode untuk menyimpan data ke database.
Sebelumnya, kita cek dulu. Apakah tombol Register sudah ditekan atau belum:
if(isset($_POST['register'])){
// ...
}
?>
Selanjutnya melakukan filter dan enkripsi password terhadap data yang diinputkan:
Jangan percaya pada apa yang diinputkan user, bisa saja mereka menginputkan username dan
name seperti ini:
Ini salah satu bentuk serangan XSS.
Karena itu, kita harus memfilternya agar skrip yang diinputkan user diubah menjadi karakter
yang aman.
Lalu kenapa password harus dienkripsi?
Tujuannya untuk keamanan. Nanti kalau database dicuri, si pencuri tidak akan tahu password
dari akun-akun yang sudah terdaftar.
// enkripsi password
$password = password_hash($_POST["password"], PASSWORD_DEFAULT);
Tunggu dulu…
Kalau kita filter nanti user tidak bisa membuat password dengan simbol-simbol seperti: &, <, >, %,
dll.
Setelah data di-filter, selanjutnya kita buat query dengan objek $db.
:name, :username, :email, :password adalah placeholder. Tujuannya agar terhindar dari
serangan SQL Injection.
Setelah itu, kita bind parameter atau mengisi placeholder dengan nilai yang kita dapatkan dari
hasil filter.
// bind parameter ke query
$params = array(
":name" => $name,
":username" => $username,
":password" => $password,
":email" => $email
);
Atribut action="" artinya data akan dikirim ke file itu sendiri, yaitu: register.php.
Mudah bukan?
<?php
require_once("config.php");
if(isset($_POST['login'])){
$stmt->execute($params);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Login Pesbuk</title>
<h4>Masuk ke Pesbuk</h4>
<p>Belum punya akun? <a href="register.php">Daftar di sini</a></p>
<div class="form-group">
<label for="username">Username</label>
<input class="form-control" type="text" name="username"
placeholder="Username atau email" />
</div>
<div class="form-group">
<label for="password">Password</label>
<input class="form-control" type="password" name="password"
placeholder="Password" />
</div>
</form>
</div>
<div class="col-md-6">
<!-- isi dengan sesuatu di sini -->
</div>
</div>
</div>
</body>
</html>
Penjelasan:
require_once("config.php");
Setelah itu, kita cek apakah tombol login sudah ditekan atau belum:
if(isset($_POST['login'])){
// ...
}
Pada query, kita menggunakan logika OR agar user bisa login dengan email dan username .
$user = $stmt->fetch(PDO::FETCH_ASSOC);
Fungsi fetch() akan menghasilkan null kalau tidak ada data, maka kita bisa membuat kondisi
seperti ini:
Selanjutnya, kita lakukan verifikasi password yang diinputkan oleh user dengan password yang
ada di database.
if(password_verify($password, $user["password"])){
//...
}
Fungsi password_verify() akan menghasilkan nilai true kalau password yang diinputkan
sama dengan yang di database.
// buat Session
session_start();
$_SESSION["user"] = $user;
// login sukses, alihkan ke halaman timeline
header("Location: timeline.php");
Variabel $_SESSION adalah variabel super global yang bisa dibaca dari semua file PHP, karena
diingat oleh server.
Untuk dapat menggunakan variabel $_SESSION kita harus memanggil fungsi session_start()
terlebih dahulu.
Ini yang akan kita manfaatkan untuk mengecek apakah user sudah login atau belum.
<?php
session_start();
if(!isset($_SESSION["user"])) header("Location: login.php");
Penjelasan:
Seperti penjelasan sebelumnya, saat kita ingin menggunakan variabel $_SESSION, maka kita
harus memanggil fungsi session_start() terlebih dahulu.
Artinya, jika variabel $_SESSION["user"] tidak memiliki nilai, maka user belum login… paksa
dia untuk login 😄.
Tanda seru (!) di depan isset() artinya tidak. Berarti tidak ter-set (variabel belum dibuat).
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Pesbuk Timeline</title>
<div class="card">
<div class="card-body text-center">
<p><a href="logout.php">Logout</a></p>
</div>
</div>
</div>
<div class="col-md-8">
</div>
</div>
</div>
</body>
</html>
Halaman timeline.php hanya boleh dibuka oleh user yang sudah login saja. Maka kita harus
mengeceknya.
Bagaimana caranya?
Apa bila user-nya belum login, maka dia akan dialihkan ke halaman login. Sesuai kondisi logika
yang kita buat pada file auth.php.
Karena kita sudah mengimpor file auth.php, kita bisa menggunakan variabel $_SESSION di sini.
Mari kita coba ambil nilai yang disimpan di sana:
Maka hasilnya:
Kereenn… 😍
<?php
session_start();
session_unset("user");
header("Location: index.php");
Tungas dari file logout.php adalah menghancurkan atau menghapus session yang sudah dibuat.
Pertama-tama, kita harus memanggil fungsi session_start(), karena kita akan menggunakan
session di sini.
Setelah itu, kita hancurkan atau hapus variabel $_SESSION['user'] dengan fungsi
session_unset("user").
header("Location: index.php");
Apa Selanjutnya?
Kita sudah berhasil membuat fitur login register. Selanjutnya tinggal dikembangkan saja.
Edit Profile;
Update Status;
Cari Teman;
Follow dan Unfollow;
Realtime Chat;
dan lain-lain.
Selamat coding…
Bacaan berikutnya:
petanikode.com
Memahami Skrip PHP untuk Upload File
Ahmad Muhardian
3-4 minutes
Upload file merupakan kegiatan pengiriman file dari client (pengunjung web) ke server.
Biar lebih gampang, mari kita bahas dengan coding
<!DOCTYPE html>
<html>
<head>
<title>Upload File</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Pilih file: <input type="file" name="berkas" />
<input type="submit" name="upload" value="upload" />
</form>
</body>
</html>
Fokus pada elemen <form>. Perhatikan di sana ada beberapa hal yang harus dipahami:
atribut action="upload.php" artinya kita akan mengirim filenya ke upload.php;
atribut enctype atribut ini wajib disertakan untuk form upload;
atribut name akan menjadi nama indeks di dalam PHP.
<?php
echo "<pre>";
print_r($_FILES);
echo "</pre>";
?>
Artinya: file yang kita upload akan ditampung dalam variabel $_FILES. Variabel ini merupakan
sebuah array yang menampung data tentang file-nya.
Tugas kita berikutnya adalah memindahkan file ini ke dalam aplikasi kita.
Bagaimana caranya?
Untuk memindahkan file ini ke dalam direktori aplikasi kita, maka kita membutuhkan sebuah
fungsi bernama: move_uploaded_file().
<?php
// pindahkan file
$terupload = move_uploaded_file($namaSementara, $dirUpload.$namaFile);
if ($terupload) {
echo "Upload berhasil!<br/>";
echo "Link: <a href='".$dirUpload.$namaFile."'>".$namaFile."</a>";
} else {
echo "Upload Gagal!";
}
?>
Variabel $terupload akan bernilai true apabila file berhasil dipindahkan dan akan bernilai
false apabila gagal.
Sebelum mencoba, silahkan buat dulu direktori bernama terupload di dalam direktori project-
nya.
Sekarang mari kita coba upload file.
Berhasil 🎉…
Apa Selanjutnya?
Ruang lingkup pembahasan kita cuma sampai memahami konsep upload file di PHP saja. Untuk
langkah berikutnya, silahkan lakukan pengembangan sendiri.
Seperti:
Selamat belajar.
petanikode.com
Membuat CRUD (Create, Read, Update, Delete) dalam satu file PHP.
Biasanya, membuat aplikasi CRUD dilakukan dengan membuat file terpisah. Masing-masing file
mewakili CRUD.
Misalkan file create.php untuk menambahkan data, read.php untuk menampikan data,
update.php untuk mengubah data, dan delete.php untuk menghapus data.
Pada kesempatan ini, saya ingin membagikan sebuah kode CRUD yang ditulis dalam satu file
PHP. Kode ini, saya buat dengan koneksi database menggunakan API mysqli.
<!DOCTYPE html>
<html>
<head>
<title>CRUD Petani Kode</title>
<link rel="icon" href="http://www.petanikode.com/favicon.ico" />
</head>
<body>
<?php
// --- koneksi ke database
$koneksi = mysqli_connect("localhost","root","kopi","pertanian") or
die(mysqli_error());
// --- Fngsi tambah data (Create)
function tambah($koneksi){
if (isset($_POST['btn_simpan'])){
$id = time();
$nm_tanaman = $_POST['nm_tanaman'];
$hasil = $_POST['hasil'];
$lama = $_POST['lama'];
$tgl_panen = $_POST['tgl_panen'];
echo "<fieldset>";
echo "<legend><h2>Data Panen</h2></legend>";
while($data = mysqli_fetch_array($query)){
?>
<tr>
<td><?php echo $data['id']; ?></td>
<td><?php echo $data['nama_tanaman']; ?></td>
<td><?php echo $data['hasil_panen']; ?> Kg</td>
<td><?php echo $data['lama_tanam']; ?> bulan</td>
<td><?php echo $data['tanggal_panen']; ?></td>
<td>
<a href="index.php?aksi=update&id=<?php echo
$data['id']; ?>&nama=<?php echo $data['nama_tanaman']; ?>&hasil=<?php echo
$data['hasil_panen']; ?>&lama=<?php echo $data['lama_tanam']; ?>&tanggal=<?php
echo $data['tanggal_panen']; ?>">Ubah</a> |
<a href="index.php?aksi=delete&id=<?php echo
$data['id']; ?>">Hapus</a>
</td>
</tr>
<?php
}
echo "</table>";
echo "</fieldset>";
}
// --- Tutup Fungsi Baca Data (Read)
// --- Fungsi Ubah Data (Update)
function ubah($koneksi){
// ubah data
if(isset($_POST['btn_ubah'])){
$id = $_POST['id'];
$nm_tanaman = $_POST['nm_tanaman'];
$hasil = $_POST['hasil'];
$lama = $_POST['lama'];
$tgl_panen = $_POST['tgl_panen'];
</fieldset>
</form>
<?php
}
}
// --- Tutup Fungsi Update
// --- Fungsi Delete
function hapus($koneksi){
if(isset($_GET['id']) && isset($_GET['aksi'])){
$id = $_GET['id'];
$sql_hapus = "DELETE FROM tabel_panen WHERE id=" . $id;
$hapus = mysqli_query($koneksi, $sql_hapus);
if($hapus){
if($_GET['aksi'] == 'delete'){
header('location: index.php');
}
}
}
}
// --- Tutup Fungsi Hapus
// ===================================================================
// --- Program Utama
if (isset($_GET['aksi'])){
switch($_GET['aksi']){
case "create":
echo '<a href="index.php"> « Home</a>';
tambah($koneksi);
break;
case "read":
tampil_data($koneksi);
break;
case "update":
ubah($koneksi);
tampil_data($koneksi);
break;
case "delete":
hapus($koneksi);
break;
default:
echo "<h3>Aksi <i>".$_GET['aksi']."</i> tidaka ada!</h3>";
tambah($koneksi);
tampil_data($koneksi);
}
} else {
tambah($koneksi);
tampil_data($koneksi);
}
?>
</body>
</html>
Tampilan atau hasil output kode masih dalam bentuk polos. Saya tidak menggunakan CSS
maupun Javascript. Hanya terdapat PHP dan HTML saja.
Demo:
Tampilannya memang masih plain (polos).
petanikode.com
6 Fungsi Enkripsi di PHP untuk
Mengamankan Data
Ahmad Muhardian
8-10 minutes
Data adalah harta karun yang paling berharga dalam sebuah sistem. Apabila itu dicuri…
Enkripsi adalah teknik untuk mengamankan data-data tersebut agar isinya tidak diketahui orang
lain.
Enkripsi akan menjamin data-data tetap aman meskipun berada di tangan orang lain, karena
mereka tidak tahu isi aslinya.
Pada kesempatan ini, saya akan membahas beberapa fungsi enkripsi yang sudah disediakan oleh
PHP, diantaranya: password_hash(), crypt(), md5(), hash(), sha1(), dan base64_encode().
Masing-masing fungsi memiliki algoritmanya tersendiri, ada yang kuat ada juga yang lemah.
Mari kita bahas satu-per-satu…
1. Fungsi password_hash()
Fungsi ini akan menghasilkan sebuah kode hash baru dengan metode one-way hashing. one-way
hasing artinya, hasil enkripsinya tidak bisa dikembalikan seperti semula (decrypt/decode).
Contoh:
Hasilnya:
$2y$10$7PZGQcOAK6ZJXCAO3UFRC.hpv8hjKsQhy5Y7xBOhLNoFNTuxF3lr2
Fungsi ini sangat disarankan untuk mengenkripsi password, karena sulit didekripsi atau di-crack.
Sebelum mengenal fungsi ini, saya biasanya menggunakan fungsi md5(). Namun, fungsi md5()
sangat mudah di-crack.
Contoh penggunaan:
<?php
$username = $_POST['username'];
// enkripsi dulu...
$password = password_hash($_POST['username'], PASSWORD_DEFAULT);
// query simpan
mysqli_query("INSERT INTO user (username, password) VALUE
('$username','$password')");
?>
Fungsi passowrd_hash() ini tidak bisa bekerja sendirian, dia memiliki teman bernama
password_verify().
Contoh:
<?php
// ambil data dari form login
$username = $_POST['username']; //<-- ini belum aman dari sql injection :D
Tips: bila ingin menyimpan hasil dari fungsi password_hash() di database, pastikan bertipe
VARCHAR dengan panjang 255 karakter.
Contoh lengkapnya bisa dilihat di: Tutorial PHP dan MySQL: Membuat Login Register
2. Fungsi crypt()
Fungsi ini menghasilkan kode hash dengan menggunakan algoritma DES, Blowfish, dan MD5.
Contoh:
Hasilnya:
Bila diperhatikan, susuan karakter yang dihasilkan mirip seperti karakter yang digunakan pada
alamat URL video youtube.
Mungkin saja youtube juga menggunakan algoritma yang sama dengan fungsi ini.
Garam
Fungsi ini juga dapat digunakan untuk mengamankan password, karena sulit di-decode.
3. Fungsi md5()
Fungsi ini akan menghasilkan kode hash sepanjang 32 karakter.
Hasilnya:
37ebda33c177743169404948552319df
Contoh:
Hasilnya:
Akan tetapi, kalau kita perhatikan kecepatan komputer zaman sekarang… Sangat mungkin untuk
melakukan decrypt.
4. Fungsi hash()
Fungsi ini akan menciptkan sebuah kode hash dengan algoritma tertentu.
Contoh:
Hasilnya:
37ebda33c177743169404948552319df
Pada contoh di atas, parameter "md5" adalah nama algortima yang akan digunakan untuk
mengenkripsi. Parameter "petanikode" adalah teks yang akan dienkripsi.
Bila ingin mengetahui nama-nama algoritma yang bisa digunakan, silahkan coba eksekusi kode
ini:
<?php
$data = "hello";
Hasilnya:
md2 32 a9046c73e00331af68917d3804f70655
md4 32 866437cb7a794bce2b727acc0362ee27
md5 32 5d41402abc4b2a76b9719d911017c592
sha1 40 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
sha256 64 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e730
sha384 96 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553
sha512 128 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2d
ripemd128 32 789d569f08ed7055e94b4289a4195012
ripemd160 40 108f07b8382412612c048d07d13f814118445acd
ripemd256 64 cc1d2594aece0a064b7aed75a57283d9490fd5705ed3d66bf9a
ripemd320 80 eb0cf45114c56a8421fbcb33430fa22e0cd607560a88bbe14ce
whirlpool 128 0a25f55d7308eca6b9567a7ed3bd1b46327f0f1ffdc804dd8bb
tiger128,3 32 a78862336f7ffd2c8a3874f89b1b74f2
tiger160,3 40 a78862336f7ffd2c8a3874f89b1b74f2f27bdbca
tiger192,3 48 a78862336f7ffd2c8a3874f89b1b74f2f27bdbca39660254
tiger128,4 32 1c2a939f230ee5e828f5d0eae5947135
tiger160,4 40 1c2a939f230ee5e828f5d0eae5947135741cd0ae
tiger192,4 48 1c2a939f230ee5e828f5d0eae5947135741cd0aefeeb2adc
snefru 64 7c5f22b1a92d9470efea37ec6ed00b2357a4ce3c41aa6e28e3b
gost 64 a7eb5d08ddf2363f1ea0317a803fcef81d33863c8b2f9f6d7d1
adler32 8 062c0215
crc32 8 3d653119
crc32b 8 3610a686
haval128,3 32 85c3e4fac0ba4d85519978fdc3d1d9be
haval160,3 40 0e53b29ad41cea507a343cdd8b62106864f6b3fe
haval192,3 48 bfaf81218bbb8ee51b600f5088c4b8601558ff56e2de1c4f
haval224,3 56 92d0e3354be5d525616f217660e0f860b5d472a9cb99d6766be
haval256,3 64 26718e4fb05595cb8703a672a8ae91eea071cac5e7426173d4c
haval128,4 32 fe10754e0b31d69d4ece9c7a46e044e5
haval160,4 40 b9afd44b015f8afce44e4e02d8b908ed857afbd1
haval192,4 48 ae73833a09e84691d0214f360ee5027396f12599e3618118
haval224,4 56 e1ad67dc7a5901496b15dab92c2715de4b120af2baf661ecd92
haval256,4 64 2d39577df3a6a63168826b2a10f07a65a676f5776a0772e0a87
haval128,5 32 d20e920d5be9d9d34855accb501d1987
haval160,5 40 dac5e2024bfea142e53d1422b90c9ee2c8187cc6
haval192,5 48 bbb99b1e989ec3174019b20792fd92dd67175c2ff6ce5965
haval224,5 56 aa6551d75e33a9c5cd4141e9a068b1fc7b6d847f85c3ab16295
haval256,5 64 348298791817d5088a6de6c1b6364756d404a50bd64e645035f
5. Fungsi sha1()
Fungsi ini akan menghasilkan kode hash sepanjang 40 karakter. Mirip seperti fungsi md5().
Contoh:
Hasilnya:
2e71f75dee7cb3e4b8e2e6ef8b8b5e0eab8f78a2
Seperti halnya fungsi md5(), fungsi ini juga akan menciptakan karakter aneh, bila ditambahkan
garam.
Contoh:
Hasilnya:
6. Fungsi base64_encode()
Fungsi ini akan menghasilkan kode hash dari teks yang diinputkan dan bisa dikembalikan ke
bentuk semula dengan fungsi base64_decode().
Hasilnya:
Sementara itu, untuk mengembalikan (decrypt) atau decode dapat menggunakan fungsi
base64_decode().
Contoh:
Hasilnya:
Enkripsi dengan base64 tidak cocok digunakan untuk mengenkripsi password, karena sangat
mudah di-decode.
Akhir Kata…
Itulah 6 (enam) fungsi enkripsi di PHP untuk mengamankan data. Setiap fungsi memiliki
algoritmanya masing-masing.
Gunakan fungsi yang menggunakan metode one-way hasing untuk melindungi password. Tapi,
perlu diselidiki dulu…apakah fungsi tersebut masih aman atau tidak?
Sedangkan untuk fungsi yang menggunakan metode two-way hasing, sangat tidak disarankan
untuk melindungi password, karena memiliki fungsi untuk decode atau mengembalikannya dari
bentuk hash menjadi plain text.
Referensi:
API yang pertama sudah tidak didukung lagi sejak PHP versi 5.5.x dan digantikan dengan
mysqli yang lebih canggih. Karena mysqli dapat digunakan secara OOP dan prosedural.
Sedangkan API PDO digunakan untuk menghubungkan PHP dengan vendor database yang
lainnya. Jadi tidak hanya untuk MySQL saja.
Pada tutorial ini, kita akan belajar cara menghubungkan PHP dan MySQL menggunakan API
mysqli secara prosedural.
Menyiapkan Database
Pertama, mari kita membuat database bernama pendaftaran_siswa.
CREATE DATABASE `pendaftaran_siswa`;
Setelah itu, buatlah tabel di dalam database tersbut dengan nama calon_siswa.
Berikan tipe data kolomnya seperti ini.
Setelah itu klik Save.
mkdir /var/www/html/pendaftaran-siswa
touch /var/www/html/pendaftaran-siswa/{config.php,index.php,list-
siswa.php,form-daftar.php,proses-pendaftaran.php,form-edit.php,proses-
edit.php,hapus.php}
<?php
$server = "localhost";
$user = "root";
$password = "kopi";
$nama_database = "pendaftaran_siswa";
$db = mysqli_connect($server, $user, $password, $nama_database);
if( !$db ){
die("Gagal terhubung dengan database: " . mysqli_connect_error());
}
?>
Silahkan isi password sesuai dengan yang dibuat di servernya. Jika tidak menggunakan
passsword, maka dikosongkan saja.
if( !$db ){
die("Gagal terhubung dengan database: " . mysqli_connect_error());
}
<!DOCTYPE html>
<html>
<head>
<title>Pendaftaran Siswa Baru | SMK Coding</title>
</head>
<body>
<header>
<h3>Pendaftaran Siswa Baru</h3>
<h1>SMK Coding</h1>
</header>
<h4>Menu</h4>
<nav>
<ul>
<li><a href="form-daftar.php">Daftar Baru</a></li>
<li><a href="list-siswa.php">Pendaftar</a></li>
</ul>
</nav>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Pendaftaran Siswa Baru | SMK Coding</title>
</head>
<body>
<header>
<h3>Siswa yang sudah mendaftar</h3>
</header>
<nav>
<a href="form-daftar.php">[+] Tambah Baru</a>
</nav>
<br>
<table border="1">
<thead>
<tr>
<th>No</th>
<th>Nama</th>
<th>Alamat</th>
<th>Jenis Kelamin</th>
<th>Agama</th>
<th>Sekolah Asal</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
<?php
$sql = "SELECT * FROM calon_siswa";
$query = mysqli_query($db, $sql);
while($siswa = mysqli_fetch_array($query)){
echo "<tr>";
echo "<td>".$siswa['id']."</td>";
echo "<td>".$siswa['nama']."</td>";
echo "<td>".$siswa['alamat']."</td>";
echo "<td>".$siswa['jenis_kelamin']."</td>";
echo "<td>".$siswa['agama']."</td>";
echo "<td>".$siswa['sekolah_asal']."</td>";
echo "<td>";
echo "<a href='form-edit.php?id=".$siswa['id']."'>Edit</a> | ";
echo "<a href='hapus.php?id=".$siswa['id']."'>Hapus</a>";
echo "</td>";
echo "</tr>";
}
?>
</tbody>
</table>
</body>
</html>
Pertama kita membutuhkan koneksi ke database, maka kita harus mengimpor file config.php
agar variabel $db dapat dibaca.
Setelah itu, kita melakukan query untuk mengambil data siswa pada tabel calon_siswa.
$sql = "SELECT * FROM calon_siswa";
$query = mysqli_query($db, $sql);
Hasil dari query tersetbut, kemudian kita ubah menjadi array dengan fungsi
mysqli_fetch_array() dan hasilnya disimpan dalam variabel $siswa.
$siswa = mysqli_fetch_array($query)
Perulangan while akan mengulang selama masih ada isi dalam tabel. Kemudain, selama
perulangan…kita tampilkan datanya.
while($siswa = mysqli_fetch_array($query)){
echo "<tr>";
echo "<td>".$siswa['id']."</td>";
echo "<td>".$siswa['nama']."</td>";
echo "<td>".$siswa['alamat']."</td>";
echo "<td>".$siswa['jenis_kelamin']."</td>";
echo "<td>".$siswa['agama']."</td>";
echo "<td>".$siswa['sekolah_asal']."</td>";
echo "<td>";
echo "<a href='form-edit.php?id=".$siswa['id']."'>Edit</a> | ";
echo "<a href='hapus.php?id=".$siswa['id']."'>Hapus</a>";
echo "</td>";
echo "</tr>";
}
Perhatikan array $siswa, indeksnya sesuai dengan nama kolom pada database dan bersifat case
sensitive.
Terakhir, kita menampilkan total data yang ada di dalam tabel dengan fungsi
mysqli_num_rows().
echo mysqli_num_rows($query);
Maka hasilnya:
Gampang kaaan…! 😄
Sebenarnya bisa saja dibuat dalam satu file, tapi biar lebih mudah dipahami…kita buat terpisah
saja.
<!DOCTYPE html>
<html>
<head>
<title>Formulir Pendaftaran Siswa Baru | SMK Coding</title>
</head>
<body>
<header>
<h3>Formulir Pendaftaran Siswa Baru</h3>
</header>
<fieldset>
<p>
<label for="nama">Nama: </label>
<input type="text" name="nama" placeholder="nama lengkap" />
</p>
<p>
<label for="alamat">Alamat: </label>
<textarea name="alamat"></textarea>
</p>
<p>
<label for="jenis_kelamin">Jenis Kelamin: </label>
<label><input type="radio" name="jenis_kelamin" value="laki-laki">
Laki-laki</label>
<label><input type="radio" name="jenis_kelamin" value="perempuan">
Perempuan</label>
</p>
<p>
<label for="agama">Agama: </label>
<select name="agama">
<option>Islam</option>
<option>Kristen</option>
<option>Hindu</option>
<option>Budha</option>
<option>Atheis</option>
</select>
</p>
<p>
<label for="sekolah_asal">Sekolah Asal: </label>
<input type="text" name="sekolah_asal" placeholder="nama
sekolah" />
</p>
<p>
<input type="submit" value="Daftar" name="daftar" />
</p>
</fieldset>
</form>
</body>
</html>
Perhatikan pada tag pembuka <form>, di sana kita menggunakan atribut action dan method.
Atribut action digunakan untuk menentukan skrip mana yang akan memproses data inputan.
Sedangkan atribut method untuk menentukan metode pengiriman datanya.
Perhatikan juga pada input-nya, disana ada atribut name. Atribut ini untuk menentukan kunci
indeks dari array $_POST dan $_GET.
Selanjutnya silPriscilia Priscilia YulianiPriscilia Yuliani isi file proses-pendaftaran.php
dengan kode berikut:
<?php
include("config.php");
// buat query
$sql = "INSERT INTO calon_siswa (nama, alamat, jenis_kelamin, agama,
sekolah_asal) VALUE ('$nama', '$alamat', '$jk', '$agama', '$sekolah')";
$query = mysqli_query($db, $sql);
} else {
die("Akses dilarang...");
}
?>
Pertama kita ambil data yang dikirim dari formulir, semuanya tersimpan pada variabel $_POST.
Karena tadi kita menggunakan method POST pada form.
Untuk menampilkan pesan berhasil dan gagal pada halaman index.php, silahkan tambahkan
kode berikut di bawah tag <nav> pada file index.php:
Hasilnya:
Contoh:
http://localhost/pendaftaran-siswa/hapus.php?id=1
Query string-nya adalah ?id=1. Query string akan tersimpan dalam variabel $_GET.
Untuk lebih jelasnya, silahkan buka file hapus.php dan isi dengan kode berikut:
<?php
include("config.php");
if( isset($_GET['id']) ){
} else {
die("akses dilarang...");
}
?>
Sekarang coba klik link hapus, maka datanya akan langsung terhapus.
Sebenarnya cara ini kurang aman, karena kita tidak meberikan dialog konfirmasi kepada user.
Misalnya seperti mananyakan ‘Apakah yakin akan menghapus?’
Pertama kita ambil id data yang akan di-edit. Setelah itu kita melakukan query untuk mengambil
data dari database dan menampilkannya ke dalam form.
Untuk lebih jelasnya, silahkan buka file form-edit.php dan isi dengan kode berikut:
<?php
include("config.php");
?>
<!DOCTYPE html>
<html>
<head>
<title>Formulir Edit Siswa | SMK Coding</title>
</head>
<body>
<header>
<h3>Formulir Edit Siswa</h3>
</header>
<fieldset>
<p>
<label for="nama">Nama: </label>
<input type="text" name="nama" placeholder="nama lengkap"
value="<?php echo $siswa['nama'] ?>" />
</p>
<p>
<label for="alamat">Alamat: </label>
<textarea name="alamat"><?php echo $siswa['alamat'] ?></textarea>
</p>
<p>
<label for="jenis_kelamin">Jenis Kelamin: </label>
<?php $jk = $siswa['jenis_kelamin']; ?>
<label><input type="radio" name="jenis_kelamin" value="laki-laki"
<?php echo ($jk == 'laki-laki') ? "checked": "" ?>> Laki-laki</label>
<label><input type="radio" name="jenis_kelamin" value="perempuan"
<?php echo ($jk == 'perempuan') ? "checked": "" ?>> Perempuan</label>
</p>
<p>
<label for="agama">Agama: </label>
<?php $agama = $siswa['agama']; ?>
<select name="agama">
<option <?php echo ($agama == 'Islam') ? "selected": "" ?
>>Islam</option>
<option <?php echo ($agama == 'Kristen') ? "selected": "" ?
>>Kristen</option>
<option <?php echo ($agama == 'Hindu') ? "selected": "" ?
>>Hindu</option>
<option <?php echo ($agama == 'Budha') ? "selected": "" ?
>>Budha</option>
<option <?php echo ($agama == 'Atheis') ? "selected": "" ?
>>Atheis</option>
</select>
</p>
<p>
<label for="sekolah_asal">Sekolah Asal: </label>
<input type="text" name="sekolah_asal" placeholder="nama sekolah"
value="<?php echo $siswa['sekolah_asal'] ?>" />
</p>
<p>
<input type="submit" value="Simpan" name="simpan" />
</p>
</fieldset>
</form>
</body>
</html>
Pertama kita mengubah data dari hasil query menjadi array dengan menggunakan fungsi
mysqli_fetch_assoc().
Karena data yang akan kita ambil adalah satu baris dan agar indeks array-nya menggunakan
nama kolom.
Array
(
[id] => 1
[nama] => Lia
[alamat] => Jl. Mangga No. 3, Mataram
[jenis_kelamin] => perempuan
[agama] => Islam
[sekolah_asal] => SMPN 32 Ampenan
)
Kemudian data tersebut kita tampilkan untuk menjadi nilai default pada form.
Jangan lupa untuk membuat input id dengan tipe hidden untuk menyimpan id data yang akan
di-update.
Untuk input radio dan select, kita menggunakan operator ternary agar bisa membuat atribut
checked dan selected.
<p>
<label for="jenis_kelamin">Jenis Kelamin: </label>
<?php $jk = $siswa['jenis_kelamin']; ?>
<label><input type="radio" name="jenis_kelamin" value="laki-laki" <?php
echo ($jk == 'laki-laki') ? "checked": "" ?>> Laki-laki</label>
<label><input type="radio" name="jenis_kelamin" value="perempuan" <?php
echo ($jk == 'perempuan') ? "checked": "" ?>> Perempuan</label>
</p>
<p>
<label for="agama">Agama: </label>
<?php $agama = $siswa['agama']; ?>
<select name="agama">
<option <?php echo ($agama == 'Islam') ? "selected": "" ?
>>Islam</option>
<option <?php echo ($agama == 'Kristen') ? "selected": "" ?
>>Kristen</option>
<option <?php echo ($agama == 'Hindu') ? "selected": "" ?
>>Hindu</option>
<option <?php echo ($agama == 'Budha') ? "selected": "" ?
>>Budha</option>
<option <?php echo ($agama == 'Atheis') ? "selected": "" ?
>>Atheis</option>
</select>
</p>
Ketika kita lihat dari inspect elements…maka akan tampil seperti ini:
Setelah itu, silahkan isi file proses-edit.php dengan kode berikut:
<?php
include("config.php");
} else {
die("Akses dilarang...");
}
?>
Akhir Kata…
Terima kasih sudah mengikuti tutorial ini sampai akhir.
Selamat belajar. 😄