Visa Källkod

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

NamnTypStorlek
account.phpPHP Fil11.6 KB
admin.phpPHP Fil23.6 KB
authors.phpPHP Fil4.1 KB
book.phpPHP Fil5.9 KB
db_cnnt.phpPHP Fil407 B
header.phpPHP Fil1.7 KB
home.phpPHP Fil8.4 KB
index.phpPHP Fil5.3 KB
loan_handler.phpPHP Fil1.9 KB
manage_authors.phpPHP Fil4.7 KB
my_loans.phpPHP Fil6.9 KB
S.sqlSQL Fil3.3 KB
search.phpPHP Fil11 KB

my_loans.php

169 lines UTF-8 Unix (LF) - Type: PHP Fil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?php

session_start
();
require_once 
'db_cnnt.php';
global 
$pdo;

// Kontrollera att användaren är inloggad
if (!isset($_SESSION['user_id'])) {
    
header('Location: index.php?noaccess=1');
    exit;
}

// hämta det inloggade användaren ID från session
$user_id $_SESSION['user_id'];

//  Återlämning av bok
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['return_loan'])) {
    
$loan_id = (int)$_POST['loan_id'];
    
    
// Hämta låneinformation
    
$statement $pdo->prepare("SELECT exemplar_id, förfallodatum FROM lån WHERE lån_id = ? AND användare_id = ? AND återlämnad_datum IS NULL");
    
$statement->execute([$loan_id$user_id]);
    
$loan $statement->fetch();
    
    if (
$loan) {
        
// Beräkna förseningsavgift (10 SEK per dag)
        
$fee 0;
        
$due = new DateTime($loan['förfallodatum']);
        
$now = new DateTime();
        if (
$now $due) {
            
$diff $now->diff($due);
            
$fee $diff->days 10;
        }
        
        
// Uppdatera lån med återlämningsdatum och avgift
        
$pdo->prepare("UPDATE lån SET återlämnad_datum = NOW(), förseningsavgift = ? WHERE lån_id = ?")
            ->
execute([$fee$loan_id]);
            
        
// Markera exemplar som tillgängligt
        
$pdo->prepare("UPDATE exemplar SET status = 'available' WHERE exemplar_id = ?")
            ->
execute([$loan['exemplar_id']]);
            
        
$_SESSION['loan_success'] = $fee "Bok återlämnad! Förseningsavgift: {$fee} SEK" "Bok återlämnad!";
        
header('Location: my_loans.php');
        exit;
    } else {
        
// Om lånet inte finns eller redan  inlämnat
        
$_SESSION['loan_error'] = "Lånet kunde inte hittas eller är redan återlämnat.";
        
header('Location: my_loans.php');
        exit;
    }
}

// Förlängning av lån
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['extend_loan'])) {
    
$loan_id = (int)$_POST['loan_id'];
    
    
// Hämta lånet och kontrollera antal tidigare förlängningar
    
$statement $pdo->prepare("SELECT lån_id, förlängningar FROM lån WHERE lån_id = ? AND användare_id = ? AND återlämnad_datum IS NULL");
    
$statement->execute([$loan_id$user_id]);
    
$loan $statement->fetch();
    
    if (
$loan) {
        
// Max 2 förlängningar tillåtna
        
if ($loan['förlängningar'] >= 2) {
            
$_SESSION['loan_error'] = "Du kan bara förlänga ett lån 2 gånger!";
        } else {
            
// Förläng med 14 dagar
            
$pdo->prepare("UPDATE lån SET förfallodatum = DATE_ADD(förfallodatum, INTERVAL 14 DAY), förlängningar = förlängningar + 1 WHERE lån_id = ?")
                ->
execute([$loan_id]);
            
$remaining - ($loan['förlängningar'] + 1);
            
$_SESSION['loan_success'] = "Lånetiden förlängd med 14 dagar! (" $remaining " förlängningar kvar)";
        }
        
header('Location: my_loans.php');
        exit;
    } else {
        
$_SESSION['loan_error'] = "Lånet kunde inte hittas eller är redan återlämnat.";
        
header('Location: my_loans.php');
        exit;
    }
}

