http://localhost/phpmyadmin/.htdocs, a MariaDB/MySQL w XAMPP będzie serwerem bazy dla wszystkich skryptów z tego zestawu.
szkolaNajpierw utwórz bazę danych szkola i tabelę Uczniowie (UTF‑8, polskie znaki).
-- Utworzenie bazy danych z poprawnym kodowaniem
CREATE DATABASE IF NOT EXISTS szkola
CHARACTER SET utf8mb4
COLLATE utf8mb4_polish_ci;
USE szkola;
-- Utworzenie tabeli Uczniowie
CREATE TABLE IF NOT EXISTS Uczniowie (
ID INT PRIMARY KEY AUTO_INCREMENT,
Imie VARCHAR(50) NOT NULL,
Nazwisko VARCHAR(50) NOT NULL
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_polish_ci;
-- Przykładowe dane do testów
INSERT INTO Uczniowie (Imie, Nazwisko) VALUES
('Alicja', 'Wojcik'),
('Bartosz', 'Zielinski');
utf8mb4 obsługuje pełny Unicode (w tym emoji), a kolacja utf8mb4_polish_ci zapewnia poprawne sortowanie polskich znaków.
Polecenie: Napisz skrypt PHP, który połączy się z bazą szkola i wyświetli komunikat o pomyślnym połączeniu.
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "szkola";
$conn = mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
die("Blad polaczenia: " . mysqli_connect_error());
}
mysqli_set_charset($conn, "utf8mb4");
echo "Polaczono z baza danych!";
mysqli_close($conn);
?>
mysqli_set_charset() ustawia kodowanie klienta na utf8mb4, co jest zalecanym sposobem pracy z polskimi znakami w MySQL/MariaDB.
Polecenie: Dane dostępowe do bazy przenieś do osobnego pliku dbconnect.php, a w głównym skrypcie tylko je wczytaj.
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "szkola";
$charset = "utf8mb4";
?>
<?php
require_once "dbconnect.php";
$conn = mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
die("Blad polaczenia: " . mysqli_connect_error());
}
mysqli_set_charset($conn, $charset);
echo "Polaczono z baza danych!";
mysqli_close($conn);
?>
Polecenie: Połącz się z bazą korzystając z klasy mysqli (podejście obiektowe).
<?php
require_once "dbconnect.php";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Blad polaczenia: " . $conn->connect_error);
}
$conn->set_charset("utf8mb4");
echo "Polaczono z baza danych (OOP)!";
$conn->close();
?>
$conn, co upraszcza pracę z błędami i dalszymi operacjami.
Polecenie: Wczytaj wszystkich uczniów z tabeli Uczniowie i wypisz ich w formie tekstowej.
<?php
require_once "dbconnect.php";
$conn = new mysqli($host, $user, $pass, $db);
$conn->set_charset("utf8mb4");
$sql = "SELECT Imie, Nazwisko FROM Uczniowie";
$result = $conn->query($sql);
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo $row["Imie"] . " " . $row["Nazwisko"] . "<br>";
}
} else {
echo "Brak wynikow do wyswietlenia.";
}
$conn->close();
?>
fetch_assoc() zwraca każdy wiersz jako tablicę asocjacyjną, gdzie klucze odpowiadają nazwom kolumn.
Polecenie: Stwórz formularz przesyłający imię i nazwisko do skryptu dodaj_ucznia.php.
<form action="dodaj_ucznia.php" method="post">
<label for="imie">Imie:</label>
<input type="text" id="imie" name="imie" required><br><br>
<label for="nazwisko">Nazwisko:</label>
<input type="text" id="nazwisko" name="nazwisko" required><br><br>
<input type="submit" value="Dodaj ucznia">
</form>
name są kluczami w tablicy $_POST w PHP – ich nazwy muszą zgadzać się z tym, czego używasz w skrypcie.
Polecenie: Obsłuż formularz w dodaj_ucznia.php, wstawiając dane bezpośrednio do SQL (celowo z luką).
<?php
require_once "dbconnect.php";
$conn = new mysqli($host, $user, $pass, $db);
$conn->set_charset("utf8mb4");
$imie = $_POST["imie"];
$nazwisko = $_POST["nazwisko"];
$sql = "INSERT INTO Uczniowie (Imie, Nazwisko)
VALUES ('$imie', '$nazwisko')";
if ($conn->query($sql) === TRUE) {
echo "Dodano ucznia: $imie $nazwisko.";
} else {
echo "Blad: " . $conn->error;
}
$conn->close();
?>
Polecenie: Zabezpiecz wstawianie danych, używając Prepared Statements.
<?php
require_once "dbconnect.php";
$conn = new mysqli($host, $user, $pass, $db);
$conn->set_charset("utf8mb4");
$stmt = $conn->prepare(
"INSERT INTO Uczniowie (Imie, Nazwisko) VALUES (?, ?)"
);
$stmt->bind_param("ss", $_POST["imie"], $_POST["nazwisko"]);
if ($stmt->execute()) {
echo "Dodano ucznia bezpiecznie.";
} else {
echo "Blad wykonania: " . $stmt->error;
}
$stmt->close();
$conn->close();
?>
Polecenie: Zaktualizuj nazwisko ucznia o wybranym ID, używając Prepared Statement.
<?php
require_once "dbconnect.php";
$conn = new mysqli($host, $user, $pass, $db);
$conn->set_charset("utf8mb4");
$nowe_nazwisko = "NoweNazwisko";
$id_ucznia = 1;
$stmt = $conn->prepare(
"UPDATE Uczniowie SET Nazwisko = ? WHERE ID = ?"
);
$stmt->bind_param("si", $nowe_nazwisko, $id_ucznia);
if ($stmt->execute()) {
echo "Zaktualizowano dane dla ucznia ID: $id_ucznia.";
} else {
echo "Blad aktualizacji: " . $stmt->error;
}
$stmt->close();
$conn->close();
?>
Polecenie: Usuń ucznia o podanym ID, także używając Prepared Statement.
<?php
require_once "dbconnect.php";
$conn = new mysqli($host, $user, $pass, $db);
$conn->set_charset("utf8mb4");
$id_do_usuniecia = 2;
$stmt = $conn->prepare(
"DELETE FROM Uczniowie WHERE ID = ?"
);
$stmt->bind_param("i", $id_do_usuniecia);
if ($stmt->execute()) {
echo "Usunieto ucznia o ID: $id_do_usuniecia.";
} else {
echo "Blad usuwania: " . $stmt->error;
}
$stmt->close();
$conn->close();
?>
Polecenie: Wyświetl listę uczniów w tabeli HTML z nagłówkami kolumn.
<?php
require_once "dbconnect.php";
$conn = new mysqli($host, $user, $pass, $db);
$conn->set_charset("utf8mb4");
$sql = "SELECT ID, Imie, Nazwisko FROM Uczniowie";
$result = $conn->query($sql);
echo "<h3>Lista Uczniow</h3>";
echo "<table>";
echo "<thead><tr>
<th>ID</th>
<th>Imie</th>
<th>Nazwisko</th>
</tr></thead>";
echo "<tbody>";
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row["ID"] . "</td>";
echo "<td>" . $row["Imie"] . "</td>";
echo "<td>" . $row["Nazwisko"] . "</td>";
echo "</tr>";
}
} else {
echo "<tr><td colspan='3'>Brak uczniow w bazie.</td></tr>";
}
echo "</tbody>";
echo "</table>";
$conn->close();
?>