'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()]); } ?>