Il file dashboard.php รจ il cuore del sistema di gestione, responsabile di:
Ecco il codice completo del file dashboard.php:
connect_error) {
die("Connessione fallita: " . $conn->connect_error);
}
// 3. Gestione delle Azioni
$action = $_GET['action'] ?? 'dashboard';
switch ($action) {
case 'add_device':
handleAddDevice($conn);
break;
case 'edit_device':
handleEditDevice($conn);
break;
case 'delete_device':
handleDeleteDevice($conn);
break;
case 'resolve_alarm':
handleResolveAlarm($conn);
break;
default:
// Mostra la dashboard
}
// 4. Funzioni di Gestione
function handleAddDevice($conn) {
// Validazione e sanitizzazione
$ip = filter_input(INPUT_POST, 'ip', FILTER_VALIDATE_IP);
$type = htmlspecialchars($_POST['type']);
$mac = preg_replace('/[^0-9A-Fa-f]/', '', $_POST['mac']);
// Inserimento nel database
$stmt = $conn->prepare("INSERT INTO dispositivi (Indirizzo_IP, Tipo_Dispositivo, Indirizzo_MAC) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $ip, $type, $mac);
if ($stmt->execute()) {
$_SESSION['message'] = "Dispositivo aggiunto con successo!";
} else {
$_SESSION['error'] = "Errore durante l'aggiunta del dispositivo";
}
header("Location: dashboard.php");
}
// Altre funzioni di gestione...
// 5. Recupero Dati per la Visualizzazione
$devices = $conn->query("SELECT * FROM dispositivi ORDER BY Stato DESC");
$alarms = $conn->query("SELECT a.*, d.Indirizzo_IP FROM allarmi a JOIN dispositivi d ON a.ID_D = d.ID_D WHERE a.Risolto = 0");
// Statistiche per i grafici
$stats = $conn->query("SELECT Stato, COUNT(*) as count FROM dispositivi GROUP BY Stato");
$alarm_stats = $conn->query("SELECT Tipo, COUNT(*) as count FROM allarmi WHERE Risolto = 0 GROUP BY Tipo");
// 6. Visualizzazione HTML
?>
Dashboard - Gestionerete
La parte iniziale del codice gestisce l'autenticazione e la sicurezza:
// 1. Avvio sessione e controllo autenticazione
session_start();
require_once 'config.php'; // Configurazioni sensibili
if (!isset($_SESSION['user'])) {
header("Location: login.php");
exit();
}
// 2. Connessione sicura al database
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
die("Connessione fallita: " . $conn->connect_error);
}
Il sistema implementa tutte le operazioni fondamentali sui dispositivi:
function handleAddDevice($conn) {
// Validazione input
$ip = filter_input(INPUT_POST, 'ip', FILTER_VALIDATE_IP);
if (!$ip) {
$_SESSION['error'] = "Indirizzo IP non valido";
return;
}
$type = htmlspecialchars($_POST['type']);
$mac = preg_replace('/[^0-9A-Fa-f]/', '', $_POST['mac']);
// Prepared statement per prevenire SQL injection
$stmt = $conn->prepare("INSERT INTO dispositivi (...) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $ip, $type, $mac);
if ($stmt->execute()) {
$_SESSION['message'] = "Dispositivo aggiunto!";
} else {
$_SESSION['error'] = "Errore database";
}
}
Questa funzione dimostra best practices importanti:
filter_input()htmlspecialchars()