Subbab 8 / 9

PHP (Hypertext Preprocessor)

PHP merujuk pada bahasa pemrograman yang dijalankan dari sisi server (server side) dalam pembuatan dan pengembangan web.

Persiapan Tools

  • Install XAMPP/Laragon (ada Apache + PHP + MySQL).
  • Jika menggunakan XAMPP buka folder htdocs/. didalam XAMPP dan buat file dengan ekstensi .php di folder htdocs/.
  • Jika menggunakan laragon maka akses lewat folder laragon dan masuk folder www dan bisa membuat file langsung misal xample.php
  • Akses via browser http://localhost/namafile.php.

1. Struktur Dasar PHP

php
1
2
3
<?php
echo "Hello World!";
?>

Semua kode PHP ditulis di dalam tag <?php ... ?>. echo digunakan untuk menampilkan teks.

2. Variabel & Tipe Data

php
1
2
3
4
5
6
7
8
<?php
$nama = "Andi";     // string
$umur = 20;         // integer
$tinggi = 170.5;    // float
$isActive = true;   // boolean

echo "Nama: $nama, Umur: $umur tahun";
?>

Di PHP variabel selalu diawali dengan tanda dolar $ yang menandai bahwa ini adalah variabel

3. Operator Aritmatika

php
1
2
3
4
5
6
7
8
9
10
<?php
$a = 10;
$b = 3;

echo $a + $b; // 13
echo $a - $b; // 7
echo $a * $b; // 30
echo $a / $b; // 3.333...
echo $a % $b; // 1
?>

4. Perkondisian (If - Else)

php
1
2
3
4
5
6
7
8
9
<?php
$nilai = 80;

if ($nilai >= 75) {
    echo "Lulus";
} else {
    echo "Tidak Lulus";
}
?>

5.Perulangan (Looping)

php
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// For
for ($i = 1; $i <= 5; $i++) {
    echo "Angka: $i <br>";
}

// While
$j = 1;
while ($j <= 5) {
    echo "Hitung: $j <br>";
    $j++;
}
?>

6. Array

php
1
2
3
4
5
6
7
<?php
$buah = ["Apel", "Jeruk", "Mangga"];

foreach ($buah as $b) {
    echo $b . "<br>";
}
?>

7. Fungsi

php
1
2
3
4
5
6
7
<?php
function salam($nama) {
    return "Halo, $nama!";
}

echo salam("Tunggul");
?>

8. Form Input (GET & POST)

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<h2>Form POST</h2>
<form method="POST">
  Nama: <input type="text" name="nama_post">
  <button type="submit">Kirim (POST)</button>
</form>

<h2>Form GET</h2>
<form method="GET">
  Nama: <input type="text" name="nama_get">
  <button type="submit">Kirim (GET)</button>
</form>

<?php
// Cek POST
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['nama_post'])) {
    $nama = htmlspecialchars($_POST['nama_post']);
    echo "<p>Halo (POST), $nama!</p>";
}

// Cek GET
if ($_SERVER["REQUEST_METHOD"] == "GET" && isset($_GET['nama_get'])) {
    $nama = htmlspecialchars($_GET['nama_get']);
    echo "<p>Halo (GET), $nama!</p>";
}
?>

9. Koneksi Database MySQL

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db   = "belajar_php";

$conn = new mysqli($host, $user, $pass, $db);

if ($conn->connect_error) {
    die("Koneksi gagal: " . $conn->connect_error);
} else {
    echo "Koneksi berhasil!";
}
?>

Variabel Khusus & Method Penting di PHP

Superglobals (Variabel Khusus di PHP)

Superglobals adalah variabel array bawaan PHP yang bisa diakses di mana saja (global scope).

1. $_GET

php
1
2
3
4
5
// Menangkap data dari URL (query string)
<?php
// URL: http://localhost/test.php?nama=Andi
echo $_GET['nama']; // Output: Andi
?>

2. $_POST

php
1
2
3
4
5
6
7
8
9
10
11
// Menangkap data dari form dengan method POST

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    echo $_POST['nama'];
}
?>
<form method="POST">
  <input type="text" name="nama">
  <button type="submit">Kirim</button>
