Przekierowanie po zapisie

Formularze: GET i POST - PHP i MySQL: strony z bazą danych (PHP i MySQL)

Po zapisie skrypt wysyła nagłówek Location i kończy działanie (exit). Przeglądarka wczytuje wtedy stronę zwykłym żądaniem GET, więc odświeżenie nie wyśle zamówienia drugi raz. Parametr ?dodano=1 w adresie pozwala pokazać komunikat. Ten wzorzec nazywa się POST, przekierowanie, GET.

<?php
$db = mysqli_connect("localhost", "root", "", "kwiaciarnia");
if (isset($_POST["kwiat"])) {
    $stmt = mysqli_prepare($db, "INSERT INTO zamowienia (kwiat_id, ilosc, klient) VALUES (?, ?, ?)");
    mysqli_stmt_bind_param($stmt, "iis", $_POST["kwiat"], $_POST["ilosc"], $_POST["klient"]);
    mysqli_stmt_execute($stmt);
    header("Location: index.php?dodano=1");
    exit;
}
if (isset($_GET["dodano"])) {
    echo "<p>Zamówienie zapisane.</p>";
}
?>

<form method="post">
  <select name="kwiat">
<?php
$result = mysqli_query($db, "SELECT id, nazwa FROM kwiaty");
while ($row = mysqli_fetch_assoc($result)) {
    echo "<option value='" . $row["id"] . "'>" . $row["nazwa"] . "</option>";
}
?>
  </select>
  <input type="number" name="ilosc" placeholder="ilość">
  <input type="text" name="klient" placeholder="nazwisko">
  <button>Zamów</button>
</form>
<?php
$result = mysqli_query($db, "SELECT zamowienia.id, nazwa, ilosc, klient FROM zamowienia JOIN kwiaty ON kwiaty.id = zamowienia.kwiat_id");
while ($row = mysqli_fetch_assoc($result)) {
    echo "<p>" . $row["klient"] . ": " . $row["nazwa"] . " x " . $row["ilosc"] . "</p>";
}
mysqli_close($db);
?>

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu PHP i MySQL: strony z bazą danych·Zaloguj się, aby zapisać postęp na koncie.