Webbserver - Love Blomberg

Show sourcecode

The following files exists in this folder. Click to view.

public_html/crumbs/

.gitignore
admin/
config.php
createtable.php
crumbs_design_system.html
dbconnection.php
icons/
includes/
index.php
js/
login.php
logout.php
order/
register.php
style/

createtable.php

110 lines UTF-8 Windows (CRLF)
<?php
// SÄKERHET: Kräv admin-inloggning för att komma åt denna sida (förhindrar att vem som helst kan radera databasen)
session_start();
if (!isset(
$_SESSION['is_admin']) || $_SESSION['is_admin'] != 1) {
  
http_response_code(403);
  die(
"Åtkomst nekad. Endast admin kan använda denna sida.");
}

include(
'dbconnection.php');
if (!
$dbconn) {
  die(
"Connection failed: Can't connect to database.");
}
try {
  
// Drop all tables and recreate if reset button was clicked
  
if (isset($_POST['reset'])) {
    
$dbconn->exec("SET FOREIGN_KEY_CHECKS = 0");
    
$dbconn->exec("DROP TABLE IF EXISTS order_items");
    
$dbconn->exec("DROP TABLE IF EXISTS orders");
    
$dbconn->exec("DROP TABLE IF EXISTS products");
    
$dbconn->exec("DROP TABLE IF EXISTS users");
    
$dbconn->exec("SET FOREIGN_KEY_CHECKS = 1");
    echo 
"All tables dropped. Recreating...<br><br>";
  }
  
// Skapa users table
  
$sql "CREATE TABLE IF NOT EXISTS users (
    user_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    username VARCHAR(32) NOT NULL UNIQUE,
    fullname VARCHAR(64),
    password VARCHAR(255) NOT NULL,
    email VARCHAR(64) NOT NULL UNIQUE,
    phone VARCHAR(64),
    is_admin BOOLEAN,
    last_login TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )"
;

  
// use exec() because no results are returned
  
$dbconn->exec($sql);
  echo 
"Users table created successfully. <br>";

  
// Insert admin user endast om den inte finns
  
$stmt $dbconn->query("SELECT COUNT(*) FROM users WHERE user_id = 1");
  
$adminExists = (int)$stmt->fetchColumn() > 0;
  if (!
$adminExists) {
    
$adminHash password_hash('admin123'PASSWORD_DEFAULT);
    
$sql "INSERT INTO users (username, fullname, password, email, is_admin) VALUES ('admin', 'Administrator', '$adminHash', 'admin@admin.se', 1)";
    
$dbconn->exec($sql);
    echo 
"Admin user created successfully. <br>";
  } else {
    echo 
"Admin user already exists. <br>";
  }

  
// Skapa orders table
  
$sql "CREATE TABLE IF NOT EXISTS orders (
    order_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    user_id INT(6) UNSIGNED NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
    order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    total_price DECIMAL(8,2) NOT NULL,
    payment_method VARCHAR(16),
    is_paid BOOLEAN,
    status VARCHAR(32) DEFAULT 'pending',
    custom_instructions VARCHAR(256)
    )"
;

  
// use exec() because no results are returned
  
$dbconn->exec($sql);
  echo 
"Orders table created successfully. <br>";

  
// Skapa products table
  
$sql "CREATE TABLE IF NOT EXISTS products (
    product_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(64) NOT NULL,
    price DECIMAL(6) NOT NULL,
    description VARCHAR(128),
    category VARCHAR(16),
    image_url VARCHAR(255),
    stock INT(6) NOT NULL,
    is_disabled BOOLEAN
    )"
;

  
// use exec() because no results are returned
  
$dbconn->exec($sql);
  echo 
"Products table created successfully. <br>";

  
// Skapa order_items table
  
$sql "CREATE TABLE IF NOT EXISTS order_items (
    order_item_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    order_id INT(6) UNSIGNED NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE,
    product_id INT(6) UNSIGNED NOT NULL,
    FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE,
    amount INT(6) NOT NULL,
    custom_text VARCHAR(128)
    )"
;

  
// use exec() because no results are returned
  
$dbconn->exec($sql);
  echo 
"Order items table created successfully. <br>";
} catch (
PDOException $e) {
  
// SÄKERHET: Visa inte detaljerade databasfel för användaren (kan avslöja intern information)
  
error_log("createtable error: " $e->getMessage());
  echo 
"Ett databasfel uppstod. Kontrollera serverloggen.";
}

//Rensa kopplingen till databasen
$dbconn null;
?>
<form method="post">
  <button type="submit" name="reset" onclick="return confirm('Are you sure? This will delete all data.')">Reset (drop &amp; recreate all tables)</button>
</form>