Zadanie 0 – Utworzenie bazy danych
W phpMyAdmin utwórz bazę rowery oraz zaimportuj poniższy kod SQL. Zostanie utworzona struktura bazy, przykładowi użytkownicy, wyprawy i zdjęcia.
-- Utworzenie bazy danych
CREATE DATABASE rowery CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE rowery;
-- Tabela użytkowników
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
login VARCHAR(40) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL
);
-- Tabela wypraw
CREATE TABLE wyprawy (
id INT AUTO_INCREMENT PRIMARY KEY,
uzytkownik_id INT,
nazwa VARCHAR(60),
lokalizacja VARCHAR(60),
status VARCHAR(30),
data_zamowienia DATE,
FOREIGN KEY (uzytkownik_id) REFERENCES users(id)
);
-- Tabela zdjęć wypraw
CREATE TABLE zdjecia (
id INT AUTO_INCREMENT PRIMARY KEY,
id_wyprawy INT,
zrodlo VARCHAR(128),
FOREIGN KEY (id_wyprawy) REFERENCES wyprawy(id)
);
-- Dodaj testowych użytkowników (hasła: "test1", "admin")
INSERT INTO users (login, password_hash) VALUES
('test1', '$2y$10$EfvVZGwHDDpC/uxx0IDFz.F5Z.Fm2DFDLRI4vfS6kHmIB1scDEy6y'),
('admin', '$2y$10$kB9o56ZUFVWRq.i8jTVXkOkpNL0A8ZahRuqp1L2E8nw6BVRHiYw7i');
-- Dodaj wyprawy
INSERT INTO wyprawy (uzytkownik_id, nazwa, lokalizacja, status, data_zamowienia) VALUES
(1, 'Rowerem przez Mazury', 'Giżycko', 'zrealizowana', '2025-07-10'),
(1, 'Beskid Śląski MTB', 'Wisła', 'w realizacji', '2025-11-03'),
(2, 'Wybrzeżem Bałtyku', 'Ustka', 'zrealizowana', '2025-06-15');
-- Dodaj zdjęcia wypraw
INSERT INTO zdjecia (id_wyprawy, zrodlo) VALUES
(1, 'mazury.jpg'),
(2, 'beskid.jpg'),
(3, 'baltyk.jpg');
Zadanie 1 – Panel logowania
Stwórz formularz logowania użytkowników z weryfikacją hasła przy użyciu password_hash() i password_verify().
<form method="post">
Login: <input type="text" name="login"><br>
Hasło: <input type="password" name="haslo"><br>
<input type="submit" name="submit" value="Zaloguj">
</form>
<?php
if(isset($_POST['submit'])){
$login = $_POST['login'];
$haslo = $_POST['haslo'];
$conn = new mysqli('localhost','root','','rowery');
$result = $conn->query("SELECT password_hash FROM users WHERE login='$login'");
if($result->num_rows){
$row = $result->fetch_assoc();
if(password_verify($haslo, $row['password_hash'])){
echo "Zalogowano!";
} else {
echo "Niepoprawne hasło";
}
} else {
echo "Nie znaleziono użytkownika";
}
$conn->close();
}
?>
Zadanie 2 – Lista wypraw
Wyświetl listę wszystkich wypraw (nazwa, lokalizacja) z bazy rowery. Obok każdej wyprawy dodaj link "Zobacz zdjęcie".
<?php
$conn = new mysqli('localhost', 'root', '', 'rowery');
$sql = "SELECT w.id, w.nazwa, w.lokalizacja, z.zrodlo FROM wyprawy w LEFT JOIN zdjecia z ON w.id = z.id_wyprawy";
$wynik = $conn->query($sql);
while($row = $wynik->fetch_assoc()) {
echo "<div><strong>{$row['nazwa']}</strong> ({$row['lokalizacja']}) ";
if($row['zrodlo']) echo "<a href='{$row['zrodlo']}' target='_blank'>Zobacz zdjęcie</a>";
echo "</div>";
}
$conn->close();
?>
Zadanie 3 – Wyszukiwanie wypraw
Dodaj formularz umożliwiający wyszukiwanie wypraw po tytule lub lokalizacji.
<form method="get">
Szukaj wyprawy: <input type="text" name="szukaj">
<input type="submit" value="Szukaj">
</form>
<?php
if(isset($_GET['szukaj'])){
$conn = new mysqli('localhost', 'root', '', 'rowery');
$szukaj = $conn->real_escape_string($_GET['szukaj']);
$sql = "SELECT w.id, w.nazwa, w.lokalizacja FROM wyprawy w WHERE w.nazwa LIKE '%$szukaj%' OR w.lokalizacja LIKE '%$szukaj%'";
$wynik = $conn->query($sql);
while($row = $wynik->fetch_assoc()){
echo "<div><strong>{$row['nazwa']}</strong> ({$row['lokalizacja']})</div>";
}
$conn->close();
}
?>
Zadanie 4 – Raport statystyk
Przygotuj raport liczby wypraw według statusu i daty realizacji. Użyj GROUP BY.
SELECT status, COUNT(*) AS ile, DATE(data_zamowienia) AS dzien FROM wyprawy GROUP BY status, dzien;
Zadanie 5 – Usuwanie wypraw
Dodaj możliwość usuwania wypraw po ID. Wyświetl przy każdej wyprawie przycisk "Usuń".
<form method="post">
<input type="hidden" name="usun_id" value="ID_WYPRAWY">
<input type="submit" value="Usuń">
</form>
<?php
if(isset($_POST['usun_id'])){
$conn = new mysqli('localhost', 'root', '', 'rowery');
$id = intval($_POST['usun_id']);
$conn->query("DELETE FROM wyprawy WHERE id=$id");
$conn->close();
}
?>
Zadanie 6 – Panel administratora
Panel, w którym administrator może zobaczyć wszystkich użytkowników i ich wyprawy.
<?php
$conn = new mysqli('localhost', 'root', '', 'rowery');
$sql = "SELECT u.login, w.nazwa, w.lokalizacja
FROM users u
LEFT JOIN wyprawy w ON u.id = w.uzytkownik_id";
$wynik = $conn->query($sql);
while($row = $wynik->fetch_assoc()){
echo "<div><b>{$row['login']}</b>: {$row['nazwa']} ({$row['lokalizacja']})</div>";
}
$conn->close();
?>