Výpis dat na základě výběru uživatele (formulář)
Tento skript bude rozdělen pro jednoduchost na 2 soubory:
- soubor bude obsahovat jednoduchý HTML formulář a pomocí GET metody pošleme data do 2. souboru – např. vyber_produkt.php
- 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.
