Lewati ke konten
Hot News

Top 10 Kursus Komputer Terbaik di Bekasi 2025

10 Daftar AI Paling Top di Dunia (Versi Lengkap + Penjelasan Detail)

10 Top AI Pembuat Video Terbaik 2025

10 AI Pembuat Lagu Terbaik 2025

10 AI Pembuat Presentasi Terbaik 2025

Tutorial PHP Native Lengkap untuk Pemula

Info Komputer
Info Komputer

Informasi Terkini teknologi komputer dan pemrograman

  • Home
  • Politics
  • Technology
  • Contact
Main Menu
  • Home
  • Politics
  • Technology
  • Contact

About Me

Nick Mars - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima incidunt voluptates nemo, dolor optio quia architecto quis delectus perspiciatis. Nobis atque id hic neque possimus voluptatum voluptatibus tenetur, perspiciatis consequuntur.

Social Icons

Facebook1,750PenggemarSukaX (Twitter)759PengikutIkutiInstagram2,500PengikutIkutiPinterest1,365PengikutPinYoutube2,700PelangganBerlanggananTiktok2,900PengikutIkutiTelegram2,000AnggotaGabungSoundcloud1,963PengikutIkutiVimeo1,254PengikutIkutiDribbble3,520PengikutIkuti
  • Support
    • Documentation
    • Video Tutorials
    • Support
  • About theme
  • Visit Us
Rabu, November 26, 2025
Home / Tutorial PHP Native / Tutorial PHP Native Lengkap untuk Pemula
  • Technology
  • Tutorial PHP Native

Tutorial PHP Native Lengkap untuk Pemula

Oleh Nick
Tidak ada komentar
9 Januari 2025 06:54
php native

Tutorial PHP Native Lengkap untuk Pemula (Full Guide + Contoh Kode Lengkap + CRUD MySQL & Login Register)

(Cocok untuk Artikel SEO Panjang / WordPress)

PHP adalah salah satu bahasa pemrograman backend paling populer untuk kebutuhan web development. Banyak website besar seperti Facebook, Wikipedia, hingga WordPress dibangun dengan PHP. Pada artikel ini kita akan belajar dasar-dasar PHP dari nol hingga membuat aplikasi CRUD produk lengkap beserta upload gambar, keamanan dasar, serta fitur login dan register.

Konten pada artikel ini:

  1. Apa itu PHP?

  2. Sintaks dasar PHP

  3. Tipe data dalam PHP

  4. Variabel dalam PHP

  5. Menampilkan single data

  6. Menampilkan data range (array)

  7. Manipulasi array (merge, split, splice, dan lainnya)

  8. Looping (for, foreach, while)

  9. Logika (if, else, switch)

  10. Session pada PHP

  11. Dasar-dasar MySQL

  12. SQL Join dan pengertiannya

  13. Membuat CRUD Produk dengan Upload Gambar

  14. Menambahkan fitur Login & Register

  15. Keamanan dasar (validation, hashing, prepared statement)


1. Apa Itu PHP?

PHP (Hypertext Preprocessor) adalah bahasa pemrograman yang berjalan di sisi server (server-side). Artinya, pemrosesan kode terjadi di server dan outputnya dikirim ke browser pengguna.

Kelebihan PHP:

  • Mudah dipelajari

  • Banyak dokumentasi

  • Integrasi kuat dengan MySQL

  • Cocok untuk pemula hingga profesional

  • Banyak hosting mendukung PHP

1. Pengenalan & Persiapan

Untuk mengikuti tutorial ini siapkan:

  • PHP 7.4+ (disarankan PHP 8.x)

  • Web server (Apache / Nginx) atau XAMPP/LAMP/WAMP/MAMP

  • MySQL / MariaDB

  • Editor: VSCode / Sublime / PHPStorm

File contoh nanti menggunakan PHP procedural dengan PDO (lebih aman) dan HTML form standar.