</form>

3. $_REQUEST

php
1
2
3
4
5
// Gabungan dari $_GET, $_POST, dan $_COOKIE.

<?php
echo $_REQUEST['nama'];
?>

4. $_SESSION

php
1
2
3
4
5
6
7
// Menyimpan data sementara selama sesi user aktif.

<?php
session_start();
$_SESSION['username'] = "Andi";
echo $_SESSION['username'];
?>
php
1
2
3
4
5
6
// Menyimpan data kecil di browser user.

<?php
setcookie("user", "Andi", time() + 3600);
echo $_COOKIE['user'];
?>

6. $_FILES

php
1
2
3
4
5
6
7
8
9
10
// Menangani upload file.

if (isset($_FILES['file'])) {
    move_uploaded_file($_FILES['file']['tmp_name'], "uploads/" . $_FILES['file']['name']);
}
?>
<form method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <button type="submit">Upload</button>
</form>

7. $_SERVER

php
1
2
3
4
5
6
7
8
// Informasi tentang server & request.

<?php
echo $_SERVER['PHP_SELF'];   // Nama file yang sedang dijalankan
echo $_SERVER['SERVER_NAME']; // Nama server
echo $_SERVER['HTTP_HOST'];   // Host
echo $_SERVER['REQUEST_METHOD']; // GET/POST
?>

8. $_ENV

Variabel environment (jarang dipakai langsung, biasanya untuk konfigurasi).

Fungsi / Method Bawaan Penting di PHP

String

php
1
2
3
4
5
strlen("Halo");          // Hitung panjang string
strtoupper("halo");      // HALO
strtolower("HALO");      // halo
substr("BelajarPHP", 0, 7); // Belajar
str_replace("PHP", "Web", "Belajar PHP"); // Belajar Web

Array

php
1
2
3
4
5
$buah = ["Apel", "Jeruk", "Mangga"];
count($buah);            // 3
array_push($buah, "Durian");
array_pop($buah);
in_array("Apel", $buah); // true

Date & Time

php
1
2
echo date("Y-m-d H:i:s"); // 2025-10-03 10:00:00
echo time();              // Timestamp saat ini

Validasi & Keamanan

php
1
2
3
htmlspecialchars("<b>Halo</b>"); // &lt;b&gt;Halo&lt;/b&gt;
password_hash("123456", PASSWORD_DEFAULT);
password_verify("123456", $hash);

File

php
1
2
file_put_contents("data.txt", "Hello PHP");
echo file_get_contents("data.txt");

Ringkasan

  • Superglobals : $_GET, $_POST, $_REQUEST, $_SESSION, $_COOKIE, $_FILES, $_SERVER, $_ENV.
  • Method penting: manipulasi string, array, tanggal/waktu, keamanan (hash, htmlspecialchars), file handling.

Tujuan Pembelajaran

  • Memahami konsep CRUD (Create, Read, Update, Delete).
  • Membuat aplikasi Shortlink sederhana dengan PHP Native.
  • Menggunakan TailwindCSS untuk tampilan modern & responsif.
  • Menghubungkan PHP dengan database MySQL.

Persiapan

  • Install XAMPP/Laragon atau server lokal lain.
  • Buat folder project di htdocs/shortlink-app/. (XAMPP)
  • Buat folder project di www/shortlink-app/. (laragon)
  • Buat database MySQL:
plaintext
1
2
3
4
5
6
7
8
9
CREATE DATABASE shortlink_db;
USE shortlink_db;

