PHP 8.5.2
Preview: add-packages.php Size: 8.49 KB
/home/serveshikshafoundation/htdocs/serveshikshafoundation.org.in/admin/html/add-packages.php

<?php
include('auth.php');
include('connection.php');

// Check database connection
if (!$conn) {
    die("Database connection failed: " . mysqli_connect_error());
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Escape special characters to prevent SQL injection
    $category = mysqli_real_escape_string($conn, $_POST['category']);
    $package_name = mysqli_real_escape_string($conn, $_POST['package_name']);
    $description = mysqli_real_escape_string($conn, $_POST['description']);
    $rating = intval($_POST['rating']);
    $booking_link = mysqli_real_escape_string($conn, $_POST['booking_link']);

    // Image upload handling
    $target_dir = "assets/img/packages/"; // Ensure folder exists

    $target_file = $target_dir . basename($_FILES["package_image"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

    // Check if file is an actual image
    $check = getimagesize($_FILES["package_image"]["tmp_name"]);
    if ($check === false) {
        $_SESSION['error'] = "Error: File is not an image.";
        header("Location: " . $_SERVER['PHP_SELF']);
        exit();
    }

    // Allow certain file formats
    $allowed_types = ["jpg", "jpeg", "png", "gif", "avif", "webp", "svg"];
    if (!in_array($imageFileType, $allowed_types)) {
        $_SESSION['error'] = "Error: Only JPG, JPEG, PNG, and GIF files are allowed.";
        header("Location: " . $_SERVER['PHP_SELF']);
        exit();
    }

    // Move uploaded file
    if (!move_uploaded_file($_FILES["package_image"]["tmp_name"], $target_file)) {
        $_SESSION['error'] = "Error uploading image.";
        header("Location: " . $_SERVER['PHP_SELF']);
        exit();
    }

    // Insert into database
    $query = "INSERT INTO tour_packages (category,package_name, package_image, description, rating, booking_link)
              VALUES ('$category','$package_name', '$target_file', '$description', '$rating', '$booking_link')";

    if (mysqli_query($conn, $query)) {
        $_SESSION['success'] = "✅ Package added successfully!";
    } else {
        $_SESSION['error'] = "❌ Database Error: " . mysqli_error($conn);
    }

    // Redirect to the same page to show the message
    header("Location: " . $_SERVER['PHP_SELF']);
    exit();
}
?>

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Admin</title>
    <link rel="shortcut icon" type="image/png" href="../assets/images/logos/favicon.png" />
    <link rel="stylesheet" href="../assets/css/styles.min.css" />
</head>

<body>
    <!--  Body Wrapper -->
    <div class="page-wrapper" id="main-wrapper" data-layout="vertical" data-navbarbg="skin6" data-sidebartype="full"
        data-sidebar-position="fixed" data-header-position="fixed">

        <!-- Sidebar -->
        <?php include('aside.php') ?>

        <!--  Main Content -->
        <div class="body-wrapper">

            <!--  Header -->
            <?php include('header.php') ?>

            <div class="container-fluid">
                <!-- Display Success or Error Messages -->
                <?php if (isset($_SESSION['success'])): ?>
                    <div class="alert alert-success">
                        <?= $_SESSION['success'];
                        unset($_SESSION['success']); ?>
                    </div>
                <?php endif; ?>

                <?php if (isset($_SESSION['error'])): ?>
                    <div class="alert alert-danger">
                        <?= $_SESSION['error'];
                        unset($_SESSION['error']); ?>
                    </div>
                <?php endif; ?>
                <div class="container-fluid">
                    <form action="" method="POST" enctype="multipart/form-data">
                    
                    <div class="mb-3">
                            <label for="category" class="form-label">Category</label>
                            <input type="text" class="form-control" id="category" name="category" required>
                        </div>
                        <div class="mb-3">
                            <label for="package_name" class="form-label">Package Name</label>
                            <input type="text" class="form-control" id="package_name" name="package_name" required>
                        </div>

                        <div class="mb-3">
                            <label for="package_image" class="form-label">Upload Package Image</label>
                            <input type="file" class="form-control" id="package_image" name="package_image"
                                accept="image/*" required>
                        </div>

                        <div class="mb-3">
                            <label for="description" class="form-label">Package Description</label>
                            <textarea class="form-control" id="description" name="description" rows="3"
                                required></textarea>
                        </div>

                        <div class="mb-3">
                            <label for="rating" class="form-label">Rating (out of 5)</label>
                            <select class="form-control" id="rating" name="rating">
                                <option value="5">⭐⭐⭐⭐⭐</option>
                                <option value="4">⭐⭐⭐⭐</option>
                                <option value="3">⭐⭐⭐</option>
                                <option value="2">⭐⭐</option>
                                <option value="1">⭐</option>
                            </select>
                        </div>


                        <button type="submit" class="btn btn-primary">Add Package</button>
                    </form>
                </div>
            </div>

            <div class="container-fluid">
                <h3 class="mt-5">Existing Packages</h3>
                <div class="table-responsive">
                    <table class="table table-bordered w-100">
                        <thead>
                            <tr>
                                <th>Image</th>
                                <th>Category</th>
                                <th>Package Name</th>
                                <th>Description</th>
                                <th>Rating</th>
                                <!-- <th>Booking Link</th> -->
                                <th style="white-space: nowrap;">Actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php
                            $result = mysqli_query($conn, "SELECT * FROM tour_packages ORDER BY id DESC");
                            while ($row = mysqli_fetch_assoc($result)) { ?>
                                <tr>
                                    <td><img style="height:150px;width:100px;object-fit:cover;" src="<?= $row['package_image']; ?>" width="100"></td>
                                    <td><?= htmlspecialchars($row['category']); ?></td>
                                    <td><?= htmlspecialchars($row['package_name']); ?></td>
                                    <td><?= htmlspecialchars($row['description']); ?></td>
                                    <td><?= str_repeat("⭐", $row['rating']); ?></td>
                                    </td>
                                    <td class="text-center" style="white-space: nowrap;">
                                        <a href="edit-package.php?edit_id=<?= $row['id']; ?>"
                                            class="btn btn-warning btn-sm">Edit</a>
                                        <a href="delete-package.php?delete_id=<?= $row['id']; ?>"
                                            class="btn btn-danger btn-sm">Delete</a>
                                    </td>
                                </tr>
                            <?php } ?>
                        </tbody>
                    </table>
                </div>
            </div>

        </div>

        <script src="../assets/libs/jquery/dist/jquery.min.js"></script>
        <script src="../assets/libs/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
        <script src="../assets/js/sidebarmenu.js"></script>
        <script src="../assets/js/app.min.js"></script>
        <script src="../assets/libs/simplebar/dist/simplebar.js"></script>
</body>

</html>

Directory Contents

Dirs: 11 × Files: 30

Name Size Perms Modified Actions
- drwxr-xr-x 2025-04-05 16:58:42
Edit Download
assets DIR
- drwxr-xr-x 2025-04-05 16:58:42
Edit Download
baby-dec DIR
- drwxr-xr-x 2025-04-05 16:58:42
Edit Download
- drwxr-xr-x 2025-04-05 16:58:42
Edit Download
- drwxr-xr-x 2025-04-05 16:58:44
Edit Download
- drwxr-xr-x 2025-04-05 16:58:44
Edit Download
- drwxr-xr-x 2025-04-05 16:58:44
Edit Download
- drwxr-xr-x 2025-04-05 16:58:44
Edit Download
- drwxr-xr-x 2025-04-05 16:58:44
Edit Download
- drwxr-xr-x 2025-04-05 16:58:46
Edit Download
- drwxr-xr-x 2025-04-05 16:58:46
Edit Download
8.63 KB lrw-r----- 2025-04-06 01:10:32
Edit Download
8.49 KB lrw-r----- 2025-04-05 20:17:06
Edit Download
8.33 KB lrw-r----- 2025-04-01 18:04:14
Edit Download
4.67 KB lrw-r----- 2025-07-01 06:02:29
Edit Download
6.91 KB lrw-r----- 2025-04-07 09:05:32
Edit Download
4.59 KB lrw-r----- 2025-07-01 06:36:30
Edit Download
164 B lrw-r----- 2025-04-05 17:07:44
Edit Download
471 B lrw-r----- 2026-04-07 07:13:01
Edit Download
4.07 KB lrw-r----- 2025-04-07 18:20:40
Edit Download
1.62 KB lrw-r----- 2025-03-31 20:18:28
Edit Download
1.92 KB lrw-r----- 2025-04-01 00:02:56
Edit Download
1.93 KB lrw-r----- 2025-04-01 18:10:28
Edit Download
1.20 KB lrw-r----- 2025-04-02 21:38:00
Edit Download
1.94 KB lrw-r----- 2025-04-06 00:58:20
Edit Download
1.62 KB lrw-r----- 2025-07-01 06:05:36
Edit Download
1.67 KB lrw-r----- 2025-03-31 21:50:12
Edit Download
3.15 KB lrw-r----- 2025-04-02 22:26:14
Edit Download
5.43 KB lrw-r----- 2025-04-22 13:05:58
Edit Download
6.16 KB lrw-r----- 2025-04-05 20:16:08
Edit Download
6.18 KB lrw-r----- 2025-04-02 20:43:44
Edit Download
5.88 KB lrw-r----- 2025-04-02 21:46:38
Edit Download
3.17 KB lrw-r----- 2025-07-01 06:17:56
Edit Download
4.14 KB lrw-r----- 2025-03-31 22:30:04
Edit Download
551.14 KB lrw-r--r-- 2025-03-29 19:52:38
Edit Download
3.14 KB lrw-r----- 2025-06-28 23:18:18
Edit Download
4.67 KB lrw-r----- 2025-04-02 22:16:18
Edit Download
7.83 KB lrw-r----- 2025-04-05 23:49:56
Edit Download
3.15 KB lrw-r----- 2025-04-07 18:21:46
Edit Download
120 B lrw-r----- 2024-07-06 23:58:34
Edit Download
5.12 KB lrw-r----- 2025-03-31 22:33:26
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).