2. Sintaks dasar PHP & tipe data

 
<?php // komentar satu baris # komentar juga bisa /* komentar multi-baris */ // menampilkan echo "Halo, dunia!"; print " Halo lagi!"; // Tipe data $int = 10; // integer $float = 3.14; // float (double) $string = "Hello"; // string $bool = true; // boolean $array = [1, 2, 3]; // array $nullVar = null; // null // konversi tipe sederhana $sum = (int)"5" + 2; // 7 ?>

Catatan: PHP adalah weakly typed — variabel tidak perlu dideklarasikan tipe secara eksplisit.


3. Variabel & Menampilkan Data

Variabel

 
<?php $name = "Naufal"; $age = 28; echo "Nama: $name, Umur: $age"; ?>

Menampilkan single data dari array / DB

 
<?php $user = ['id'=>1, 'name'=>'Naufal', 'email'=>'naufal@example.com']; echo $user['name']; // output: Naufal ?>

Menampilkan rentang data (misal hasil query)

Umumnya kita fetch banyak baris lalu loop.

 
<?php $rows = [ ['id'=>1,'title'=>'Produk A'], ['id'=>2,'title'=>'Produk B'] ]; foreach ($rows as $row) { echo $row['id'] . ' - ' . $row['title'] . "<br>"; } ?>

4. Array & Manipulasi Array

Membuat array

 
$numbers = [1,2,3]; $assoc = ['a'=>'apel','b'=>'pisang'];

Merge (array_merge)

 
$a=[1,2]; $b=[3,4]; $c = array_merge($a,$b); // [1,2,3,4]

Split (explode) — memecah string menjadi array

 
$str = "apel,pisang,jeruk"; $arr = explode(',', $str); // ['apel','pisang','jeruk']

Join (implode) — array ke string

 
echo implode(' | ', $arr); // "apel | pisang | jeruk"

Splice (array_splice) — hapus/insert pada posisi

 
$a = [1,2,3,4,5]; array_splice($a, 2, 1); // hapus 1 elemen mulai index 2 -> [1,2,4,5] array_splice($a, 2, 0, [8,9]); // insert 8,9 mulai index 2

Lain-lain

  • array_slice untuk mengambil sebagian array

  • array_map, array_filter, array_reduce untuk functional-style processing


5. Looping

for

 
for ($i=0; $i<5; $i++){ echo $i . "<br>"; }

foreach

 
$fruits=['apel','jeruk','pisang']; foreach ($fruits as $index => $f) { echo "$index: $f<br>"; }

while / do-while

 
$i = 0; while ($i < 3) { echo $i; $i++; } $j = 0; do { echo $j; $j++; } while ($j < 2);

6. Struktur Kontrol: if, switch

If / else

 
$nilai = 80; if ($nilai >= 85) { echo "A"; } elseif ($nilai >= 70) { echo "B"; } else { echo "C"; }

Switch

 
$warna = 'merah'; switch ($warna) { case 'merah': echo "Stop"; break; case 'hijau': echo "Jalan"; break; default: echo "Tidak diketahui"; }

7. Session & Autentikasi Dasar

Memulai session

 
<?php session_start(); // harus di baris pertama sebelum output $_SESSION['user_id'] = 1; $_SESSION['username'] = 'naufal'; ?>

Mengecek login & logout

 
// cek_login.php session_start(); if (!isset($_SESSION['user_id'])) { header('Location: login.php'); exit; } // logout.php session_start(); session_unset(); session_destroy(); header('Location: login.php'); exit;

Keamanan: selalu regenerasi session id saat login sukses:

 
session_regenerate_id(true);

8. MySQL: Dasar & JOIN (penjelasan singkat)

Contoh membuat database & tabel (SQL)

 
CREATE DATABASE shop; USE shop; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE products ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(200) NOT NULL, description TEXT, price DECIMAL(10,2) NOT NULL, image VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

