The following files exist in this folder. Click to view.
| Namn | Typ | Storlek |
|---|---|---|
| actions.php | PHP Fil | 7.9 KB |
| admin.php | PHP Fil | 13.7 KB |
| auth.php | PHP Fil | 4.5 KB |
| change_password.php | PHP Fil | 4.1 KB |
| check_login.php | PHP Fil | 911 B |
| index.php | PHP Fil | 4 KB |
| json_store.php | PHP Fil | 2.1 KB |
| transactions.json | JSON Fil | 4.6 KB |
| users.json | JSON Fil | 1.5 KB |
change_password.php128 lines UTF-8 Windows (CRLF) - Type: PHP Fil123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
<?php
session_start();
// Sätt lokal tidszon
if (function_exists('date_default_timezone_set')) {
@date_default_timezone_set('Europe/Stockholm');
}
// inkludera de filer
require_once 'check_login.php'; // kontrollera om användaren är inloggad
require_once 'json_store.php';
// Om formuläret skickats via POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 1) Läs in lösenordsfält via POST
$currentPassword = $_POST['current_password'] ?? '';
$newPassword = $_POST['new_password'] ?? '';
$confirmPassword = $_POST['confirm_password'] ?? '';
// 2) Validering; kontrollera att alla fält är ifyllda
if (empty($currentPassword) || empty($newPassword) || empty($confirmPassword)) {
header("Location: change_password.php?error=empty");
exit;
}
// Kontrollera att nytt lösenord matchar bekräftelsen
if ($newPassword !== $confirmPassword) {
header("Location: change_password.php?error=mismatch");
exit;
}
// 3) Hämta aktuell användare från session och users.json
$uname = $_SESSION['username'] ?? null;
if (!$uname) {
header("Location: index.php?noaccess=1");
exit;
}
$users = load_users();
$foundIdx = null;
// Leta upp aktuell användare i arrayen
foreach ($users as $index => $user) {
if (($user['username'] ?? null) === $uname) {
$foundIdx = $index;
break;
}
}
if ($foundIdx === null) {
header("Location: index.php?noaccess=1");
exit;
}
$user = $users[$foundIdx];
// 4) Verifiera nuvarande lösenord
if (!isset($user['password']) || !password_verify($currentPassword, $user['password'])) {
header("Location: change_password.php?error=wrong");
exit;
}
// 5) Hasha och spara nytt lösenord i users.json
$hashedPassword = password_hash($newPassword, PASSWORD_BCRYPT);
$users[$foundIdx]['password'] = $hashedPassword;
if (!save_users($users)) {
header("Location: change_password.php?error=unknown");
exit;
}
// 6) Ta bort ev. flagga (om den finns i sessionen)
unset($_SESSION['must_change_password']);
// lyckad ändring > skicka till admin.php
header("Location: admin.php?success=password_changed");
exit;
}
// Kontrollera om lösenordsbyte är obligatoriskt (flagga i GET eller session)
$isRequired = isset($_GET['required']) || isset($_SESSION['must_change_password']);
?>
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ändra lösenord</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="pwchange-wrap">
<h2>Ändra lösenord</h2>
<?php if ($isRequired): ?>
<div class="notice warning">
Du måste byta lösenord innan du kan fortsätta.
</div>
<?php endif; ?>
<?php if (isset($_GET['error'])): ?>
<div class="notice error">
<?php
if ($_GET['error'] === 'empty') {
echo "Fyll i alla fält!";
} elseif ($_GET['error'] === 'mismatch') {
echo "Nya lösenorden matchar inte!";
} elseif ($_GET['error'] === 'wrong') {
echo "Felaktigt nuvarande lösenord!";
} else {
echo "Ett fel uppstod. Försök igen.";
}
?>
</div>
<?php endif; ?>
<form method="post">
<input type="password" name="current_password" placeholder="Nuvarande lösenord" required>
<input type="password" name="new_password" placeholder="Nytt lösenord" required>
<input type="password" name="confirm_password" placeholder="Bekräfta nytt lösenord" required>
<button type="submit">Ändra lösenord</button>
</form>
<?php if (!$isRequired): ?>
<p style="text-align: center; margin-top: 15px;">
<a href="admin.php" style="color: #3b82f6; text-decoration: none;">← Tillbaka till kontrollpanelen</a>
</p>
<?php endif; ?>
</div>
</body>
</html>