exec(" CREATE TABLE IF NOT EXISTS countries ( id INT AUTO_INCREMENT PRIMARY KEY, name_en VARCHAR(255) NOT NULL, name_ar VARCHAR(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; "); db()->exec(" CREATE TABLE IF NOT EXISTS cities ( id INT AUTO_INCREMENT PRIMARY KEY, country_id INT NOT NULL, name_en VARCHAR(255) NOT NULL, name_ar VARCHAR(255) DEFAULT NULL, UNIQUE KEY uniq_city_country (country_id, name_en), CONSTRAINT fk_cities_country FOREIGN KEY (country_id) REFERENCES countries(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; "); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['add_country'])) { $countryNameEn = trim($_POST['country_name_en'] ?? ''); $countryNameAr = trim($_POST['country_name_ar'] ?? ''); if ($countryNameEn === '') { $errors[] = 'Country name (English) is required.'; } else { try { $stmt = db()->prepare("INSERT INTO countries (name_en, name_ar) VALUES (?, ?)"); $stmt->execute([$countryNameEn, $countryNameAr !== '' ? $countryNameAr : null]); $flash = 'Country added.'; } catch (Throwable $e) { $errors[] = 'Country already exists or could not be saved.'; } } } elseif (isset($_POST['add_city'])) { $countryId = (int)($_POST['country_id'] ?? 0); $cityNameEn = trim($_POST['city_name_en'] ?? ''); $cityNameAr = trim($_POST['city_name_ar'] ?? ''); if ($countryId <= 0 || $cityNameEn === '') { $errors[] = 'Please select a country and provide city name (English).'; } else { try { $stmt = db()->prepare("INSERT INTO cities (country_id, name_en, name_ar) VALUES (?, ?, ?)"); $stmt->execute([$countryId, $cityNameEn, $cityNameAr !== '' ? $cityNameAr : null]); $flash = 'City added.'; } catch (Throwable $e) { $errors[] = 'City already exists or could not be saved.'; } } } } $countryNameExpr = $lang === 'ar' ? "COALESCE(NULLIF(co.name_ar, ''), co.name_en)" : "COALESCE(NULLIF(co.name_en, ''), co.name_ar)"; $countryNameExprNoAlias = $lang === 'ar' ? "COALESCE(NULLIF(name_ar, ''), name_en)" : "COALESCE(NULLIF(name_en, ''), name_ar)"; $cityNameExpr = $lang === 'ar' ? "COALESCE(NULLIF(c.name_ar, ''), c.name_en)" : "COALESCE(NULLIF(c.name_en, ''), c.name_ar)"; $countries = db()->query("SELECT id, {$countryNameExprNoAlias} AS display_name FROM countries ORDER BY display_name ASC")->fetchAll(); $cities = db()->query( "SELECT {$countryNameExpr} AS country_name, {$cityNameExpr} AS city_name FROM cities c JOIN countries co ON co.id = c.country_id ORDER BY country_name ASC, city_name ASC LIMIT 30" )->fetchAll(); render_header('Manage Locations', 'admin'); ?>
Define allowed origin and destination options for shipments.
No cities added yet.
| Country | City |
|---|---|
| = e($city['country_name']) ?> | = e($city['city_name']) ?> |