Query dasar

  • SELECT: SELECT * FROM products WHERE price > 100;

  • INSERT: INSERT INTO products (name, price) VALUES ('A', 100.00);

  • UPDATE: UPDATE products SET price=120 WHERE id=1;

  • DELETE: DELETE FROM products WHERE id=1;

JOIN (penjelasan)

JOIN menggabungkan baris dari dua (atau lebih) tabel berdasarkan kondisi:

  • INNER JOIN — hanya baris yang cocok di kedua tabel

     
    SELECT u.username, p.name FROM users u INNER JOIN products p ON p.id = u.favorite_product_id;
  • LEFT JOIN — semua baris dari tabel kiri + cocok dari kanan (jika ada)

  • RIGHT JOIN — semua baris dari tabel kanan + cocok dari kiri

  • CROSS JOIN — hasilkan kombinasi Cartesian (semua kombinasi)

  • SELF JOIN — join tabel dengan dirinya sendiri


9. Contoh Lengkap: CRUD Produk dengan Gambar + Login/Register (PHP Native + PDO)

Catatan: Contoh berikut minimal dan praktis. Untuk produksi, tambahkan validasi tambahan, logging, rate limiting, HTTPS, dsb.

Struktur file (saran)

 
/project /uploads/ # folder menyimpan gambar, chmod 755 config.php init.php # session_start, autoload functions.php register.php login.php logout.php products/ index.php create.php edit.php delete.php view.php

config.php (koneksi PDO)

 
<?php // config.php $host = '127.0.0.1'; $db = 'shop'; $user = 'dbuser'; $pass = 'dbpass'; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); } catch (Exception $e) { error_log($e->getMessage()); exit('Koneksi database gagal'); }

init.php

 
<?php // init.php session_start(); require_once __DIR__ . '/config.php'; require_once __DIR__ . '/functions.php'; // CSRF token generator (sederhana) if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); }

functions.php (beberapa helper)

 
<?php // functions.php function old($key, $default = '') { return $_POST[$key] ?? $default; } function esc($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } function is_post() { return $_SERVER['REQUEST_METHOD'] === 'POST'; } function check_csrf($token) { if (!hash_equals($_SESSION['csrf_token'] ?? '', $token ?? '')) { die('CSRF token mismatch'); } }

