:: **Zploit** v1.0 | Current Path: **/home/kreativepixelz/finartindia.com/admin/**
:: Editing File: products_add.php
<?php require_once 'db.php'; require_once 'session.php'; include "header.php"; // Fetch all Collection Groups for the dropdown $collections = []; $sql_collections = "SELECT id, name FROM collectiongroups ORDER BY name ASC"; $result_collections = mysqli_query($conn, $sql_collections); if ($result_collections) { $collections = mysqli_fetch_all($result_collections, MYSQLI_ASSOC); } ?> <div class="page-content-wrapper"> <div class="page-content"> <div class="page-breadcrumb d-none d-sm-flex align-items-center mb-3"> <div class="breadcrumb-title pe-3">Products</div> <div class="ps-3"> <nav aria-label="breadcrumb"> <ol class="breadcrumb mb-0 p-0 align-items-center"> <li class="breadcrumb-item"><a href="dashboard.php"><ion-icon name="home-outline"></ion-icon></a> </li> <li class="breadcrumb-item active" aria-current="page">Add New Product</li> </ol> </nav> </div> </div> <?php // Display session messages (success/error) if (isset($_SESSION['error'])): ?> <div class="alert alert-danger"><?php echo htmlspecialchars($_SESSION['error']); unset($_SESSION['error']); ?></div> <?php endif; ?> <?php if (isset($_SESSION['success'])): ?> <div class="alert alert-success"><?php echo htmlspecialchars($_SESSION['success']); unset($_SESSION['success']); ?></div> <?php endif; ?> <div class="card"> <div class="card-header"> <h6 class="mb-0">Add New Product</h6> </div> <div class="card-body"> <form action="products_save.php" method="POST" enctype="multipart/form-data"> <div class="row"> <div class="mb-3 col-sm-6"> <label class="form-label">Select Collection Group <span class="text-danger">*</span></label> <select class="form-control" name="collectiongroups_id" required> <option value="">-- Select Group --</option> <?php foreach ($collections as $collection): ?> <option value="<?php echo htmlspecialchars($collection['id']); ?>"> <?php echo htmlspecialchars($collection['name']); ?> </option> <?php endforeach; ?> </select> </div> <div class="mb-3 col-sm-6"> <label class="form-label">Product Name / Subheading <span class="text-danger">*</span></label> <input type="text" class="form-control" name="subheading" maxlength="100" > </div> <div class="mb-3 col-sm-6"> <label class="form-label">URL Slug (For Image Folder)</label> <input type="text" class="form-control" name="url" maxlength="150" required> <small class="form-text text-muted">A short, hyphenated version of the name (e.g., 'product-x-model').</small> </div> <div class="mb-3 col-sm-6"> <label class="form-label">Image Upload <span class="text-danger">*</span></label> <input type="file" class="form-control" name="image" accept="image/*"> <small class="form-text text-muted">Max file size 2MB. Recommended formats: JPG, PNG.</small> </div> <!--<div class="mb-3 col-sm-4"> <label class="form-label">Sort Order </label> <input type="number" class="form-control" name="sort_order" value="0"> </div> --> <div class="mb-3 col-sm-12"> <label class="form-label">Product Description (Content) <span class="text-danger">*</span></label> <textarea class="form-control" name="content" rows="6" id="content"></textarea> </div> <div class="mb-3 col-sm-12"> <label class="form-label">Specifications / Features <span class="text-danger">*</span></label> <textarea class="form-control" name="spefication" rows="6" id="specifications"></textarea> </div> <div class="col-12 mt-4"> <button type="submit" class="btn btn-primary">Save New Product</button> <a href="products.php" class="btn btn-warning">Cancel</a> </div> </div> </form> </div> </div> </div> </div> <!-- <script src="https://cdn.tiny.cloud/1/soq7pnew77x9lw0hs9gz310711p8608sw50b9ra1ml2vwi4a/tinymce/7/tinymce.min.js" referrerpolicy="origin"></script> <script> // Initialize the TinyMCE editor tinymce.init({ // Selects both the 'content' and 'spefication' textareas by their name attribute selector: 'textarea[name="content"], textarea[name="spefication"]', height: 300, // Essential plugins for functionality plugins: 'advlist autolink lists link image charmap preview anchor searchreplace visualblocks code fullscreen insertdatetime media table help wordcount', // Define the visible toolbar buttons toolbar: 'undo redo | formatselect | bold italic backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | help | code', // This setup ensures the editor content is saved back to the textarea // every time content changes, so PHP receives the correct HTML on form submit. setup: function (editor) { editor.on('change', function () { editor.save(); }); } }); </script> --> <!-- CKEditor 5 CDN --> <script src="https://cdn.ckeditor.com/ckeditor5/41.4.2/classic/ckeditor.js"></script> <script> // Auto-generate URL slug from Product Name/Subheading document.addEventListener('DOMContentLoaded', function() { const nameInput = document.querySelector('input[name="subheading"]'); const slugInput = document.querySelector('input[name="url"]'); nameInput.addEventListener('input', function() { let slug = nameInput.value .toLowerCase() // lowercase .trim() // remove extra spaces .replace(/[^a-z0-9\s-]/g, '') // remove special chars .replace(/\s+/g, '-') // spaces to hyphens .replace(/-+/g, '-'); // avoid multiple hyphens slugInput.value = slug; }); }); </script> <script> ClassicEditor .create(document.querySelector('#content')) .catch(error => { console.error(error); }); ClassicEditor .create(document.querySelector('#specifications')) .catch(error => { console.error(error); }); </script> <style> .ck-editor__editable_inline { min-height: 200px; } </style> <?php // Close database connection mysqli_close($conn); include "footer.php"; ?>