< Všechna témata
Tisk

Výpis dat na základě výběru uživatele (formulář)

Tento skript bude rozdělen pro jednoduchost na 2 soubory:

  1. soubor bude obsahovat jednoduchý HTML formulář a pomocí GET metody pošleme data do 2. souboru – např. vyber_produkt.php
  2. soubor zpracuje data z formuláře, pomocí GET a následně na základě upraveného dotazu zobrazí požadovaná data – např. report_prodeje.php

Statický formulář

Jako první možnost je využití nejjednoduššího statického formuláře.

Data, která se uživateli zobrazí natvrdo (která zadám v kódu). Uživateli zobrazím název výrobku, ale pomocí metody GET posílám ID výrobku.

A to na stránku report_prodeje.php

<?php
$pageTitle = "Výběr produktu"; // název stránky - NEODSTRAŇUJ!
include 'header.php'; // vloží předchystané menu ze šablony - NEODSTRAŇUJ!
include 'db.php';

?>
    <form action="report_prodeje.php" method="GET">
        <label for="produkt">Vyberte produkt:</label>
        <select name="produkt_id" id="plodina">
            <option value="1">iPhone 15</option>
            <option value="2">MacBook Pro 14"</option>
            <option value="3">iPad Air</option>
            <option value="4">Apple Watch Series 9</option>
            <option value="5">AirPods Pro</option>
            <option value="6">iPhone 15 Pro Max</option>
            <option value="7">MacBook Air M3</option>
            <option value="8">iPad Pro</option>
            <option value="9">Apple Watch Ultra 2</option>
            <option value="10">AirPods</option>
        </select>
        <button type="submit">Odeslat</button>
    </form>
</div>
</body>
</html>

Dynamický formulář

Další možností (a lepší) je využít dynamický formulář. Data se zobrazují z databáze. Pokud tedy přidám do db produkt, nemusím ho psát do tohoto formuláře.

Na začátku si vytvořím dotaz, kdy vyberu sloupec s id, který posílám do GET a sloupec s názvem, který budu uživateli v select zobrazovat.

Potom vypíšu klasický HTML formulář, ale option value volám již pomocí while cyklus a hodnoty zobrazuji pomocí PHP direktiv.

<?php
$pageTitle = "Výběr produktu"; // název stránky - NEODSTRAŇUJ!
include 'header.php'; // vloží předchystané menu ze šablony - NEODSTRAŇUJ!
include 'db.php';

// Získání dat produktů z databáze pomocí SQL dotazu
$sql = "SELECT id, nazev FROM produkty";
$result = mysqli_query($mysqli, $sql);

?>

<form action="report_prodeje.php" method="GET">
    <label for="produkt">Vyberte produkt:</label>
    <select name="produkt_id" id="produkt">
        <?php while ($row = mysqli_fetch_assoc($result)): ?>
            <option value="<?= $row['id'] ?>"><?= $row['nazev'] ?></option>
        <?php endwhile; ?>
    </select>
    <button type="submit">Odeslat</button>
</form>
</div>
</body>
</html>

Jak vypadá

Je funkční, po zvolení vypíše report. To je popsáno níže.

SQL dotaz – s použitím JOIN

Spojení tabulek probíhá pomocí JOIN, viz předchozí příklad,
a pomocí WHERE filtrujeme na základě vybraného produktu.

Hodnota proměnné $produkt_id určuje, který produkt vybereme

SELECT p.id, p.nazev, p.kategorie, p.cena, s.datum_prodeje, s.mnozstvi, p.cena * s.mnozstvi AS cenaCelkem
FROM produkty p
JOIN prodeje s ON p.id = s.produkt_id
WHERE p.id = $produkt_id
ORDER BY s.datum_prodeje

SQL dotaz – čistě s WHERE

Spojení tabulek probíhá pomocí WHERE, viz předchozí příklad,
a s přidáním AND ve WHERE části přidáme další filtr na základě vybraného produktu.

Hodnota proměnné $produkt_id určuje, který produkt vybereme

SELECT p.id, p.nazev, p.kategorie, p.cena, s.datum_prodeje, s.mnozstvi, p.cena * s.mnozstvi AS cenaCelkem
FROM produkty p, prodeje s
WHERE p.id = s.produkt_id AND p.id = $produkt_id
ORDER BY s.datum_prodeje

PHP Skript

Skript je podobný předchozímu příkladu.

Zde navíc získáváme do proměnné $produkt_id data z formuláře, pomocí GET.

Následně tuhle proměnnou přidáme jako podmínku do dotazu, viz výše.

<?php
$pageTitle = "Report prodejů"; // název stránky - NEODSTRAŇUJ!
include 'header.php'; // vloží předchystané menu ze šablony - NEODSTRAŇUJ!
include 'db.php';
?>

<table class="table table-bordered text-center">
    <thead class="table-dark">
    <tr>
        <th>ID</th>
        <th>NÁZEV</th>
        <th>KATEGORIE</th>
        <th>CENA</th>
        <th>DATUM PRODEJE</th>
        <th>MNOŽSTVÍ</th>
        <th>CENA CELKEM</th>

    </tr>
    </thead>

    <?php
    $produkt_id = $_GET['produkt_id'];

    $sql = "SELECT p.id, p.nazev, p.kategorie, p.cena, s.datum_prodeje, s.mnozstvi, p.cena * s.mnozstvi AS cenaCelkem
            FROM produkty p
            JOIN prodeje s ON p.id = s.produkt_id
            WHERE p.id = $produkt_id
            ORDER BY s.datum_prodeje";

    $result = $mysqli->query($sql);

    while($row = $result->fetch_assoc()): ?>
        <tr>
            <td><?= $row["id"] ?></td>
            <td><?= $row["nazev"]?></td>
            <td><?= $row["kategorie"]?></td>
            <td><?= $row["cena"]?> Kč</td>
            <td><?= $row["datum_prodeje"]?></td>
            <td><?= $row["mnozstvi"]?> ks</td>
            <td><?= $row["cenaCelkem"]?> Kč</td>
        </tr>
    <?php endwhile; ?>

</table>
</body>

Výsledek

Report prodeje s vybraným produkt_id s číslem 6.

Obsah
© 2025 Lukáš Pospíšil