register.php (form + proses)

 
<?php require 'init.php'; if (is_post()) { check_csrf($_POST['csrf_token']); $username = trim($_POST['username']); $email = trim($_POST['email']); $password = $_POST['password']; $confirm = $_POST['confirm']; // Validasi sederhana $errors = []; if (!$username) $errors[] = 'Username wajib'; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'Email tidak valid'; if (strlen($password) < 6) $errors[] = 'Password minimal 6 karakter'; if ($password !== $confirm) $errors[] = 'Password tidak sama'; if (empty($errors)) { // cek user exist $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $email]); if ($stmt->fetch()) { $errors[] = 'Username atau email sudah dipakai'; } else { $hash = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (username,email,password) VALUES (?,?,?)"); $stmt->execute([$username, $email, $hash]); header('Location: login.php?registered=1'); exit; } } } ?> <!-- form HTML --> <!doctype html> <html><body> <h2>Register</h2> <?php if (!empty($errors)) foreach ($errors as $e) echo "<div style='color:red'>".esc($e)."</div>"; ?> <form method="post"> <input type="hidden" name="csrf_token" value="<?=esc($_SESSION['csrf_token'])?>"> <label>Username: <input name="username" value="<?=esc(old('username'))?>"></label><br> <label>Email: <input name="email" value="<?=esc(old('email'))?>"></label><br> <label>Password: <input name="password" type="password"></label><br> <label>Confirm: <input name="confirm" type="password"></label><br> <button type="submit">Register</button> </form> </body></html>

login.php

 
<?php require 'init.php'; if (is_post()) { check_csrf($_POST['csrf_token']); $username = $_POST['username']; $password = $_POST['password']; $stmt = $pdo->prepare("SELECT id, password FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $username]); $user = $stmt->fetch(); if ($user && password_verify($password, $user['password'])) { session_regenerate_id(true); $_SESSION['user_id'] = $user['id']; header('Location: products/index.php'); exit; } else { $error = 'Login gagal'; } } ?> <!doctype html> <html><body> <h2>Login</h2> <?php if (!empty($error)) echo "<div style='color:red'>".esc($error)."</div>"; ?> <form method="post"> <input type="hidden" name="csrf_token" value="<?=esc($_SESSION['csrf_token'])?>"> <label>Username/Email: <input name="username"></label><br> <label>Password: <input name="password" type="password"></label><br> <button type="submit">Login</button> </form> </body></html>

products/index.php (list produk)

 
<?php require '../init.php'; if (!isset($_SESSION['user_id'])) { header('Location: ../login.php'); exit; } // paging sederhana $stmt = $pdo->query("SELECT * FROM products ORDER BY created_at DESC"); $products = $stmt->fetchAll(); ?> <!doctype html> <html><body> <h1>Produk</h1> <p><a href="create.php">Tambah Produk</a> | <a href="../logout.php">Logout</a></p> <table border="1" cellpadding="6"> <tr><th>ID</th><th>Gambar</th><th>Nama</th><th>Harga</th><th>Aksi</th></tr> <?php foreach($products as $p): ?> <tr> <td><?=esc($p['id'])?></td> <td> <?php if ($p['image']): ?> <img src="../uploads/<?=esc($p['image'])?>" style="max-width:80px"> <?php endif; ?> </td> <td><?=esc($p['name'])?></td> <td><?=esc($p['price'])?></td> <td> <a href="view.php?id=<?=esc($p['id'])?>">Lihat</a> | <a href="edit.php?id=<?=esc($p['id'])?>">Edit</a> | <a href="delete.php?id=<?=esc($p['id'])?>" onclick="return confirm('Hapus?')">Hapus</a> </td> </tr> <?php endforeach; ?> </table> </body></html>

products/create.php (form + upload gambar)

 
<?php require '../init.php'; if (!isset($_SESSION['user_id'])) { header('Location: ../login.php'); exit; } if (is_post()) { check_csrf($_POST['csrf_token']); $name = trim($_POST['name']); $price = floatval($_POST['price']); $desc = trim($_POST['description']); $imageName = null; // validasi simple $errors=[]; if ($name === '') $errors[]='Nama wajib'; if ($price <= 0) $errors[]='Harga harus > 0'; // handle file upload if (!empty($_FILES['image']['name'])) { $file = $_FILES['image']; $allowed = ['image/jpeg','image/png','image/gif']; if ($file['error'] !== UPLOAD_ERR_OK) { $errors[] = 'Upload gagal'; } elseif (!in_array(mime_content_type($file['tmp_name']), $allowed)) { $errors[] = 'Tipe file tidak diizinkan'; } elseif ($file['size'] > 2*1024*1024) { $errors[] = 'Ukuran maksimal 2MB'; } else { // buat nama unik $ext = pathinfo($file['name'], PATHINFO_EXTENSION); $imageName = bin2hex(random_bytes(8)) . "." . $ext; $dest = __DIR__ . '/../uploads/' . $imageName; if (!move_uploaded_file($file['tmp_name'], $dest)) { $errors[] = 'Gagal memindahkan file'; } } } if (empty($errors)) { $stmt = $pdo->prepare("INSERT INTO products (name, description, price, image) VALUES (?,?,?,?)"); $stmt->execute([$name, $desc, $price, $imageName]); header('Location: index.php'); exit; } } ?> <!doctype html> <html><body> <h2>Tambah Produk</h2> <?php if (!empty($errors)) foreach ($errors as $e) echo "<div style='color:red'>".esc($e)."</div>"; ?> <form method="post" enctype="multipart/form-data"> <input type="hidden" name="csrf_token" value="<?=esc($_SESSION['csrf_token'])?>"> <label>Nama: <input name="name" value="<?=esc(old('name'))?>"></label><br> <label>Harga: <input name="price" value="<?=esc(old('price'))?>"></label><br> <label>Deskripsi:<br><textarea name="description"><?=esc(old('description'))?></textarea></label><br> <label>Gambar: <input type="file" name="image" accept="image/*"></label><br> <button type="submit">Simpan</button> </form> </body></html>

products/edit.php (edit + ganti gambar sederhana)

 
<?php require '../init.php'; if (!isset($_SESSION['user_id'])) header('Location: ../login.php'); $id = $_GET['id'] ?? null; $stmt = $pdo->prepare("SELECT * FROM products WHERE id = ?"); $stmt->execute([$id]); $product = $stmt->fetch(); if (!$product) exit('Produk tidak ditemukan'); if (is_post()) { check_csrf($_POST['csrf_token']); $name = trim($_POST['name']); $price = floatval($_POST['price']); $desc = trim($_POST['description']); $imageName = $product['image']; $errors = []; if (!$name) $errors[]='Nama wajib'; // jika upload gambar baru if (!empty($_FILES['image']['name'])) { $file = $_FILES['image']; $allowed = ['image/jpeg','image/png','image/gif']; if ($file['error'] !== UPLOAD_ERR_OK) $errors[]='Upload gagal'; elseif (!in_array(mime_content_type($file['tmp_name']), $allowed)) $errors[]='Tipe file tidak diizinkan'; else { $ext = pathinfo($file['name'], PATHINFO_EXTENSION); $newName = bin2hex(random_bytes(8)).".$ext"; $dest = __DIR__ . '/../uploads/' . $newName; if (move_uploaded_file($file['tmp_name'], $dest)) { // hapus file lama jika ada if ($product['image'] && file_exists(__DIR__ . '/../uploads/' . $product['image'])) { @unlink(__DIR__ . '/../uploads/' . $product['image']); } $imageName = $newName; } else { $errors[]='Gagal memindahkan file'; } } } if (empty($errors)) { $stmt = $pdo->prepare("UPDATE products SET name=?, description=?, price=?, image=? WHERE id=?"); $stmt->execute([$name, $desc, $price, $imageName, $id]); header('Location: index.php'); exit; } } ?> <!doctype html> <html><body> <h2>Edit Produk</h2> <?php if (!empty($errors)) foreach ($errors as $e) echo "<div style='color:red'>".esc($e)."</div>"; ?> <form method="post" enctype="multipart/form-data"> <input type="hidden" name="csrf_token" value="<?=esc($_SESSION['csrf_token'])?>"> <label>Nama: <input name="name" value="<?=esc($product['name'])?>"></label><br> <label>Harga: <input name="price" value="<?=esc($product['price'])?>"></label><br> <label>Deskripsi:<br><textarea name="description"><?=esc($product['description'])?></textarea></label><br> <?php if ($product['image']): ?> <img src="../uploads/<?=esc($product['image'])?>" style="max-width:120px;"><br> <?php endif; ?> <label>Ganti Gambar: <input type="file" name="image" accept="image/*"></label><br> <button type="submit">Update</button> </form> </body></html>

products/delete.php

 
<?php require '../init.php'; if (!isset($_SESSION['user_id'])) header('Location: ../login.php'); $id = $_GET['id'] ?? null; if ($id) { // ambil image $stmt = $pdo->prepare("SELECT image FROM products WHERE id = ?"); $stmt->execute([$id]); $p = $stmt->fetch(); if ($p) { if ($p['image'] && file_exists(__DIR__ . '/../uploads/' . $p['image'])) { @unlink(__DIR__ . '/../uploads/' . $p['image']); } $stmt = $pdo->prepare("DELETE FROM products WHERE id = ?"); $stmt->execute([$id]); } } header('Location: index.php'); exit;

products/view.php

 
<?php require '../init.php'; $id = $_GET['id'] ?? null; $stmt = $pdo->prepare("SELECT * FROM products WHERE id = ?"); $stmt->execute([$id]); $p = $stmt->fetch(); if (!$p) exit('Produk tidak ditemukan'); ?> <!doctype html><html><body> <h2><?=esc($p['name'])?></h2> <p>Harga: <?=esc($p['price'])?></p> <?php if ($p['image']): ?><img src="../uploads/<?=esc($p['image'])?>" style="max-width:300px"><?php endif; ?> <p><?=nl2br(esc($p['description']))?></p> <p><a href="index.php">Kembali</a></p> </body></html>

10. Praktik Keamanan Penting (ringkasan)

  1. Gunakan prepared statements (PDO) untuk mencegah SQL Injection — sudah dipakai di contoh.

  2. Hash password dengan password_hash() dan verifikasi dengan password_verify() — contoh register/login.

  3. Validasi & sanitasi input (client-side + server-side).

  4. Batasi ukuran & tipe file upload, verifikasi MIME type & ekstensi. Simpan gambar di folder yang tidak dieksekusi (atau atur .htaccess untuk melarang eksekusi PHP).

  5. Regenerasi session ID setelah login (session_regenerate_id(true)) dan gunakan session_start() di awal.

  6. CSRF token di form (sederhana di contoh). Untuk produksi gunakan library yang matang.

  7. Gunakan HTTPS di server produksi.

  8. Escape output menggunakan htmlspecialchars (fungsi esc() pada contoh).

  9. Simpan konfigurasi di file terpisah dan jangan commit ke public repo (gunakan .env atau secret manager).

  10. Batasi error display di production (display_errors = Off), log saja.

Share Article
Tag:mysql joinphp arrayphp CRUDphp dasarphp login registerprepared statementstutorial php nativeupload gambar php
Previous Article

What the New Trade Deal Really Means for Small and Local Businesses

Next Article

10 AI Pembuat Presentasi Terbaik 2025

ppt-presentation-ai
Nick

Related Posts

AI
10 Daftar AI Paling Top di Dunia (Versi Lengkap + Penjelasan Deta ...
9 Januari 2025
video ai
10 Top AI Pembuat Video Terbaik 2025
9 Januari 2025
Inside NASA’s Plans for the First Human Mission to Mars
8 Januari 2025

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Social Icons

Facebook1,000PenggemarSukaX (Twitter)1,000PengikutIkutiInstagram1,000PengikutIkutiPinterest1,000PengikutPinYoutube1,000PelangganBerlanggananTiktok1,000PengikutIkutiTelegram1,000AnggotaGabungSoundcloud1,000PengikutIkutiVimeo1,000PengikutIkutiDribbble1,000PengikutIkuti

Featured Posts

1kursus komputer
Top 10 Kursus Komputer Terbaik di Bekasi 2025
25 November 2025
2AI
10 Daftar AI Paling Top di Dunia (Versi Lengkap + Penjelasan Detail)
9 Januari 2025
3video ai
10 Top AI Pembuat Video Terbaik 2025
9 Januari 2025
Info Komputer
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima incidunt voluptates nemo, dolor optio quia architecto quis delectus perspiciatis.

Nobis atque id hic neque possimus voluptatum voluptatibus tenetur, perspiciatis consequuntur.

Email: sample@gmail.com
Call Us: +987 95 95 64 82

Category List

  • Artificial Inteligen(4)
  • Automobiles(2)
  • Business(2)
  • Fashion(3)
  • Gadgets(2)
  • Health(2)
  • Keterampilan(1)
  • Politics(1)
  • Technology(5)
  • Tutorial PHP Native(1)

Featured Posts

1kursus komputer
Top 10 Kursus Komputer Terbaik di Bekasi 2025
25 November 2025
2AI
10 Daftar AI Paling Top di Dunia (Versi Lengkap + Penjelasan Detail)
9 Januari 2025
3video ai
10 Top AI Pembuat Video Terbaik 2025
9 Januari 2025
Copyright © 2025 Info Komputer | Powered by Majalah Berita X