Wyświetlanie zawartości tabeli MySQL w PHP

Jeśli dopiero zaczynasz swoją przygodę z PHP i bazami danych MySQL, to pewnie zastanawiasz się, jak połączyć te dwa światy i wyświetlić dane z tabeli w przeglądarce.
Na szczęście – to wcale nie jest takie trudne! W tym artykule pokażę Ci krok po kroku, jak połączyć się z bazą danych MySQL, pobrać dane z tabeli i zaprezentować je w czytelnej formie w HTML.
Przy okazji podpowiem Ci też kilka praktycznych sztuczek, które pomogą Ci pisać czysty, bezpieczny i wydajny kod.

Gotowy? No to zaczynamy!

Czym jest MySQL i dlaczego warto go używać z PHP?

Zacznijmy od podstaw.
MySQL to popularny system zarządzania relacyjną bazą danych (RDBMS), który przechowuje dane w tabelach. Każda tabela ma kolumny (np. id, imie, email, data_utworzenia) i wiersze (czyli konkretne rekordy danych).

PHP natomiast to język skryptowy działający po stronie serwera, który świetnie współpracuje z MySQL. To właśnie dzięki tej parze — PHP + MySQL — powstały takie systemy jak WordPress, Joomla, Drupal czy tysiące innych aplikacji webowych.

Co będzie Ci potrzebne?

Zanim przejdziemy do kodu, upewnij się, że masz wszystko, czego potrzebujesz:

  • Serwer lokalny, np. XAMPP lub Laragon, który zawiera Apache, PHP i MySQL.
  • Edytor kodu, np. VS Code, Sublime Text, Notepad++ lub PHPStorm.
  • Trochę cierpliwości i chęci do nauki 😉

Tworzymy bazę danych i tabelę

Zaloguj się do phpMyAdmin (zazwyczaj pod adresem http://localhost/phpmyadmin) i wykonaj następujące kroki:

  1. Kliknij „Nowa” i utwórz bazę danych o nazwie np. sklep.
  2. W nowej bazie utwórz tabelę o nazwie produkty z polami:
    • id (INT, AI, PRIMARY KEY)
    • nazwa (VARCHAR 100)
    • cena (DECIMAL 10,2)
    • opis (TEXT)

Możesz też użyć tego zapytania SQL:

CREATE DATABASE sklep;
USE sklep;

CREATE TABLE produkty (
  id INT(11) AUTO_INCREMENT PRIMARY KEY,
  nazwa VARCHAR(100) NOT NULL,
  cena DECIMAL(10,2) NOT NULL,
  opis TEXT
);

Teraz dodajmy kilka przykładowych danych:

INSERT INTO produkty (nazwa, cena, opis) VALUES
('Laptop Lenovo', 2999.99, 'Nowoczesny laptop z procesorem Intel i5.'),
('Smartfon Samsung', 1999.00, 'Flagowy model z doskonałym aparatem.'),
('Mysz Logitech', 129.99, 'Bezprzewodowa mysz optyczna.'),
('Monitor Dell', 899.50, 'Monitor Full HD o przekątnej 24 cale.');

Świetnie! Dane mamy. Czas przejść do PHP.

Łączenie PHP z MySQL

Do komunikacji z bazą danych w PHP najczęściej używa się rozszerzenia MySQLi lub PDO (PHP Data Objects).
Dla prostoty w tym przykładzie użyjemy MySQLi, ale wspomnę też później o PDO.

Utwórz plik o nazwie polaczenie.php:

<?php
$host = "localhost";
$user = "root";  // domyślny użytkownik XAMPP-a
$pass = "";      // puste hasło (chyba że ustawiłeś własne)
$db   = "sklep";

// Tworzymy połączenie
$conn = new mysqli($host, $user, $pass, $db);

// Sprawdzamy, czy połączenie działa
if ($conn->connect_error) {
    die("Błąd połączenia z bazą danych: " . $conn->connect_error);
}

// Jeśli wszystko OK
echo "Połączono z bazą danych!";
?>

Zapisz i uruchom w przeglądarce pod adresem:
http://localhost/polaczenie.php

Jeśli widzisz komunikat „Połączono z bazą danych!”, to znaczy, że wszystko działa jak należy.

Pobieranie i wyświetlanie danych z tabeli

Teraz najważniejsza część — wyświetlenie zawartości tabeli produkty.

Utwórz nowy plik o nazwie wyswietl.php i dodaj poniższy kod:

<?php
include 'polaczenie.php'; // dołączamy plik z połączeniem

$sql = "SELECT * FROM produkty";
$wynik = $conn->query($sql);

if ($wynik->num_rows > 0) {
    echo "<h2>Lista produktów:</h2>";
    echo "<table border='1' cellpadding='10'>";
    echo "<tr><th>ID</th><th>Nazwa</th><th>Cena</th><th>Opis</th></tr>";

    while ($wiersz = $wynik->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" . $wiersz['id'] . "</td>";
        echo "<td>" . $wiersz['nazwa'] . "</td>";
        echo "<td>" . number_format($wiersz['cena'], 2, ',', ' ') . " zł</td>";
        echo "<td>" . $wiersz['opis'] . "</td>";
        echo "</tr>";
    }

    echo "</table>";
} else {
    echo "Brak danych w tabeli.";
}

$conn->close();
?>

Otwórz w przeglądarce http://localhost/wyswietl.php
i zobaczysz piękną tabelę z danymi.

Stylizacja tabeli w HTML i CSS

Wyświetlanie danych w surowej tabeli HTML działa, ale… wygląda trochę smutno.
Dodajmy więc odrobinę stylu.

Utwórz plik style.css:

body {
    font-family: Arial, sans-serif;
    background-color: #f4f6f8;
    color: #333;
    margin: 40px;
}

h2 {
    text-align: center;
    color: #0066cc;
}

table {
    margin: auto;
    border-collapse: collapse;
    width: 80%;
    background-color: white;
    box-shadow: 0 0 10px rgba(0,0,0,0.1);
}

th, td {
    border: 1px solid #ccc;
    padding: 12px;
    text-align: left;
}

th {
    background-color: #007bff;
    color: white;
}

tr:nth-child(even) {
    background-color: #f2f2f2;
}

tr:hover {
    background-color: #e8f0fe;
}

I w pliku wyswietl.php na samej górze (zaraz po otwarciu PHP) dodaj linię:

<link rel="stylesheet" href="style.css">

Teraz Twoja tabela wygląda o niebo lepiej.

Jak to zrobić bezpieczniej – PDO

Jeśli zależy Ci na bezpieczeństwie i chcesz tworzyć nowoczesne aplikacje, lepiej używać PDO zamiast MySQLi.
PDO obsługuje więcej typów baz danych (nie tylko MySQL) i ma wsparcie dla tzw. zapytań przygotowanych (prepared statements), które chronią przed SQL Injection.

Oto ten sam przykład z użyciem PDO:

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=sklep;charset=utf8", "root", "");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM produkty";
    $stmt = $pdo->query($sql);

    echo "<h2>Lista produktów:</h2>";
    echo "<table border='1' cellpadding='10'>";
    echo "<tr><th>ID</th><th>Nazwa</th><th>Cena</th><th>Opis</th></tr>";

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "<tr>";
        echo "<td>{$row['id']}</td>";
        echo "<td>{$row['nazwa']}</td>";
        echo "<td>" . number_format($row['cena'], 2, ',', ' ') . " zł</td>";
        echo "<td>{$row['opis']}</td>";
        echo "</tr>";
    }

    echo "</table>";

} catch (PDOException $e) {
    echo "Błąd połączenia: " . $e->getMessage();
}
?>

