Ćwiczenia z SQL i PHP

Ćwiczenia 1-5: Podstawy SQL

1. Tworzenie tabeli

Zadanie: Utwórz tabelę produkty z kolumnami: id, nazwa, cena, opis.

Rozwiązanie
CREATE TABLE produkty (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nazwa VARCHAR(100),
    cena DECIMAL(10,2),
    opis TEXT
);

2. Dodawanie danych

Zadanie: Dodaj nowy produkt do tabeli produkty (np. nazwa: "Laptop", cena: 2500.00, opis: "Nowoczesny laptop").

Rozwiązanie
INSERT INTO produkty (nazwa, cena, opis)
VALUES ('Laptop', 2500.00, 'Nowoczesny laptop');

3. Wybieranie danych

Zadanie: Wyświetl wszystkie produkty z tabeli produkty.

Rozwiązanie
SELECT * FROM produkty;

4. Modyfikowanie danych

Zadanie: Zaktualizuj cenę produktu o id = 1, ustawiając cenę na 2200.00.

Rozwiązanie
UPDATE produkty
SET cena = 2200.00
WHERE id = 1;

5. Usuwanie danych

Zadanie: Usuń produkt z tabeli produkty o id = 1.

Rozwiązanie
DELETE FROM produkty
WHERE id = 1;

Ćwiczenia 6-10: Zaawansowane SQL

6. Łączenie tabel (JOIN)

Zadanie: Wyświetl produkty razem z nazwą kategorii z tabeli kategorie, która ma kolumny id i nazwa.

Rozwiązanie
SELECT produkty.nazwa, produkty.cena, kategorie.nazwa
FROM produkty
JOIN kategorie ON produkty.kategoria_id = kategorie.id;

7. Agregacja danych

Zadanie: Oblicz średnią cenę produktów w tabeli produkty.

Rozwiązanie
SELECT AVG(cena) AS srednia_cena FROM produkty;

8. Warunki w zapytaniach (WHERE)

Zadanie: Wyświetl wszystkie produkty, których cena jest mniejsza niż 1000 zł.

Rozwiązanie
SELECT * FROM produkty WHERE cena < 1000;

9. Grupowanie danych

Zadanie: Pogrupuj produkty w tabeli produkty po cenach, licząc ile produktów znajduje się w danej grupie cenowej.

Rozwiązanie
SELECT cena, COUNT(*) AS liczba_produktow
FROM produkty
GROUP BY cena;

10. Sortowanie wyników

Zadanie: Posortuj produkty według ceny w porządku rosnącym.

Rozwiązanie
SELECT * FROM produkty ORDER BY cena ASC;

Ćwiczenia 11-20: SQL + PHP

11. Formularz do dodawania produktów

Zadanie: Stwórz formularz HTML do dodawania produktów (nazwa, cena, opis) do tabeli produkty.

Rozwiązanie
<form action="dodaj.php" method="POST">
    <label for="nazwa">Nazwa produktu</label>
    <input type="text" id="nazwa" name="nazwa" required>

    <label for="cena">Cena</label>
    <input type="number" id="cena" name="cena" required>

    <label for="opis">Opis</label>
    <textarea id="opis" name="opis"></textarea>

    <input type="submit" value="Dodaj produkt">
</form>

12. Przetwarzanie formularza PHP

Zadanie: Zapisz dane z formularza dodawania produktu do tabeli produkty w bazie danych.

Rozwiązanie
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "moja_baza";

// Tworzenie połączenia
$conn = new mysqli($servername, $username, $password, $dbname);

// Sprawdzanie połączenia
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Pobieranie danych z formularza
$nazwa = $_POST['nazwa'];
$cena = $_POST['cena'];
$opis = $_POST['opis'];

// Wstawianie danych do tabeli
$sql = "INSERT INTO produkty (nazwa, cena, opis) VALUES ('$nazwa', $cena, '$opis')";

