Generator CSV Akun

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.

Jika ingin Last Name berbeda per baris, gunakan format: First,Last pada baris itu.
Kosongkan untuk otomatis nomor urut. Jika sebagian baris memiliki explicit last (via comma), yang explicit akan diprioritaskan.
Header CSV dari file Anda
Contoh server-side: save-emails.php (PHP + MySQL) — gunakan sebagai starting point
<?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()]);
}
?>
      
Sesuaikan credential DB, sanitasi, autentikasi, dan batasi CORS di produksi.