To rozwiązanie jest nieco bardziej eleganckie i odporne na błędy.

Dodatkowe funkcje – sortowanie i filtrowanie

Chcesz, żeby użytkownicy mogli sortować dane albo wyszukiwać produkt po nazwie?
Nic prostszego!

Dodajmy prosty formularz wyszukiwania do pliku wyswietl.php:

<form method="GET" action="">
    <input type="text" name="szukaj" placeholder="Szukaj produktu...">
    <input type="submit" value="Szukaj">
</form>
<br>

I zmień zapytanie SQL:

$szukaj = "";
if (isset($_GET['szukaj'])) {
    $szukaj = $_GET['szukaj'];
    $sql = "SELECT * FROM produkty WHERE nazwa LIKE '%$szukaj%'";
} else {
    $sql = "SELECT * FROM produkty";
}

Teraz możesz wpisać np. „Laptop” i zobaczyć tylko pasujące wyniki.

Wskazówka: w realnym projekcie do filtrowania danych używaj zapytań przygotowanych (prepare + bindParam), by uniknąć ataków SQL Injection.

Typowe błędy i jak ich uniknąć

Podczas pracy z PHP i MySQL bardzo łatwo o drobne pomyłki.
Oto kilka typowych błędów i jak sobie z nimi poradzić:

ProblemPrzyczynaRozwiązanie
„Access denied for user 'root’@’localhost’”Złe dane logowania do bazySprawdź login i hasło w polaczenie.php
„Unknown database 'sklep’”Baza nie istniejeUtwórz bazę w phpMyAdmin
Pusta tabela w przeglądarceBrak danych w tabeli lub błędne zapytanieWypisz $conn->error po zapytaniu
Polski tekst wyświetla się dziwnie (np. ą, ę, ś)Zły zestaw znakówDodaj charset=utf8 w połączeniu z bazą

Jak widzisz, wyświetlanie zawartości tabeli MySQL w PHP to naprawdę prosty proces, jeśli tylko wiesz, od czego zacząć.
W skrócie:

  1. Tworzysz bazę danych i tabelę w MySQL.
  2. Łączysz się z bazą przez PHP (MySQLi lub PDO).
  3. Pobierasz dane za pomocą SELECT * FROM tabela.
  4. Wyświetlasz wyniki w HTML.
  5. (Opcjonalnie) Stylizujesz tabelę CSS-em i dodajesz funkcje wyszukiwania.

Dzięki temu możesz tworzyć dynamiczne strony internetowe, panele administracyjne, systemy sklepowe i wiele innych projektów.

Szukasz taniego i dobrego hostingu dla swojej strony www? - Sprawdź Seohost.pl