Ćwiczenia INF.03 – PHP i SQL

1. Formularz w PHP

Polecenie: Utwórz formularz pobierający imię i nazwisko i wyświetlający powitanie.
<?php
if(isset($_POST['submit'])){
    $imie = $_POST['imie'];
    $nazwisko = $_POST['nazwisko'];
    echo "Witaj, $imie $nazwisko!";
}
?>

<form method="post">
Imię: <input type="text" name="imie"><br>
Nazwisko: <input type="text" name="nazwisko"><br>
<input type="submit" name="submit" value="Wyślij">
</form>
Efekt:
Po wpisaniu imienia i nazwiska wyświetli się powitanie.

2. Dodawanie produktu do bazy

Polecenie: Stwórz formularz HTML dodający produkt do tabeli `produkty`.
<form action="dodaj_produkt.php" method="post">
Nazwa: <input type="text" name="nazwa"><br>
Cena: <input type="number" step="0.01" name="cena"><br>
Stan magazynowy: <input type="number" name="stan"><br>
<input type="submit" value="Dodaj produkt">
</form>
Efekt:
Nowy produkt zapisany w tabeli `produkty`.

3. Wyświetlanie produktów z bazy

Polecenie: Pobierz produkty z tabeli `produkty` i wyświetl w tabeli HTML.
<?php
$conn = new mysqli('localhost','root','','sklep');
$result = $conn->query("SELECT * FROM produkty");

echo "<table border='1'><tr><th>ID</th><th>Nazwa</th><th>Cena</th><th>Stan</th></tr>";
while($row = $result->fetch_assoc()) {
    echo "<tr><td>{$row['id']}</td><td>{$row['nazwa']}</td><td>{$row['cena']}</td><td>{$row['stan_magazynowy']}</td></tr>";
}
echo "</table>";
$conn->close();
?>
Efekt:
IDNazwaCenaStan
1Laptop2500.005
2Mysz50.0020

4. Tworzenie tabeli produktów

Polecenie: Utwórz tabelę `produkty` w bazie.
CREATE TABLE produkty (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nazwa VARCHAR(50),
    cena DECIMAL(8,2),
    ilosc INT
);

INSERT INTO produkty (nazwa, cena, ilosc) VALUES
('Laptop', 2500.00, 5),
('Mysz', 50.00, 20),
('Klawiatura', 120.00, 15);
Efekt:
Tabela `produkty` została utworzona z przykładowymi danymi.

5. Zapytanie SELECT

Polecenie: Pobierz produkty z ceną >100 zł.
SELECT * FROM produkty;
SELECT nazwa, cena FROM produkty WHERE cena > 100;
Efekt:
NazwaCena
Laptop2500.00
Klawiatura120.00

6. Sortowanie i filtrowanie

Polecenie: Pokaż produkty z ilością>0, posortowane malejąco po cenie.
SELECT * FROM produkty WHERE ilosc > 0 ORDER BY cena DESC;

7. Tworzenie tabeli zamówienia i JOIN

Polecenie: Połącz zamówienia z produktami.
CREATE TABLE zamowienia (
    id INT AUTO_INCREMENT PRIMARY KEY,
    produkt_id INT,
    ilosc INT,
    data_zamowienia DATE,
    FOREIGN KEY (produkt_id) REFERENCES produkty(id)
);

INSERT INTO zamowienia (produkt_id, ilosc, data_zamowienia) VALUES
(1, 2, '2025-10-01'),
(2, 5, '2025-10-02');

SELECT z.id, p.nazwa, z.ilosc, z.data_zamowienia
FROM zamowienia z
JOIN produkty p ON z.produkt_id = p.id;
Efekt:
IDProduktIlośćData
1Laptop22025-10-01
2Mysz52025-10-02

8. Agregacja danych

Polecenie: Oblicz sumę ilości i średnią cenę.
SELECT SUM(ilosc) AS suma_zamowien, AVG(cena) AS srednia_cena
FROM zamowienia z
JOIN produkty p ON z.produkt_id = p.id;

9. Aktualizacja danych

Polecenie: Zaktualizuj stan magazynowy produktu o ID=1 na 10 sztuk.
UPDATE produkty SET ilosc = 10 WHERE id = 1;
Efekt:
Produkt o ID=1 ma teraz stan magazynowy 10.

10. Wyszukiwanie produktów

Polecenie: Wyświetl produkty, których nazwa zawiera "Laptop".
SELECT * FROM produkty WHERE nazwa LIKE '%Laptop%';
Efekt:
IDNazwaCenaIlość
1Laptop2500.0010

11. Panel logowania użytkowników

Polecenie: Stwórz tabelę `users` i logowanie przy użyciu `password_hash()` i `password_verify()`.
<?php
// Rejestracja użytkownika
$password = password_hash($_POST['haslo'], PASSWORD_DEFAULT);
$conn->query("INSERT INTO users (login, password) VALUES ('".$_POST['login']."', '$password')");

// Logowanie
$login = $_POST['login'];
$haslo = $_POST['haslo'];
$result = $conn->query("SELECT password FROM users WHERE login='$login'");
$row = $result->fetch_assoc();
if(password_verify($haslo, $row['password'])){
    echo "Zalogowano pomyślnie!";
} else { echo "Błędny login lub hasło!"; }
?>
Użytkownik może się teraz logować bezpiecznie.

12. Wyszukiwanie zadań

Polecenie: Dodaj możliwość wyszukiwania zadań po tytule lub opisie.
<?php
$szukaj = $_POST['szukaj'];
$sql = "SELECT * FROM zadania WHERE tytul LIKE '%$szukaj%' OR opis LIKE '%$szukaj%'";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()){
    echo $row['tytul']." - ".$row['opis']."<br>";
}
?>
Formularz wyszukiwania zadań po tytule i opisie działa.

13. Raport zadań (SQL GROUP BY)

Polecenie: Przygotuj raport liczby zadań według statusu i deadline’u.
SELECT status, COUNT(*) AS liczba, deadline
FROM zadania
GROUP BY status, deadline;
StatusLiczba zadańDeadline
Nowe52025-10-25
W toku32025-10-26

14. Usuwanie zadań

Polecenie: Dodaj możliwość usuwania zadań z bazy.
<?php
$id = $_POST['id'];
$conn->query("DELETE FROM zadania WHERE id = $id");
echo "Zadanie o ID=$id zostało usunięte.";
?>
Zadanie zostało usunięte z bazy.

15. Panel administratora

Polecenie: Stwórz panel admina z podglądem wszystkich użytkowników i ich zadań.
<?php
$result = $conn->query("
SELECT u.login, z.tytul, z.status
FROM users u
LEFT JOIN zadania z ON u.id = z.user_id
");
while($row = $result->fetch_assoc()){
    echo $row['login']." - ".$row['tytul']." (".$row['status'].")<br>";
}
?>
LoginTytuł zadaniaStatus
adminDodanie bazy danychNowe
user1LogowanieW toku