[ 'mode' => 'primary_dhcp', // primary_static or primary_dhcp 'ip' => '', 'subnet' => '', 'gateway' => '', 'vlan' => '' ], 'secondary' => [ 'mode' => 'secondary_disable', // secondary_static or secondary_dhcp 'ip' => '', 'subnet' => '', 'gateway' => '', 'vlan' => '' ] ]; // load existing if (file_exists($jsonFile)) { $raw = file_get_contents($jsonFile); $data = json_decode($raw, true); if (!is_array($data)) $data = $defaults; } else { $data = $defaults; } $errors = []; $success = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // helper $get = function ($k) { return isset($_POST[$k]) ? trim((string)$_POST[$k]) : ''; }; $primary_mode = in_array($get('primary_mode'), ['primary_static', 'primary_dhcp']) ? $get('primary_mode') : 'primary_dhcp'; $secondary_mode = in_array($get('secondary_mode'), ['secondary_static', 'secondary_dhcp','secondary_disable']) ? $get('secondary_mode') : 'secondary_dhcp'; $primary_ip = $get('network_primary_ip'); $primary_subnet = $get('network_primary_subnet'); $primary_gateway = $get('network_primary_gateway'); $primary_vlan = $get('network_primary_vlan'); $secondary_ip = $get('network_secondary_ip'); $secondary_subnet = $get('network_secondary_subnet'); $secondary_gateway = $get('network_secondary_gateway'); $secondary_vlan = $get('network_secondary_vlan'); // Validate IPs (allow empty). Subnet accepted as IP or CIDR like 192.168.1.0/24 $validate_ip_or_cidr = function ($v) { if ($v === '') return true; if (strpos($v, '/') !== false) { [$ip, $cidr] = explode('/', $v, 2); return filter_var($ip, FILTER_VALIDATE_IP) !== false && ctype_digit($cidr) && (int)$cidr >= 0 && (int)$cidr <= 32; } return filter_var($v, FILTER_VALIDATE_IP) !== false; }; foreach ( [ ['field' => 'Primary IP', 'value' => $primary_ip], ['field' => 'Primary Subnet', 'value' => $primary_subnet], ['field' => 'Primary Gateway', 'value' => $primary_gateway], ['field' => 'Secondary IP', 'value' => $secondary_ip], ['field' => 'Secondary Subnet', 'value' => $secondary_subnet], ['field' => 'Secondary Gateway', 'value' => $secondary_gateway], ] as $f ) { if ($f['value'] !== '') { $ok = $f['field'] === 'Primary Subnet' || $f['field'] === 'Secondary Subnet' ? $validate_ip_or_cidr($f['value']) : filter_var($f['value'], FILTER_VALIDATE_IP) !== false; if (!$ok) $errors[] = $f['field'] . ' is invalid: ' . htmlspecialchars($f['value']); } } // VLAN numeric check (allow empty) foreach ([['Primary VLAN', $primary_vlan], ['Secondary VLAN', $secondary_vlan]] as $v) { if ($v[1] !== '' && (!ctype_digit($v[1]) || (int)$v[1] < 0 || (int)$v[1] > 4094)) { $errors[] = $v[0] . ' must be a number 0-4094'; } } if (empty($errors)) { $new = [ 'primary' => [ 'mode' => $primary_mode, 'ip' => $primary_ip, 'subnet' => $primary_subnet, 'gateway' => $primary_gateway, 'vlan' => $primary_vlan ], 'secondary' => [ 'mode' => $secondary_mode, 'ip' => $secondary_ip, 'subnet' => $secondary_subnet, 'gateway' => $secondary_gateway, 'vlan' => $secondary_vlan ] ]; $json = json_encode($new, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); if (file_put_contents($jsonFile, $json, LOCK_EX) === false) { $errors[] = "Failed to write {$jsonFile}. Check permissions."; } else { $data = $new; $success = 'Saved.'; } } } ?>

Primary Interface


>
>

Secondary Vlan Interface


>
>
>

'; foreach ($errors as $e) echo '
' . $e . '
'; echo ''; } if ($success) { echo '
' . htmlspecialchars($success) . '
'; } ?>