Zanim zaczniesz

Wszystkie ćwiczenia tu używają POST. Ćwiczenia 8 i 11 korzystają z sesji, czyli danych zapamiętanych po stronie serwera dla danego użytkownika. Funkcja session_start() musi być wywołana na samym początku pliku, zanim PHP wypisze cokolwiek na ekran. W ćwiczeniu 8 kod pokazuje ją tuż przed formularzem, bo tak łatwiej to zobaczyć, ale w prawdziwym pliku stoi na samej górze.

Na tej stronie jest sześć formularzy POST naraz, więc każdy ma ukryte pole cw z numerem ćwiczenia. W kodzie do przepisania go nie ma. Przy jednym formularzu na stronie nie jest potrzebne.

7

Formularz rejestracyjny

POST

Formularz, w którym użytkownik podaje imię, e-mail oraz hasło wpisane dwa razy. Strona sprawdza, czy hasła są identyczne.

Na własną rękę: Wymagaj hasła o długości co najmniej 8 znaków i sprawdzaj to przed porównaniem obu haseł.

Wypróbuj

Kod do przepisania

<form method="post">
  Imię: <input type="text" name="imie"><br>
  E-mail: <input type="email" name="email"><br>
  Hasło: <input type="password" name="haslo1"><br>
  Powtórz hasło: <input type="password" name="haslo2"><br>
  <input type="submit" value="Zarejestruj">
</form>

<?php
if (isset($_POST['imie'])) {
    if ($_POST['haslo1'] === $_POST['haslo2']) {
        echo "Rejestracja udana!";
    } else {
        echo "Hasła nie są identyczne.";
    }
}
?>
8

Lista zakupów

POST

Formularz, w którym wpisujesz produkt. Każdy wpis trafia na listę zakupów przechowywaną w sesji.

Na własną rękę: Dodaj przy każdym produkcie przycisk do usuwania go z listy. Wskazówka: unset($_SESSION['lista'][$i]).

Wypróbuj

Lista jest pusta.

Kod do przepisania

<?php session_start(); ?>
<form method="post">
  Produkt: <input type="text" name="produkt">
  <input type="submit" value="Dodaj">
</form>

<?php
if (isset($_POST['produkt'])) {
    $_SESSION['lista'][] = $_POST['produkt'];
}
if (!empty($_SESSION['lista'])) {
    echo "<ul>";
    foreach ($_SESSION['lista'] as $p) {
        echo "<li>" . htmlspecialchars($p) . "</li>";
    }
    echo "</ul>";
}
?>
9

Mini quiz

POST

Trzy pytania jednokrotnego wyboru. Po wysłaniu strona podaje liczbę zdobytych punktów.

Na własną rękę: Dodaj czwarte pytanie z trzema odpowiedziami. Ile miejsc w kodzie musisz zmienić?

Wypróbuj

1. Stolica Polski?
2. 2 + 2 = ?
3. PHP to...

Kod do przepisania

<form method="post">
1. Stolica Polski? <br>
<input type="radio" name="p1" value="Warszawa">Warszawa
<input type="radio" name="p1" value="Kraków">Kraków<br><br>

2. 2+2=? <br>
<input type="radio" name="p2" value="4">4
<input type="radio" name="p2" value="5">5<br><br>

3. PHP to... <br>
<input type="radio" name="p3" value="język">język
<input type="radio" name="p3" value="system">system<br><br>

<input type="submit" value="Sprawdź">
</form>

<?php
$punkty = 0;
if (isset($_POST['p1']) && $_POST['p1'] == "Warszawa") $punkty++;
if (isset($_POST['p2']) && $_POST['p2'] == "4") $punkty++;
if (isset($_POST['p3']) && $_POST['p3'] == "język") $punkty++;
echo "Masz $punkty/3 punktów.";
?>
10

Formularz kontaktowy

POST

Formularz kontaktowy: imię, e-mail, wiadomość. Po wysłaniu wyświetl podsumowanie.

Na własną rękę: Sprawdzaj, czy wiadomość ma co najmniej 10 znaków, i pokaż, ile znaków jej brakuje.

Wypróbuj

Kod do przepisania

<form method="post">
Imię: <input type="text" name="imie"><br>
E-mail: <input type="email" name="email"><br>
Wiadomość: <textarea name="wiad"></textarea><br>
<input type="submit" value="Wyślij">
</form>

<?php
if (isset($_POST['imie'])) {
    echo "Dziękujemy, " . htmlspecialchars($_POST['imie']) . "! ";
    echo "Twoja wiadomość: " . htmlspecialchars($_POST['wiad']);
}
?>
11

Licznik w sesji

POST

Każde wysłanie formularza zwiększa licznik zapamiętany w sesji.

Na własną rękę: Odśwież stronę (F5) po kliknięciu i zobacz, że licznik nie rośnie. Zastanów się, dlaczego. Potem zamknij kartę, otwórz stronę ponownie i sprawdź, co się stało z licznikiem.

Wypróbuj

Formularz wysłany 0 razy.

Kod do przepisania

<?php session_start(); ?>
<form method="post">
  <input type="submit" value="Kliknij">
</form>

<?php
if (!isset($_SESSION['licznik'])) $_SESSION['licznik'] = 0;
if ($_SERVER['REQUEST_METHOD'] == "POST") $_SESSION['licznik']++;
echo "Formularz wysłany " . $_SESSION['licznik'] . " razy.";
?>
12

Upload pliku

POST

Formularz z wyborem pliku. Po wysłaniu wyświetl nazwę i rozmiar pliku.

Na własną rękę: Pokaż też typ pliku ($_FILES['plik']['type']) i przyjmuj tylko pliki poniżej 2 MB.

Wypróbuj

Plik tylko odczytujemy, na serwerze nie jest nigdzie zapisywany.

Kod do przepisania

<form method="post" enctype="multipart/form-data">
  Wybierz plik: <input type="file" name="plik">
  <input type="submit" value="Wyślij">
</form>

<?php
if (isset($_FILES['plik'])) {
    echo htmlspecialchars($_FILES['plik']['name']);
    echo $_FILES['plik']['size'] . " bajtów";
}
?>