mirror of
https://codeberg.org/ThisIsMiseryy/techstore
synced 2026-05-14 12:42:04 +00:00
Implementazione aggiunta prodotto in pagina admin
This commit is contained in:
@@ -59,6 +59,37 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save'])) {
|
||||
exit();
|
||||
}
|
||||
|
||||
// Gestione aggiunta nuovo prodotto
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['add'])) {
|
||||
$name = $_POST['name'];
|
||||
$description = $_POST['description'];
|
||||
$category_id = $_POST['category_id'];
|
||||
$price = $_POST['price'];
|
||||
$stock = $_POST['stock'];
|
||||
$image_path = '';
|
||||
|
||||
if (isset($_FILES['image']) && $_FILES['image']['error'] == 0) {
|
||||
$target_dir = "../img/";
|
||||
$image_name = basename($_FILES["image"]["name"]);
|
||||
$target_file = $target_dir . $image_name;
|
||||
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
|
||||
if (in_array($imageFileType, ['jpg', 'png', 'jpeg', 'gif'])) {
|
||||
if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
|
||||
$image_path = $image_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sql_insert = "INSERT INTO Products (ProductName, Description, CategoryID, Price, StockQuantity, ImagePath) VALUES (?, ?, ?, ?, ?, ?)";
|
||||
$stmt_insert = $conn->prepare($sql_insert);
|
||||
$stmt_insert->bind_param("ssidis", $name, $description, $category_id, $price, $stock, $image_path);
|
||||
$stmt_insert->execute();
|
||||
$stmt_insert->close();
|
||||
|
||||
header("Location: manageProducts.php");
|
||||
exit();
|
||||
}
|
||||
|
||||
// Ottieni categorie
|
||||
$categories = [];
|
||||
$sql_cat = "SELECT CategoryID, Name FROM Categories";
|
||||
@@ -91,11 +122,20 @@ $stmt_prod->close();
|
||||
<link rel="stylesheet" href="/assets/style.css">
|
||||
<script src="/assets/js/cart.js"></script>
|
||||
<script>
|
||||
|
||||
function adjustStock(input, delta) {
|
||||
var value = parseInt(input.value) + delta;
|
||||
if (value < 0) value = 0;
|
||||
input.value = value;
|
||||
}
|
||||
|
||||
function toggleAddProductPanel() {
|
||||
var panel = document.getElementById('add-product-panel');
|
||||
var button = document.getElementById('toggle-add-product');
|
||||
if (!panel || !button) return;
|
||||
var collapsed = panel.classList.toggle('collapsed');
|
||||
button.textContent = collapsed ? 'Nuovo prodotto' : 'Chiudi aggiunta prodotto';
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
@@ -126,6 +166,41 @@ $stmt_prod->close();
|
||||
</div>
|
||||
<div class="my-container">
|
||||
<h1>Gestione Prodotti</h1>
|
||||
<button id="toggle-add-product" class="toggle-button" type="button" onclick="toggleAddProductPanel()">Nuovo prodotto</button>
|
||||
<section id="add-product-panel" class="add-product-panel collapsed">
|
||||
<h2>Aggiungi nuovo prodotto</h2>
|
||||
<form class="add-product-form" action="" method="post" enctype="multipart/form-data">
|
||||
<div class="form-row">
|
||||
<label for="new-name">Nome</label>
|
||||
<input id="new-name" class="product-name-input" type="text" name="name" required>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="new-description">Descrizione</label>
|
||||
<textarea id="new-description" class="product-description-textarea" name="description" required></textarea>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="new-category">Categoria</label>
|
||||
<select id="new-category" class="product-category-select" name="category_id" required>
|
||||
<?php foreach ($categories as $cat): ?>
|
||||
<option value="<?php echo $cat['CategoryID']; ?>"><?php echo htmlspecialchars($cat['Name']); ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="new-price">Prezzo</label>
|
||||
<input id="new-price" class="product-price-input" type="number" name="price" step="0.01" required>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="new-stock">Stock</label>
|
||||
<input id="new-stock" class="stock-input" type="number" name="stock" min="0" value="0" required>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="new-image">Immagine</label>
|
||||
<input id="new-image" class="product-image-input" type="file" name="image" accept="image/*">
|
||||
</div>
|
||||
<button class="save-button" type="submit" name="add">Aggiungi prodotto</button>
|
||||
</form>
|
||||
</section>
|
||||
<table class="product-table">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -279,6 +279,54 @@ form button:hover {
|
||||
background-color: #f7f9fb;
|
||||
}
|
||||
|
||||
.add-product-panel {
|
||||
margin-bottom: 24px;
|
||||
padding: 18px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 8px;
|
||||
background-color: #fdfdfd;
|
||||
}
|
||||
|
||||
.add-product-panel h2 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px;
|
||||
color: #333;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.add-product-form {
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.add-product-form .form-row {
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.add-product-form label {
|
||||
font-weight: 600;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.toggle-button {
|
||||
padding: 10px 16px;
|
||||
background-color: #17a2b8;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.toggle-button:hover {
|
||||
background-color: #117a8b;
|
||||
}
|
||||
|
||||
.add-product-panel.collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.product-name-input,
|
||||
.product-description-textarea,
|
||||
.product-category-select,
|
||||
|
||||
Reference in New Issue
Block a user