v3 (mod): Masukkan banyak nama pada kolom Nama (satu nama per baris). Field Last Name global digunakan jika baris tidak menyediakan last. Local-part = normalisasi First+Last + nomor urut baris. Recovery Email: luw@lajoex.com.
<?php
// save-emails.php - contoh sederhana, sesuaikan credential & security sebelum produksi.
// CORS (ijinkan origin caller; batasi production ke domain Anda)
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Content-Type, X-API-Key');
}
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('Access-Control-Allow-Methods: POST, OPTIONS');
http_response_code(200);
exit;
}
header('Content-Type: application/json; charset=utf-8');
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400);
echo json_encode(['ok' => false, 'msg' => 'Invalid JSON: ' . json_last_error_msg()]);
exit;
}
if (!$data || !isset($data['emails']) || !is_array($data['emails'])) {
http_response_code(400);
echo json_encode(['ok' => false, 'msg' => 'Invalid payload: missing emails array']);
exit;
}
// DB config - sesuaikan
$host = '127.0.0.1';
$db = 'jbcybmaq_email';
$user = 'jbcybmaq_mail';
$pass = 'Semangat45..';
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_errno) {
http_response_code(500);
echo json_encode(['ok' => false, 'msg' => 'DB connect error: ' . $mysqli->connect_error]);
exit;
}
$mysqli->set_charset('utf8mb4');
// Pastikan tabel jbcybmaq_email punya kolom: Email (unique), Aktif, `Non Aktif`
// Gunakan prepared statement
$sql = "INSERT INTO jbcybmaq_email (Email, Aktif, `Non Aktif`)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE Aktif=VALUES(Aktif), `Non Aktif`=VALUES(`Non Aktif`)";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
http_response_code(500);
echo json_encode(['ok' => false, 'msg' => 'Prepare failed: ' . $mysqli->error]);
exit;
}
$mysqli->begin_transaction();
$inserted = 0;
try {
foreach ($data['emails'] as $row) {
if (!isset($row['Email']) || !isset($row['Aktif']) || !isset($row['NonAktif'])) continue;
$email = trim($row['Email']);
$aktif = trim($row['Aktif']);
$non = trim($row['NonAktif']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) continue;
$stmt->bind_param('sss', $email, $aktif, $non);
if (!$stmt->execute()) throw new Exception('Execute failed: ' . $stmt->error);
$inserted++;
}
$mysqli->commit();
echo json_encode(['ok' => true, 'count' => $inserted]);
} catch (Exception $e) {
$mysqli->rollback();
http_response_code(500);
echo json_encode(['ok' => false, 'msg' => $e->getMessage()]);
}
?>