if ($conn->query($sql) === TRUE) {
    echo "Nowy produkt dodany!";
} else {
    echo "Błąd: " . $sql . "
" . $conn->error; } $conn->close(); ?>

13. Wyświetlanie produktów w tabeli HTML

Zadanie: Wyświetl wszystkie produkty z tabeli produkty w formie tabeli HTML.

Rozwiązanie
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "moja_baza";

// Tworzenie połączenia
$conn = new mysqli($servername, $username, $password, $dbname);

// Sprawdzanie połączenia
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, nazwa, cena, opis FROM produkty";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table>";
    echo "<tr><th>ID</th><th>Nazwa</th><th>Cena</th><th>Opis</th></tr>";
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row["id"]. "</td><td>" . $row["nazwa"]. "</td><td>" . $row["cena"]. "</td><td>" . $row["opis"]. "</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 wyników";
}

$conn->close();
?>

14. Formularz z walidacją danych

Zadanie: Dodaj walidację formularza przed jego wysłaniem do bazy danych, sprawdzając czy wszystkie pola są wypełnione i czy cena jest liczbą dodatnią.

Rozwiązanie
<form action="dodaj.php" method="POST">
    <label for="nazwa">Nazwa produktu</label>
    <input type="text" id="nazwa" name="nazwa" required>

    <label for="cena">Cena</label>
    <input type="number" id="cena" name="cena" required min="0">

    <label for="opis">Opis</label>
    <textarea id="opis" name="opis"></textarea>

    <input type="submit" value="Dodaj produkt">
</form>

15. Aktualizacja danych przez formularz

Zadanie: Stwórz formularz do edycji danych produktu (zmiana ceny lub opisu) w bazie danych.

Rozwiązanie
<form action="aktualizuj.php" method="POST">
    <label for="id">ID produktu</label>
    <input type="number" id="id" name="id" required>

    <label for="nazwa">Nazwa produktu</label>
    <input type="text" id="nazwa" name="nazwa">

    <label for="cena">Cena</label>
    <input type="number" id="cena" name="cena">

    <label for="opis">Opis</label>
    <textarea id="opis" name="opis"></textarea>

    <input type="submit" value="Aktualizuj">
</form>

16. Usuwanie produktu przez formularz

Zadanie: Stwórz formularz do usuwania produktu na podstawie jego ID.

Rozwiązanie
<form action="usun.php" method="POST">
    <label for="id">ID produktu</label>
    <input type="number" id="id" name="id" required>

    <input type="submit" value="Usuń produkt">
</form>

17. Obsługa sesji w PHP

Zadanie: Zastosuj sesje w PHP do przechowywania danych logowania użytkownika (np. ID, nazwisko, status). Sprawdź, czy użytkownik jest zalogowany przed wykonaniem akcji.

Rozwiązanie
<?php
session_start();

// Zapisanie danych sesji
$_SESSION['user_id'] = $user_id;

// Sprawdzenie, czy użytkownik jest zalogowany
if (!isset($_SESSION['user_id'])) {
    echo "Musisz się zalogować!";
} else {
    echo "Witaj " . $_SESSION['user_id'];
}
?>

18. Logowanie użytkownika

Zadanie: Stwórz formularz logowania, który pozwala użytkownikowi na zalogowanie się do systemu. Po zalogowaniu powinien pojawić się komunikat powitalny.

Rozwiązanie
<form action="login.php" method="POST">
    <label for="username">Nazwa użytkownika</label>
    <input type="text" id="username" name="username" required>

    <label for="password">Hasło</label>
    <input type="password" id="password" name="password" required>

    <input type="submit" value="Zaloguj">
</form>

19. Rejestracja użytkownika

Zadanie: Stwórz formularz rejestracji użytkownika, który zapisuje dane w tabeli uzytkownicy (nazwa użytkownika, hasło, email).

Rozwiązanie
<form action="register.php" method="POST">
    <label for="username">Nazwa użytkownika</label>
    <input type="text" id="username" name="username" required>

    <label for="email">E-mail</label>
    <input type="email" id="email" name="email" required>

    <label for="password">Hasło</label>
    <input type="password" id="password" name="password" required>

    <input type="submit" value="Zarejestruj">
</form>

20. Filtrowanie wyników z formularza

Zadanie: Zastosuj filtr w formularzu, który pozwala na wyszukiwanie produktów na podstawie nazwy.

Rozwiązanie
<form action="filter.php" method="POST">
    <label for="nazwa">Szukaj produktu</label>
    <input type="text" id="nazwa" name="nazwa">

    <input type="submit" value="Szukaj">
</form>