Webbserver - Love Blomberg

Show sourcecode

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

public_html/crumbs/admin/users/

adduser.php
deleteuser.php
edituser.php

adduser.php

143 lines UTF-8 Windows (CRLF)
<?php
$basePath 
'../../';
$pageTitle 'Skapa Användare';
$activePage 'adduser';

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['username']) && isset($_POST['password']) &&
  !empty(
$_POST['username']) && !empty($_POST['password'])
) {
  
$username trim($_POST['username']);
  
$password $_POST['password'];
  
$is_admin = isset($_POST['is_admin']) ? 0;
  
$fullname trim($_POST['fullname'] ?? '');
  
$email trim($_POST['email'] ?? '');
  
$phone trim($_POST['phone'] ?? '');

  
// Validera indata innan vi fortsätter
  
$errors = [];
  if (
strlen($password) < 4) {
    
$errors[] = "Lösenordet måste vara minst 4 tecken.";
  }
  if (!empty(
$email) && !filter_var($emailFILTER_VALIDATE_EMAIL)) {
    
$errors[] = "Ogiltig e-postadress.";
  }

  if (empty(
$errors)) {
    include(
'../../dbconnection.php');
    if (!
$dbconn) {
      die(
"Connection failed: Can't connect to database.");
    }
    try {
      
// Kontrollera om användarnamnet redan är taget
      
$checkStmt $dbconn->prepare("SELECT user_id FROM users WHERE username = ?");
      
$checkStmt->execute([$username]);
      if (
$checkStmt->fetch()) {
        
$errors[] = "Användarnamnet är redan taget.";
      } else {
        
$passwordHash password_hash($passwordPASSWORD_DEFAULT);
        
$sql "INSERT INTO users (username, password, is_admin, fullname, email, phone) VALUES (?, ?, ?, ?, ?, ?)";
        
$stmt $dbconn->prepare($sql);
        
$stmt->execute([$username$passwordHash$is_admin$fullname$email$phone]);

        
$lastId $dbconn->lastInsertId();
        
$messageClass 'alert-success';
        
$message "Användare skapad! ID: " . (int)$lastId;
      }
    } catch (
PDOException $e) {
      
// Logga det riktiga felet men visa ett generiskt meddelande för användaren
      
error_log("adduser error: " $e->getMessage());
      
$messageClass 'alert-error';
      
$message "Ett databasfel uppstod. Försök igen senare.";
    }
    
$dbconn null;
  }

  if (!empty(
$errors)) {
    
$messageClass 'alert-error';
    
$message implode(' '$errors);
  }
  
$showMessage true;
}

include(
'../../includes/header.php');
?>

<div class="page-header">
  <div class="page-header-text">
    <h1>Skapa Användare</h1>
    <p>Lägg till ett nytt användarkonto.</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">person_add</span>Användaruppgifter</h2>
  <form method="post" action="">
    <table>
      <tr>
        <td>Användarnamn *</td>
        <td class="input-wrapper">
          <input type="text" name="username" maxlength="32" required placeholder="Användarnamn">
          <span class="char-count">32</span>
        </td>
      </tr>
      <tr>
        <td>Lösenord *</td>
        <td class="input-wrapper">
          <input type="password" name="password" maxlength="32" required placeholder="Lösenord">
          <span class="char-count">32</span>
        </td>
      </tr>
      <tr>
        <td>Fullständigt namn</td>
        <td class="input-wrapper">
          <input type="text" name="fullname" maxlength="64" placeholder="Förnamn Efternamn">
          <span class="char-count">64</span>
        </td>
      </tr>
      <tr>
        <td>E-Post</td>
        <td class="input-wrapper">
          <input type="email" name="email" maxlength="64" placeholder="namn@exempel.se">
          <span class="char-count">64</span>
        </td>
      </tr>
      <tr>
        <td>Telefon</td>
        <td class="input-wrapper">
          <input type="tel" name="phone" maxlength="20" placeholder="+46 70 123 45 78">
          <span class="char-count">20</span>
        </td>
      </tr>
      <tr>
        <td>Admin</td>
        <td><input type="checkbox" name="is_admin"></td>
      </tr>
      <tr>
        <td class="meta">* = Obligatoriskt</td>
        <td>
          <button type="submit" class="btn btn-success">
            <span class="material-symbols-rounded">person_add</span>
            Skapa
          </button>
        </td>
      </tr>
    </table>
  </form>
</div>

<?php include('../../includes/footer.php'); ?>