Ćwiczenia SQL i PHP

1. Tworzenie bazy danych

Utwórz bazę danych o nazwie `firma`.

CREATE DATABASE firma;

2. Tworzenie tabeli

Utwórz tabelę `pracownicy` z kolumnami: `id`, `imie`, `nazwisko`, `stanowisko`.

CREATE TABLE pracownicy (
    id INT AUTO_INCREMENT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    stanowisko VARCHAR(50)
);

3. Wstawianie danych do tabeli

Dodaj dwóch pracowników do tabeli `pracownicy`.

INSERT INTO pracownicy (imie, nazwisko, stanowisko)
        VALUES ('Jan', 'Kowalski', 'Programista'),
               ('Anna', 'Nowak', 'Administrator');

4. Łączenie tabel

Załóżmy, że masz dwie tabele: `pracownicy` i `dzialy`. Wybierz imiona pracowników oraz nazwy działów, do których należą, zakładając, że tabela `dzialy` ma kolumny: `id`, `nazwa`.

SELECT pracownicy.imie, dzialy.nazwa
        FROM pracownicy
        JOIN dzialy ON pracownicy.dzial_id = dzialy.id;

5. Zapytanie SQL z warunkiem

Wybierz wszystkich pracowników na stanowisku 'Programista'.

SELECT * FROM pracownicy WHERE stanowisko = 'Programista';

6. Procedura składowana

Stwórz procedurę, która zwróci wszystkich pracowników o określonym stanowisku.

DELIMITER //
        CREATE PROCEDURE GetEmployeesByPosition(IN pos VARCHAR(50))
        BEGIN
            SELECT * FROM pracownicy WHERE stanowisko = pos;
        END //
        DELIMITER ;

7. Wyzwalacz

Stwórz wyzwalacz, który automatycznie zaktualizuje datę modyfikacji, kiedy rekord w tabeli `pracownicy` zostanie zaktualizowany.

CREATE TRIGGER UpdateTimestamp BEFORE UPDATE ON pracownicy
        FOR EACH ROW
        SET NEW.updated_at = NOW();

8. Indeks

Stwórz indeks na kolumnie `nazwisko` w tabeli `pracownicy`, aby przyspieszyć zapytania wyszukujące po nazwisku.

CREATE INDEX idx_nazwisko ON pracownicy (nazwisko);

9. Połączenie z bazą danych w PHP

Napisz kod PHP, który łączy się z bazą `firma`.

<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "firma";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
    die("Błąd połączenia: " . $conn->connect_error);
}
echo "Połączono z bazą danych";
?>
            

10. Obsługa formularza rejestracji użytkownika

Stwórz formularz rejestracji, który zapisuje dane użytkownika (imie, nazwisko, email) do bazy danych.

        <form method="POST" action="register.php">
            Imię: <input type="text" name="imie"><br>
            Nazwisko: <input type="text" name="nazwisko"><br>
            Email: <input type="email" name="email"><br>
            <input type="submit" value="Zarejestruj">
        </form>
        <?php
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $imie = $_POST['imie'];
            $nazwisko = $_POST['nazwisko'];
            $email = $_POST['email'];
        
            $conn = new mysqli($host, $user, $pass, $db);
            $stmt = $conn->prepare("INSERT INTO uzytkownicy (imie, nazwisko, email) VALUES (?, ?, ?)");
            $stmt->bind_param("sss", $imie, $nazwisko, $email);
            $stmt->execute();
            echo "Rejestracja zakończona sukcesem!";
        }
        ?>
            

11. Logowanie użytkownika

Stwórz skrypt logowania, który sprawdza, czy użytkownik istnieje w bazie i weryfikuje hasło.

        <form method="POST" action="login.php">
            Email: <input type="email" name="email"><br>
            Hasło: <input type="password" name="haslo"><br>
            <input type="submit" value="Zaloguj">
        </form>
        <?php
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $email = $_POST['email'];
            $haslo = $_POST['haslo'];
        
            $conn = new mysqli($host, $user, $pass, $db);
            $stmt = $conn->prepare("SELECT * FROM uzytkownicy WHERE email = ?");
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $result = $stmt->get_result();
            if ($result->num_rows > 0) {
                $row = $result->fetch_assoc();
                if (password_verify($haslo, $row['haslo'])) {
                    echo "Zalogowano pomyślnie!";
                } else {
                    echo "Niepoprawne hasło.";
                }
            } else {
                echo "Użytkownik nie istnieje.";
            }
        }
        ?>