Show sourcecode
The following files exists in this folder. Click to view.
public_html/crumbs/admin/products/
addproduct.php
deleteproduct.php
editproduct.php
addproduct.php
145 lines UTF-8 Windows (CRLF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
<?php
$basePath = '../../';
$pageTitle = 'Skapa Produkt';
$activePage = 'addproduct';
// Handle form before header (need session for admin check within header)
session_start();
if (!isset($_SESSION['is_admin']) || $_SESSION['is_admin'] != 1) {
header('Location: ../../login.php');
die();
}
$message = null;
$messageClass = 'alert-warning';
$showMessage = false;
if (
isset($_POST['name']) && isset($_POST['price']) && isset($_POST['stock']) &&
!empty($_POST['name']) && !empty($_POST['price']) && !empty($_POST['stock'])
) {
$name = $_POST['name'];
$price = $_POST['price'];
$description = $_POST['description'];
$category = $_POST['category'];
$image_url = !empty($_POST['image_url']) ? $_POST['image_url'] : 'https://i0.wp.com/unleash-gods-dream.com/wp-content/uploads/2023/03/placeholder-image-blue-square.png';
$stock = $_POST['stock'];
$is_disabled = isset($_POST['is_disabled']) ? 1 : 0;
// SÄKERHET: Validera att pris och lager är positiva tal (klientsidan kan kringgås)
$errors = [];
if (!is_numeric($price) || $price < 0) {
$errors[] = "Priset måste vara ett positivt tal.";
}
if (!is_numeric($stock) || $stock < 0) {
$errors[] = "Lagersaldot måste vara ett positivt tal.";
}
if (empty($errors)) {
include('../../dbconnection.php');
if (!$dbconn) {
die("Connection failed: Can't connect to database.");
}
try {
$sql = "INSERT INTO products (name, price, description, category, image_url, stock, is_disabled)
VALUES (?, ?, ?, ?, ?, ?, ?)";
$stmt = $dbconn->prepare($sql);
$data = array($name, $price, $description, $category, $image_url, $stock, $is_disabled);
$stmt->execute($data);
$lastId = $dbconn->lastInsertId();
$messageClass = 'alert-success';
$message = "Produkt skapad! ID: " . (int)$lastId;
} catch (PDOException $e) {
// SÄKERHET: Visa inte detaljerade databasfel (kan avslöja intern information)
error_log("addproduct error: " . $e->getMessage());
$messageClass = 'alert-error';
$message = "Ett databasfel uppstod. Försök igen senare.";
}
$dbconn = null;
} else {
$messageClass = 'alert-error';
$message = implode(' ', $errors);
}
$showMessage = true;
}
include('../../includes/header.php');
?>
<div class="page-header">
<div class="page-header-text">
<h1>Skapa Produkt</h1>
<p>Lägg till en ny produkt i menyn.</p>
</div>
</div>
<?php if ($showMessage && $message): ?>
<div class="alert <?= $messageClass ?>"><?= $message ?></div>
<?php endif; ?>
<div class="card">
<h2><span class="material-symbols-rounded" style="font-size:20px; vertical-align:middle; margin-right:6px">add_box</span>Produktinformation</h2>
<form method="post" action="">
<table>
<tr>
<td>Namn *</td>
<td class="input-wrapper">
<input type="text" name="name" maxlength="32" required placeholder="Produktnamn">
<span class="char-count">32</span>
</td>
</tr>
<tr>
<td>Pris (SEK) *</td>
<td class="input-wrapper">
<input type="number" name="price" min="0" maxlength="4" step="0.01" required placeholder="0">
<span class="char-count">4</span>
</td>
</tr>
<tr>
<td>Beskrivning</td>
<td class="input-wrapper">
<textarea rows="5" style="resize: none;" name="description" id="description" maxlength="256" placeholder="Kort beskrivning"></textarea>
<span class="char-count">256</span>
</td>
</tr>
<tr>
<td>Kategori</td>
<td>
<select name="category" id="category">
<option value="none">Ingen</option>
<option value="beverage">Dryck</option>
<option value="food">Mat</option>
<option value="material">Material</option>
</select>
</td>
</tr>
<tr>
<td>Bild (URL)</td>
<td><input type="url" name="image_url" placeholder="https://..."></td>
</tr>
<tr>
<td>Lager *</td>
<td>
<input type="number" name="stock" maxlength="4" min="0" required placeholder="0">
<span class="char-count">4</span>
</td>
</tr>
<tr>
<td>Inaktiv</td>
<td><input type="checkbox" name="is_disabled"></td>
</tr>
<tr>
<td class="meta">* = Obligatoriskt</td>
<td>
<button type="submit" class="btn btn-success">
<span class="material-symbols-rounded">add</span>
Lägg till
</button>
</td>
</tr>
</table>
</form>
</div>
<?php include('../../includes/footer.php'); ?>