CREATE TABLE links (
    id INT AUTO_INCREMENT PRIMARY KEY,
    short_code VARCHAR(50) UNIQUE,
    original_url TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Struktur Project

plaintext
1
2
3
4
5
6
7
8
shortlink-app/
│── index.php        (Tampilan daftar link + tambah link)
│── edit.php         (Edit link)
│── delete.php       (Hapus link)
│── redirect.php     (Redirect ke original URL)
│── db.php           (Koneksi database)
│── assets/
    └── tailwind.css (CDN atau file Tailwind)

db.php (Koneksi Database)

php
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db   = "shortlink_db";

$conn = new mysqli($host, $user, $pass, $db);

if ($conn->connect_error) {
    die("Koneksi gagal: " . $conn->connect_error);
}
?>

index.php (Read + Create)

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php include 'db.php'; ?>

<?php
// Tambah Data
if (isset($_POST['add'])) {
    $original = $_POST['original_url'];
    $short = substr(md5(time()), 0, 6); // generate random short code

    $sql = "INSERT INTO links (short_code, original_url) VALUES ('$short', '$original')";
    $conn->query($sql);
    header("Location: index.php");
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <script src="https://cdn.tailwindcss.com"></script>
  <title>Shortlink App</title>
</head>
<body class="bg-gray-100 p-10">
  <div class="max-w-2xl mx-auto bg-white p-6 rounded-xl shadow-md">
    <h1 class="text-2xl font-bold mb-4">πŸ“Œ Shortlink Generator</h1>

    <!-- Form Tambah -->
    <form method="POST" class="flex gap-2 mb-6">
      <input type="url" name="original_url" placeholder="Masukkan URL asli"
        class="w-full p-2 border rounded-lg" required>
      <button type="submit" name="add" class="px-4 py-2 bg-blue-500 text-white rounded-lg">Tambah</button>
    </form>

    <!-- Daftar Link -->
    <table class="w-full border text-left">
      <thead class="bg-gray-200">
        <tr>
          <th class="p-2">Short</th>
          <th class="p-2">Original</th>
          <th class="p-2">Aksi</th>
        </tr>
      </thead>
      <tbody>
        <?php
        $result = $conn->query("SELECT * FROM links ORDER BY id DESC");
        while ($row = $result->fetch_assoc()) {
          echo "<tr class='border-t'>
                  <td class='p-2'>
                    <a class='text-blue-600 underline' target='_blank' href='redirect.php?c={$row['short_code']}'>
                      {$row['short_code']}
                    </a>
                  </td>
                  <td class='p-2'>{$row['original_url']}</td>
                  <td class='p-2'>
                    <a href='edit.php?id={$row['id']}' class='px-2 py-1 bg-yellow-400 rounded'>Edit</a>
                    <a href='delete.php?id={$row['id']}' class='px-2 py-1 bg-red-500 text-white rounded'>Delete</a>
                  </td>
                </tr>";
        }
        ?>
      </tbody>
    </table>
  </div>
</body>
</html>

edit.php (Update)

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php include 'db.php'; ?>

<?php
$id = $_GET['id'];
$result = $conn->query("SELECT * FROM links WHERE id=$id");
$data = $result->fetch_assoc();

if (isset($_POST['update'])) {
    $original = $_POST['original_url'];
    $sql = "UPDATE links SET original_url='$original' WHERE id=$id";
    $conn->query($sql);
    header("Location: index.php");
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <script src="https://cdn.tailwindcss.com"></script>
  <title>Edit Link</title>
</head>
<body class="bg-gray-100 p-10">
  <div class="max-w-lg mx-auto bg-white p-6 rounded-xl shadow-md">
    <h1 class="text-xl font-bold mb-4">✏️ Edit Link</h1>
    <form method="POST" class="flex gap-2">
      <input type="url" name="original_url" value="<?= $data['original_url']; ?>"
        class="w-full p-2 border rounded-lg" required>
      <button type="submit" name="update" class="px-4 py-2 bg-green-500 text-white rounded-lg">Update</button>
    </form>
  </div>
</body>
</html>

delete.php (Delete)

php
1
2
3
4
5
<?php
include 'db.php';
$id = $_GET['id'];
$conn->query("DELETE FROM links WHERE id=$id");
header("Location: index.php");

redirect.php (Redirect ke URL asli)

php
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include 'db.php';

$code = $_GET['c'];
$result = $conn->query("SELECT * FROM links WHERE short_code='$code'");

if ($row = $result->fetch_assoc()) {
    header("Location: " . $row['original_url']);
    exit;
} else {
    echo "Shortlink tidak ditemukan.";
}
?>