Compare commits

..

3 Commits

Author SHA1 Message Date
Nama Kamu 5ca984602e Migrate to docker-compose for auto database initialization 2026-06-11 15:20:22 +07:00
Nama Kamu 07a7dc55e8 Suppress PHP warnings on mysqli_connect to prevent JSON corruption 2026-06-11 15:09:46 +07:00
Nama Kamu 805f152be1 Fix trailing whitespace and JSON parse errors on backend 2026-06-11 15:02:32 +07:00
15 changed files with 72 additions and 92 deletions
+3
View File
@@ -7,6 +7,9 @@
-- Versi server: 10.4.32-MariaDB
-- Versi PHP: 8.2.12
CREATE DATABASE IF NOT EXISTS `db_spbu` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `db_spbu`;
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
+1 -2
View File
@@ -4,11 +4,10 @@ $user = getenv('DB_USER') ?: 'root';
$pass = getenv('DB_PASSWORD') ?: '';
$db = getenv('DB_NAME') ?: 'db_spbu';
$conn = mysqli_connect($host, $user, $pass, $db);
$conn = @mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
die("Koneksi database gagal: " . mysqli_connect_error());
}
$koneksi = $conn;
?>
+1 -3
View File
@@ -5,10 +5,8 @@ $user = getenv('DB_USER') ?: 'root';
$pass = getenv('DB_PASSWORD') ?: '';
$db = getenv('DB_NAME') ?: '02_kerusakan';
$conn = mysqli_connect($host, $user, $pass, $db);
$conn = @mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
die("Koneksi database gagal: " . mysqli_connect_error());
}
?>
+7 -4
View File
@@ -5,9 +5,12 @@ $data = [];
$result = $conn->query("SELECT * FROM spbu");
while ($row = $result->fetch_assoc()) {
$data[] = $row;
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
} else {
// If table doesn't exist or other error, return empty array
}
echo json_encode($data);
?>
echo json_encode($data);
+1 -2
View File
@@ -10,6 +10,5 @@ $query = "DELETE FROM spbu WHERE id='$id'";
if ($conn->query($query)) {
echo "success";
} else {
echo "error";
echo "error: " . $conn->error;
}
?>
+4 -4
View File
@@ -266,7 +266,7 @@ lng:pos.lng
})
.then(r=>r.text())
.then(res=>{
if(res=="success"){
if(res.trim()=="success"){
alert("Lokasi berhasil diupdate");
location.reload();
}
@@ -348,7 +348,7 @@ body:fd
})
.then(r=>r.text())
.then(res=>{
if(res=="success"){
if(res.trim()=="success"){
alert("Data berhasil disimpan");
location.reload();
}else{
@@ -422,7 +422,7 @@ lng:lng
})
.then(r=>r.text())
.then(res=>{
if(res=="success"){
if(res.trim()=="success"){
alert("Data berhasil diupdate");
location.reload();
}else{
@@ -452,7 +452,7 @@ id:id
})
.then(r=>r.text())
.then(res=>{
if(res=="success"){
if(res.trim()=="success"){
alert("Data berhasil dihapus");
location.reload();
}
+1 -2
View File
@@ -4,9 +4,8 @@ $user = getenv('DB_USER') ?: 'root';
$pass = getenv('DB_PASSWORD') ?: '';
$db = getenv('DB_NAME_04') ?: (getenv('DB_NAME') ?: 'db_24jam');
$conn = mysqli_connect($host, $user, $pass, $db);
$conn = @mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
die("Koneksi database gagal: " . mysqli_connect_error());
}
?>
+1 -2
View File
@@ -15,6 +15,5 @@ $query = "INSERT INTO spbu (nama_spbu, no_wa, status, latitude, longitude)
if ($conn->query($query)) {
echo "success";
} else {
echo "error";
echo "error: " . $conn->error;
}
?>
+1 -2
View File
@@ -21,6 +21,5 @@ $query = "UPDATE spbu SET
if ($conn->query($query)) {
echo "success";
} else {
echo "error";
echo "error: " . $conn->error;
}
?>
+1 -1
View File
@@ -7,7 +7,7 @@ $user = getenv('DB_USER') ?: 'root';
$pass = getenv('DB_PASSWORD') ?: '';
$db = getenv('DB_NAME') ?: 'uas_06';
$conn = mysqli_connect($host, $user, $pass, $db);
$conn = @mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
http_response_code(500);
+2 -4
View File
@@ -8,8 +8,6 @@ WORKDIR /var/www/html
COPY . /var/www/html/
RUN mkdir -p /var/www/html/05/uploads/bukti \
&& chown -R www-data:www-data /var/www/html \
&& sed -i 's/\r$//' /var/www/html/start.sh \
&& chmod +x /var/www/html/start.sh
&& chown -R www-data:www-data /var/www/html
CMD ["/var/www/html/start.sh"]
CMD ["apache2-foreground"]
+42
View File
@@ -0,0 +1,42 @@
version: '3.8'
services:
app:
build: .
ports:
- "8000:80"
environment:
# Koneksi database menunjuk ke container 'db'
- DB_HOST=db
- DB_USER=root
- DB_PASSWORD=rootpassword
# Nama-nama database (akan otomatis dibuat oleh MySQL container saat pertama kali jalan)
- DB_NAME=uas_06
- DB_NAME_04=db_24jam
depends_on:
db:
condition: service_healthy
restart: always
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
# Auto-import semua database saat container pertama kali dibuat (volume kosong)
- ./01/db_spbu.sql:/docker-entrypoint-initdb.d/1_db_spbu.sql
- ./02/database.sql:/docker-entrypoint-initdb.d/2_database.sql
- ./04/db_spbu.sql:/docker-entrypoint-initdb.d/4_db_spbu.sql
- ./05/database_uas_06.sql:/docker-entrypoint-initdb.d/5_database_uas_06.sql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
restart: always
volumes:
db_data:
-63
View File
@@ -1,63 +0,0 @@
<?php
$host = getenv('DB_HOST') ?: 'localhost';
$user = getenv('DB_USER') ?: 'root';
$pass = getenv('DB_PASSWORD') ?: '';
$db = getenv('DB_NAME') ?: 'uas_06';
echo "Menunggu MySQL di $host siap...\n";
$maxTries = 30;
for ($i = 0; $i < $maxTries; $i++) {
$conn = @new mysqli($host, $user, $pass);
if (!$conn->connect_error) {
break;
}
sleep(2);
}
if ($conn->connect_error) {
die("Gagal koneksi ke database: " . $conn->connect_error . "\n");
}
// Buat database utama jika belum ada (berguna untuk local development)
$conn->query("CREATE DATABASE IF NOT EXISTS `$db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
$conn->select_db($db);
function importSql($conn, $file) {
if (!file_exists($file)) return;
$sql = file_get_contents($file);
// Hapus CREATE DATABASE dan USE agar menggunakan DB saat ini
$sql = preg_replace('/CREATE DATABASE IF NOT EXISTS [^\;]+\;/i', '', $sql);
$sql = preg_replace('/USE [^\;]+\;/i', '', $sql);
if ($conn->multi_query($sql)) {
do {
if ($res = $conn->store_result()) {
$res->free();
}
} while ($conn->more_results() && $conn->next_result());
}
}
// Cek apakah tabel uas_06 sudah ada (menggunakan tabel role sebagai patokan)
$res = $conn->query("SHOW TABLES LIKE 'role'");
if ($res->num_rows == 0) {
echo "Tabel utama (05) belum ada, menjalankan import...\n";
importSql($conn, __DIR__ . '/05/database_uas_06.sql');
} else {
echo "Tabel utama (05) sudah ada, skip import.\n";
}
// Cek tabel SPBU (04)
$db04 = getenv('DB_NAME_04') ?: $db;
$conn->query("CREATE DATABASE IF NOT EXISTS `$db04` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
$conn->select_db($db04);
$res = $conn->query("SHOW TABLES LIKE 'spbu'");
if ($res->num_rows == 0) {
echo "Tabel spbu (04) belum ada, menjalankan import...\n";
importSql($conn, __DIR__ . '/04/db_spbu.sql');
} else {
echo "Tabel spbu (04) sudah ada, skip import.\n";
}
$conn->close();
echo "Inisialisasi database selesai.\n";
-3
View File
@@ -1,3 +0,0 @@
#!/bin/bash
php /var/www/html/init-db.php
exec apache2-foreground
+7
View File
@@ -0,0 +1,7 @@
<?php
$sql = "CREATE DATABASE IF NOT EXISTS uas_06 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE uas_06;
CREATE TABLE role (id INT);";
$sql = preg_replace('/CREATE DATABASE IF NOT EXISTS [^\;]+\;/i', '', $sql);
$sql = preg_replace('/USE [^\;]+\;/i', '', $sql);
echo $sql;