diff --git a/add_installation.php b/add_installation.php index c0636f0..91f80db 100644 --- a/add_installation.php +++ b/add_installation.php @@ -10,7 +10,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $voltage = trim($_POST['voltage'] ?? null); $phase_neutral_ground = trim($_POST['phase_neutral_ground'] ?? null); $breaker_output = trim($_POST['breaker_output'] ?? null); - $image_path = null; if (empty($client_name) || empty($address) || empty($technician_name)) { $_SESSION['message'] = 'Please fill all required fields.'; @@ -19,53 +18,61 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { exit; } - // Handle file upload - if (isset($_FILES['installation_image']) && $_FILES['installation_image']['error'] === UPLOAD_ERR_OK) { - $upload_dir = __DIR__ . '/assets/uploads/'; - if (!is_dir($upload_dir)) { - mkdir($upload_dir, 0775, true); - } - - $file_tmp_path = $_FILES['installation_image']['tmp_name']; - $file_name = $_FILES['installation_image']['name']; - $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); - $allowed_ext = ['jpg', 'jpeg', 'png', 'gif']; - - if (in_array($file_ext, $allowed_ext)) { - $new_file_name = time() . '_' . basename($file_name); - $dest_path = $upload_dir . $new_file_name; - - if (move_uploaded_file($file_tmp_path, $dest_path)) { - $image_path = 'assets/uploads/' . $new_file_name; - } else { - $_SESSION['message'] = 'Failed to move uploaded file.'; - $_SESSION['message_type'] = 'danger'; - header('Location: index.php'); - exit; - } - } else { - $_SESSION['message'] = 'Invalid file type. Only JPG, JPEG, PNG, and GIF are allowed.'; - $_SESSION['message_type'] = 'danger'; - header('Location: index.php'); - exit; - } - } - + $pdo = db(); try { - $pdo = db(); - $stmt = $pdo->prepare( - "INSERT INTO installations (client_name, address, technician_name, observations, voltage, phase_neutral_ground, breaker_output, image_path) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" - ); - $stmt->execute([$client_name, $address, $technician_name, $observations, $voltage, $phase_neutral_ground, $breaker_output, $image_path]); + $pdo->beginTransaction(); + $stmt = $pdo->prepare( + "INSERT INTO installations (client_name, address, technician_name, observations, voltage, phase_neutral_ground, breaker_output) VALUES (?, ?, ?, ?, ?, ?, ?)" + ); + $stmt->execute([$client_name, $address, $technician_name, $observations, $voltage, $phase_neutral_ground, $breaker_output]); + $installation_id = $pdo->lastInsertId(); + + // Handle multiple file uploads + if (isset($_FILES['images'])) { + $upload_dir = __DIR__ . '/assets/uploads/'; + if (!is_dir($upload_dir)) { + mkdir($upload_dir, 0775, true); + } + + $allowed_ext = ['jpg', 'jpeg', 'png', 'gif']; + + foreach ($_FILES['images']['tmp_name'] as $key => $tmp_name) { + if ($_FILES['images']['error'][$key] === UPLOAD_ERR_OK) { + $file_name = $_FILES['images']['name'][$key]; + $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); + + if (in_array($file_ext, $allowed_ext)) { + $new_file_name = time() . '_' . uniqid() . '_' . basename($file_name); + $dest_path = $upload_dir . $new_file_name; + + if (move_uploaded_file($tmp_name, $dest_path)) { + $image_path = 'assets/uploads/' . $new_file_name; + $img_stmt = $pdo->prepare("INSERT INTO installation_images (installation_id, image_path) VALUES (?, ?)"); + $img_stmt->execute([$installation_id, $image_path]); + } else { + throw new Exception('Failed to move uploaded file: ' . $file_name); + } + } else { + throw new Exception('Invalid file type: ' . $file_name); + } + } + } + } + + $pdo->commit(); $_SESSION['message'] = 'Installation registered successfully!'; $_SESSION['message_type'] = 'success'; - } catch (PDOException $e) { - error_log("Database error: " . $e->getMessage()); - $_SESSION['message'] = 'Failed to register installation. Please try again.'; + + } catch (Exception $e) { + if ($pdo->inTransaction()) { + $pdo->rollBack(); + } + error_log("Upload/Database error: " . $e->getMessage()); + $_SESSION['message'] = 'Failed to register installation: ' . $e->getMessage(); $_SESSION['message_type'] = 'danger'; } } header('Location: index.php'); -exit; \ No newline at end of file +exit; diff --git a/db/migrations/004_add_multiple_images_support.sql b/db/migrations/004_add_multiple_images_support.sql new file mode 100644 index 0000000..8325251 --- /dev/null +++ b/db/migrations/004_add_multiple_images_support.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `installation_images` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `installation_id` INT NOT NULL, + `image_path` VARCHAR(255) NOT NULL, + FOREIGN KEY (`installation_id`) REFERENCES `installations`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +ALTER TABLE `installations` DROP COLUMN `image_path`; diff --git a/index.php b/index.php index 2cbfa34..cb4aa0f 100644 --- a/index.php +++ b/index.php @@ -187,11 +187,16 @@ try { + prepare("SELECT image_path FROM installation_images WHERE installation_id = ? ORDER BY id ASC LIMIT 1"); + $img_stmt->execute([$inst['id']]); + $first_image = $img_stmt->fetchColumn(); + ?>