// Inkludera header 
include 'header.php';

$message '';
$message_type 'success';

// Kontrollera om det finns success-meddelande
if (isset($_SESSION['loan_success'])) {
    
$message $_SESSION['loan_success'];
    
$message_type 'success';
    unset(
$_SESSION['loan_success']);
}

// Kontrollera om det finns felmeddelande
if (isset($_SESSION['loan_error'])) {
    
$message $_SESSION['loan_error'];
    
$message_type 'error';
    unset(
$_SESSION['loan_error']);
}

// Hämta användarens aktiva lån 
$statement $pdo->prepare("SELECT l.lån_id, l.exemplar_id, b.titel, b.bok_id, f.namn AS författare, f.författare_id, l.lånedatum, l.förfallodatum, l.återlämnad_datum, l.förseningsavgift, l.förlängningar FROM lån l JOIN exemplar e ON l.exemplar_id = e.exemplar_id JOIN bok b ON e.bok_id = b.bok_id JOIN författare f ON b.författare_id = f.författare_id WHERE l.användare_id = ? AND l.återlämnad_datum IS NULL ORDER BY l.lånedatum DESC");
$statement->execute([$user_id]);
$loans $statement->fetchAll();
?>
<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mina lån - Bibliotek</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
    <h1>Mina lån</h1>
    <?php if ($message): ?>
        <div class="notice <?= $message_type ?>"><?= htmlspecialchars($message?></div>
    <?php endif; ?>
    <table>
        <thead>
            <tr>
                <th>Boktitel</th>
                <th>Författare</th>
                <th>Lånedatum</th>
                <th>Förfallodatum</th>
                <th>Återlämnad</th>
                <th>Förseningsavgift</th>
                <th>Åtgärder</th>
            </tr>
        </thead>
        <tbody>
        <!--lista låner-->
            <?php foreach ($loans as $loan): ?>
                <tr>
                    <td><a href="book.php?id=<?= $loan['bok_id'?>"><?= htmlspecialchars($loan['titel']) ?></a></td>
                    <td><a href="authors.php?id=<?= $loan['författare_id'?>"><?= htmlspecialchars($loan['författare']) ?></a></td>
                    <td><?= htmlspecialchars($loan['lånedatum']) ?></td>
                    <td><?= htmlspecialchars($loan['förfallodatum']) ?></td>
                    <td><?= $loan['återlämnad_datum'] ? htmlspecialchars($loan['återlämnad_datum']) : 'Ej återlämnad' ?></td>
                    <td><?= $loan['förseningsavgift'] ? htmlspecialchars($loan['förseningsavgift']) . ' SEK' '-' ?></td>
                    <td>
                        <?php if (!$loan['återlämnad_datum']): ?>
                            <form method="post">
                                <input type="hidden" name="loan_id" value="<?= $loan['lån_id'?>">
                                <?php if ($loan['förlängningar'] >= 2): ?>
                                    <button type="button" disabled title="Max 2 förlängningar">Förläng (0/2)</button>
                                <?php else: ?>
                                    <button type="submit" name="extend_loan" onclick="return confirm('Förlänga lånet med 14 dagar?')">Förläng (<?= 2 $loan['förlängningar'?>/2)</button>
                                <?php endif; ?>
                            </form>
                            <form method="post">
                                <input type="hidden" name="loan_id" value="<?= $loan['lån_id'?>">
                                <button type="submit" name="return_loan" value="1" onclick="return confirm('Återlämna denna bok?')">Återlämna</button>
                            </form>
                        <?php else: ?>
                            <span class="loan-completed">Avslutad</span>
                        <?php endif; ?>
                    </td>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
</div>
</body>
</html>