Ćwiczenia INF.03 – PHP i SQL
1. Formularz w PHP
Polecenie: Utwórz formularz pobierający imię i nazwisko i wyświetlający powitanie.
Pokaż kod PHP
<?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`.
Pokaż kod PHP
<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.
Pokaż kod PHP
<?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:
ID Nazwa Cena Stan
1 Laptop 2500.00 5
2 Mysz 50.00 20
4. Tworzenie tabeli produktów
Polecenie: Utwórz tabelę `produkty` w bazie.
Pokaż kod SQL
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ł.
Pokaż kod SQL
SELECT * FROM produkty;
SELECT nazwa, cena FROM produkty WHERE cena > 100;
Efekt:
Nazwa Cena
Laptop 2500.00
Klawiatura 120.00
6. Sortowanie i filtrowanie
Polecenie: Pokaż produkty z ilością>0, posortowane malejąco po cenie.
Pokaż kod SQL
SELECT * FROM produkty WHERE ilosc > 0 ORDER BY cena DESC;
7. Tworzenie tabeli zamówienia i JOIN
Polecenie: Połącz zamówienia z produktami.
Pokaż kod SQL
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:
ID Produkt Ilość Data
1 Laptop 2 2025-10-01
2 Mysz 5 2025-10-02
8. Agregacja danych
Polecenie: Oblicz sumę ilości i średnią cenę.
Pokaż kod SQL
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.
Pokaż kod SQL
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".
Pokaż kod SQL
SELECT * FROM produkty WHERE nazwa LIKE '%Laptop%';
Efekt:
ID Nazwa Cena Ilość
1 Laptop 2500.00 10
11. Panel logowania użytkowników
Polecenie: Stwórz tabelę `users` i logowanie przy użyciu `password_hash()` i `password_verify()`.
Pokaż kod PHP
<?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.
Pokaż kod PHP
<?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.
Pokaż kod SQL
SELECT status, COUNT(*) AS liczba, deadline
FROM zadania
GROUP BY status, deadline;
Status Liczba zadań Deadline
Nowe 5 2025-10-25
W toku 3 2025-10-26
14. Usuwanie zadań
Polecenie: Dodaj możliwość usuwania zadań z bazy.
Pokaż kod PHP
<?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ń.
Pokaż kod PHP
<?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>";
}
?>
Login Tytuł zadania Status
admin Dodanie bazy danych Nowe
user1 Logowanie W toku