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

search.php

241 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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
<?php

include 'header.php';
require_once 
'db_cnnt.php';
global 
$pdo;

// Visa meddelanden från session
if (isset($_SESSION['loan_success'])) {
    
$success_message $_SESSION['loan_success'];
    unset(
$_SESSION['loan_success']);
}
if (isset(
$_SESSION['loan_error'])) {
    
$error_message $_SESSION['loan_error'];
    unset(
$_SESSION['loan_error']);
}

// Hämta sökparametrar från URL
$query trim($_GET['q'] ?? ''); //sök sträng
$search_type $_GET['type'] ?? 'all'// allt, titel, författare, isbn

$results = [];
$search_performed false;

// Gör sökning om query finns
if (!empty($query)) {
    
$search_performed true;
    
    
// Skapa sökpaeameter öfr LIKE (wildcards)
    
$search_param '%' $query '%';
    
    
// anpassa SQL-frågan baserat på söktypen
    
if ($search_type === 'title') {
        
// Sök endast i boktitel
        
$sql "SELECT b.bok_id, b.titel, f.namn AS författare, f.författare_id, g.namn AS genre, 
                s.namn AS språk, b.isbn, b.beskrivning, b.cover_url,
                (SELECT COUNT(*) FROM exemplar WHERE bok_id = b.bok_id AND status = 'available') AS available_exemplar
                FROM bok b
                LEFT JOIN författare f ON b.författare_id = f.författare_id
                LEFT JOIN genre g ON b.genre_id = g.genre_id
                LEFT JOIN språk s ON b.språk_id = s.språk_id
                WHERE b.titel LIKE ?
                ORDER BY b.titel"
;
        
$statement $pdo->prepare($sql);
        
$statement->execute([$search_param]);
    } elseif (
$search_type === 'author') {
        
// Sök endast i författarnamn
        
$sql "SELECT b.bok_id, b.titel, f.namn AS författare, f.författare_id, g.namn AS genre, 
                s.namn AS språk, b.isbn, b.beskrivning, b.cover_url,
                (SELECT COUNT(*) FROM exemplar WHERE bok_id = b.bok_id AND status = 'available') AS available_exemplar
                FROM bok b
                LEFT JOIN författare f ON b.författare_id = f.författare_id
                LEFT JOIN genre g ON b.genre_id = g.genre_id
                LEFT JOIN språk s ON b.språk_id = s.språk_id
                WHERE f.namn LIKE ?
                ORDER BY f.namn, b.titel"
;
        
$statement $pdo->prepare($sql);
        
$statement->execute([$search_param]);
    } elseif (
$search_type === 'isbn') {
        
// Sök endast i ISBN-nummer
        
$sql "SELECT b.bok_id, b.titel, f.namn AS författare, f.författare_id, g.namn AS genre, 
                s.namn AS språk, b.isbn, b.beskrivning, b.cover_url,
                (SELECT COUNT(*) FROM exemplar WHERE bok_id = b.bok_id AND status = 'available') AS available_exemplar
                FROM bok b
                LEFT JOIN författare f ON b.författare_id = f.författare_id
                LEFT JOIN genre g ON b.genre_id = g.genre_id
                LEFT JOIN språk s ON b.språk_id = s.språk_id
                WHERE b.isbn LIKE ?
                ORDER BY b.titel"
;
        
$statement $pdo->prepare($sql);
        
$statement->execute([$search_param]);
    } else { 
        
// 'allt' - Sök i titel, författare och ISBN samtidigt
        
$sql "SELECT b.bok_id, b.titel, f.namn AS författare, f.författare_id, g.namn AS genre, 
                s.namn AS språk, b.isbn, b.beskrivning, b.cover_url,
                (SELECT COUNT(*) FROM exemplar WHERE bok_id = b.bok_id AND status = 'available') AS available_exemplar
                FROM bok b
                LEFT JOIN författare f ON b.författare_id = f.författare_id
                LEFT JOIN genre g ON b.genre_id = g.genre_id
                LEFT JOIN språk s ON b.språk_id = s.språk_id
                WHERE b.titel LIKE ? OR f.namn LIKE ? OR b.isbn LIKE ?
                ORDER BY 
                    CASE 
                        WHEN b.titel LIKE ? THEN 1
                        WHEN f.namn LIKE ? THEN 2
                        WHEN b.isbn LIKE ? THEN 3
                        ELSE 4
                    END,
                    b.titel"
;

        
$statement $pdo->prepare($sql);
        
// Skicka samma sökparameter flera gånger för LIKE i alla kolumner
        
$statement->execute([$search_param$search_param$search_param$search_param$search_param$search_param]);
    }
    
// hämta alla matchande rader från db som en array
    
$results $statement->fetchAll();
}
?>
<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sök böcker - Bibliotek</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
    <h1>Sök böcker</h1>
    
    <?php if (isset($success_message)): ?>
        <div class="notice success"><?= htmlspecialchars($success_message?></div>
    <?php endif; ?>
    
    <?php if (isset($error_message)): ?>
        <div class="notice error"><?= htmlspecialchars($error_message?></div>
    <?php endif; ?>
    
    <form method="get" class="search-form">
        <input type="text" 
               name="q" 
               placeholder="Sök efter titel, författare, ISBN..." 
               value="<?= htmlspecialchars($query?>"
               required
               autofocus>
        
        <select name="type">
            <option value="all" <?= $search_type === 'all' 'selected' '' ?>>Sök i allt</option>
            <option value="title" <?= $search_type === 'title' 'selected' '' ?>>Endast titel</option>
            <option value="author" <?= $search_type === 'author' 'selected' '' ?>>Endast författare</option>
            <option value="isbn" <?= $search_type === 'isbn' 'selected' '' ?>>Endast ISBN</option>
        </select>
        
        <button type="submit">Sök</button>
    </form>
    
    <?php if ($search_performed): ?>
        <div class="search-results">
            <h2>Sökresultat för "<?= htmlspecialchars($query?>"</h2>
            <p><?= count($results?> bok<?= count($results) !== 'er' '' ?> hittades</p>
            
            <?php if (count($results) > 0): ?>
                <!--  Visas resutatet i en tabell med omslag, titel, författare, genre, språk, ISBN, beskrivning och tillgänglighet -->
                <table>
                    <thead>
                        <tr>
                            <th>Omslag</th>
                            <th>Titel</th>
                            <th>Författare</th>
                            <th>Genre</th>
                            <th>Språk</th>
                            <th>ISBN</th>
                            <th>Beskrivning</th>
                            <th>Tillgänglighet</th>
                            <?php if (isset($_SESSION['user_id'])): ?>
                            <th>Åtgärd</th>
                            <?php endif; ?>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($results as $book): ?>
                            <tr>
                                <td>
                                    <?php if (!empty($book['cover_url'])): ?>
                                        <img src="<?= htmlspecialchars($book['cover_url']) ?>" alt="Omslag" class="book-cover">
                                    <?php endif; ?>
                                </td>
                                <td>
                                    <!-- Länk till bokens detaljsida -->
                                    <a href="book.php?id=<?= $book['bok_id'?>">
                                        <?= htmlspecialchars($book['titel']) ?>
                                    </a>
                                </td>
                                <td>
                                    <!-- Länk till författarens sida -->
                                    <a href="authors.php?id=<?= $book['författare_id'?>">
                                        <?= htmlspecialchars($book['författare']) ?>
                                    </a>
                                </td>
                                <td><?= htmlspecialchars($book['genre']) ?></td>
                                <td><?= htmlspecialchars($book['språk']) ?></td>
                                <td><?= htmlspecialchars($book['isbn']) ?></td>
                                <td class="book-description">
                                    <?php 
                                    
// Visa de första 100 tecknen av en bok beskrivningen
                                    
$desc htmlspecialchars($book['beskrivning']);
                                    echo 
mb_strlen($desc) > 100 mb_substr($desc0100) . '...' $desc;
                                    
?>
                                </td>
                                <td>
                                    <?php if ($book['available_exemplar'] > 0): ?>
                                        <span class="available">Tillgänglig (<?= $book['available_exemplar'?>)</span>
                                    <?php else: ?>
                                        <span class="unavailable">Utlånad</span>
                                    <?php endif; ?>
                                </td>
                                <?php if (isset($_SESSION['user_id'])): ?>
                                <td>
                                    <?php if ($book['available_exemplar'] > 0): ?>
                                        <!-- Låneknapp visas endast om boken är tillgänglig -->
                                        <form method="post" action="loan_handler.php" style="display: inline;">
                                            <input type="hidden" name="book_id" value="<?= $book['bok_id'?>">
                                            <button type="submit" class="btn-borrow">Låna</button>
                                        </form>
                                    <?php else: ?>
                                        <span class="text-muted">-</span>
                                    <?php endif; ?>
                                </td>
                                <?php endif; ?>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            <?php else: ?>
                <!-- Inget resultat hittades -->
                <div class="no-results">
                    <p>Inga böcker matchade din sökning.</p>
                    <p>Försök Igen:</p>
                   
                </div>
            <?php endif; ?>
        </div>
    <?php else: ?>
        <!-- Söktips -->
        <div class="search-tips">
            <h3>Söktips</h3>
            <ul>
                <li>Sök efter boktitel (t.ex. "Lorem Ipsum", "1984")</li>
                <li>Sök efter författare (t.ex. "Astrid Lindgren", " Orwell")</li>
                <li>Sök efter ISBN (t.ex. "123-45-67-8912-9")</li>
                <li>Använd filter om du vill söka specifikt i titel, författare eller ISBN</li>
            </ul>
        </div>
    <?php endif; ?>
    
    <div class="back-link">
        <a href="home.php">Tillbaka till alla böcker</a>
    </div>
</div>
</body>
</html>