TKK_E32230273/save_profile.php

116 lines
3.9 KiB
PHP

<?php
session_start();
include 'koneksi.php';
header('Content-Type: application/json');
if (!isset($_SESSION['user_id'])) {
echo json_encode(['status' => 'error', 'message' => 'Sesi tidak valid. Silakan login ulang.']);
exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan.']);
exit;
}
$id_account = $_SESSION['user_id'];
$form_type = $_POST['form_type'] ?? '';
// Ambil data existing dulu agar tidak ter-overwrite dengan kosong
$existing = $pdo->prepare("SELECT * FROM profile WHERE id_account = ?");
$existing->execute([$id_account]);
$old = $existing->fetch(PDO::FETCH_ASSOC);
// Merge: pakai POST value jika ada & tidak kosong, otherwise pakai existing
$email = trim($_POST['email'] ?? ($old['email'] ?? ''));
$moto = trim($_POST['moto'] ?? ($old['moto'] ?? ''));
$provinsi = trim($_POST['provinsi'] ?? ($old['provinsi'] ?? ''));
$kabupaten = trim($_POST['kabupaten'] ?? ($old['kabupaten'] ?? ''));
$kecamatan = trim($_POST['kecamatan'] ?? ($old['kecamatan'] ?? ''));
$desa = trim($_POST['desa'] ?? ($old['desa'] ?? ''));
$kode_pos = trim($_POST['kode_pos'] ?? ($old['kode_pos'] ?? ''));
$facebook = trim($_POST['facebook'] ?? ($old['facebook'] ?? ''));
$instagram = trim($_POST['instagram'] ?? ($old['instagram'] ?? ''));
$linkedin = trim($_POST['linkedin'] ?? ($old['linkedin'] ?? ''));
$whatsapp = trim($_POST['whatsapp'] ?? ($old['whatsapp'] ?? ''));
// Validasi berdasarkan form_type
if ($form_type === 'social') {
$required = [
'WhatsApp' => $whatsapp,
];
foreach ($required as $label => $value) {
if (empty($value)) {
echo json_encode(['status' => 'error', 'message' => "$label wajib diisi."]);
exit;
}
}
$waClean = preg_replace('/[^0-9]/', '', $whatsapp);
if (strlen($waClean) < 10 || strlen($waClean) > 15) {
echo json_encode(['status' => 'error', 'message' => 'Nomor WhatsApp harus 10-15 digit angka.']);
exit;
}
}
if ($form_type === 'personal') {
$required = [
'Email' => $email,
];
foreach ($required as $label => $value) {
if (empty($value)) {
echo json_encode(['status' => 'error', 'message' => "$label wajib diisi."]);
exit;
}
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo json_encode(['status' => 'error', 'message' => 'Format email tidak valid.']);
exit;
}
}
if ($form_type === 'address') {
// Hanya validasi alamat (kode pos tidak wajib)
$required = [
'Provinsi' => $provinsi,
'Kabupaten/Kota' => $kabupaten,
'Kecamatan' => $kecamatan,
'Desa' => $desa,
];
foreach ($required as $label => $value) {
if (empty($value)) {
echo json_encode(['status' => 'error', 'message' => "$label wajib diisi."]);
exit;
}
}
}
try {
$stmt = $pdo->prepare("
INSERT INTO profile (id_account, email, moto, provinsi, kabupaten, kecamatan, desa, kode_pos, facebook, instagram, linkedin, whatsapp)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
email = VALUES(email),
moto = VALUES(moto),
provinsi = VALUES(provinsi),
kabupaten = VALUES(kabupaten),
kecamatan = VALUES(kecamatan),
desa = VALUES(desa),
kode_pos = VALUES(kode_pos),
facebook = VALUES(facebook),
instagram = VALUES(instagram),
linkedin = VALUES(linkedin),
whatsapp = VALUES(whatsapp)
");
$stmt->execute([
$id_account, $email, $moto, $provinsi, $kabupaten, $kecamatan, $desa, $kode_pos,
$facebook, $instagram, $linkedin, $whatsapp
]);
echo json_encode(['status' => 'success', 'message' => 'Profil berhasil disimpan.']);
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan: ' . $e->getMessage()]);
}
?>