13. PHP – odbieranie danych z przeglądarki – formularze html, metody GET i POST. Wysyłanie danych do przeglądarki.


Przykład

Poniżej znajduje się przykład przedstawiający zapis danych do pliku z formularza. Formularz przesyła dane metodą GET, możesz wtedy podglądać dane w pasku URL przeglądarki. W praktyce bezpieczniej jest stosować metodę POST – ukrytą.

Dane zapisywane do pliku są zbierane w zmiennej $info.

Plik formularz.php

<?php
/*
echo "<pre>";
print_r($_GET);
//var_dump($_GET);
echo "</pre>";
*/
if (isset($_GET['przycisk'])) //!empty()
{
    if (!empty($_GET['imie']) && !empty($_GET['nazwisko'])) {
        $imie = $_GET['imie'];
        echo "<p>Witaj {$_GET['nazwisko']} $imie na mojej stronie.</p>";

        $info = "<p>Przekazałeś następujące dane: </p>";
        if (!empty($_GET['wiadomosc'])) $info .= "<p>Wiadomość: {$_GET['wiadomosc']}</p>";

        if (!empty($_GET['plec'])) $info .= "<p>Płeć: {$_GET['plec']}</p>";

        if (!empty($_GET['gra1']) || !empty($_GET['gra2']) || !empty($_GET['gra3'])) {
            $info .= "<p>Ulubione gry: ";
            if (!empty($_GET['gra1'])) $info .= $_GET['gra1'] . ", ";
            if (!empty($_GET['gra2'])) $info .= $_GET['gra2'] . ", ";
            if (!empty($_GET['gra3'])) $info .= $_GET['gra3'] . ", ";
            $info .= "</p>";
        }

        if (!empty($_GET['food'])) {
            $info .= "<p>Ulubione jedzenie: ";
            foreach ($_GET['food'] as $f) {
                $info .= $f . ", ";
            }
            $info .= "</p>";
        }

        if (!empty($_GET['klasa'])) $info .= "<p>Klasa: {$_GET['klasa']}</p>";

        if (!empty($_GET['hobby'])) {
            $info .= "<p>Hobby: ";
            foreach ($_GET['hobby'] as $h) {
                $info .= $h . ", ";
            }
            $info .= "</p>";
        }
        $info .= "<hr>";
        echo $info;


        //zapis do pliku
        $file = "dane.txt";
        $f = fopen($file, 'a+');
        flock($f, 2);
        fwrite($f, $info);
        flock($f, 3);
        fclose($f);
    } else {
        echo "Wprowadź wszystkie dane.<br/><br/>";
    }
} else {
    echo "Prześlij formularz.<br/><br/>";
}
?>

<form action="" method="GET">
    Nazwisko: <input type="text" name="nazwisko" />
    Imię: <input type="text" name="imie" />
    <br /><br />
    <p>Wiadomość: <textarea name="wiadomosc" cols="30" rows="10"></textarea></p>
    <p>Płeć:
        <input type="radio" name="plec" value="k"> Kobieta
        <input type="radio" name="plec" value="m"> Mężczyzna
        <input type="radio" name="plec" value="i"> inne
    </p>
    <p>Ulubione gry:
        <input type="checkbox" name="gra1" value="CS"> CS
        <input type="checkbox" name="gra2" value="LOL"> LOL
        <input type="checkbox" name="gra3" value="WOW"> WOW
    </p>
    <p>Ulubione jedzenie:
        <input type="checkbox" name="food[]" value="pizza"> pizza
        <input type="checkbox" name="food[]" value="bigos"> bigos
        <input type="checkbox" name="food[]" value="jajecznica"> jajecznica
        <input type="checkbox" name="food[]" value="lody"> lody
        <input type="checkbox" name="food[]" value="zurek"> żurek
        <input type="checkbox" name="food[]" value="cos"> coś
    </p>
    <p>Klasa:
        <select name="klasa">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
        </select>
    </p>

    <p>Hobby:
        <select name="hobby[]" multiple>
            <option value="IT">IT</option>
            <option value="PHP">PHP</option>
            <option value="sport">sport</option>
            <option value="ryby">ryby</option>
        </select>
    </p>

    <p><input type="submit" name="przycisk" value="Wyślij" /></p>
</form>

<a href="podglad.php" target="_blank" rel="noopener noreferrer">Podgląd pliku</a>

?>

Plik podglad.php

<?php

/*********************************************
* plik podglad.php
*********************************************/
$plik = fopen('dane.txt','r'); 
$zawartosc = ''; 
// przypisanie zawartości do zmiennej 
while(!feof($plik)) 
{ 
    $linia = fgets($plik); 
    $zawartosc .= $linia; 
} 
echo $zawartosc; 
echo "<a href=\"formularz.php\">Dodaj kolejne dane </a>
<br>
<a href=\"del.php\"> Usuń plik</a>"; 

?>

Plik usun_plik.php

<?php
// usunięcie pliku
unlink("dane.txt");

echo "<a href=\"formularz.php\">Dodaj dane</a><br><br>"; 
echo "Plik został usunięty";
?>

Zadania:

W każdym zadaniu należy sprawdzić, czy dane istnieją. Używaj metody bezpiecznej, chyba że rodzaj zadania wymaga innego podejścia.

Zadanie 1: Stwórz formularz, który na podstawie podanych przez użytkownika ilości kolumn i wierszy, narysuje tabelę w HTMLu. Wypełnij pola tabeli losowymi kolorami.

Zadanie 2: Stwórz formularz, który po kliknięciu przycisku będzie losował liczby totolotka (zakres 1-49), umożliw podanie użytkownikowi ilości zestawów do wygenerowania. (np. wpisuje 3 – więc 3 razy generuje się zestaw itd.).

Zadanie 3: Stwórz formularz, który będzie zawierał listę rzeczy do kupienia. W tabeli wyświetl produkt, ilość i cenę. Produkt ma zawierać checkboxa oraz nazwę; ilość i cena mogą być edytowane (po pierwszym uruchomieniu wypełnione dowolnymi wartościami – ty decydujesz). Zadeklaruj przynajmniej 6 produktów do wyboru. Po wybraniu produktów (zaznaczeniu checkboxów) i wysłaniu formularza wyświetli się paragon, tak jak w sklepie (poszukaj jakiegoś w plecaku i wykorzystaj za wzór).

Zadanie 4: Stwórz grę „papier, kamień, nożyce”. Informację o wyniku przechowuj w zmiennej sesyjnej. Jeżeli nie znasz jeszcze sesji to możesz wynik danego gracza przekazywać w polu ukrytym

np. <input type=”hidden” name=”licznik_player” value=”<?=$licznik_player?>”>

Zadanie 5: Stwórz rozbudowany formularz danych użytkownika w PHP, który umożliwia:

  1. zapisanie wprowadzonych danych do pliku tekstowego,
  2. odczytanie zapisanych danych i ich czytelne wyświetlenie w przeglądarce.

Formularz powinien zawierać m.in.:

Dane osobowe

  • Imię i nazwisko (pole tekstowe)

  • Adres e-mail (pole typu email)

  • Hasło (pole typu password)

  • Numer telefonu (pole typu tel)

  • Data urodzenia (pole typu date)

  • Wiek (pole typu number)

  • Płeć (radio button: mężczyzna / kobieta / inne)

  • Zdjęcie profilowe (upload pliku) – opcjonalne

Dane adresowe

  • Ulica i numer domu

  • Kod pocztowy

  • Miasto

  • Województwo (lista rozwijana select)

  • Kraj (lista rozwijana select)

  • Współrzędne GPS (pole tekstowe)

Dane zawodowe

  • Stanowisko

  • Nazwa firmy

  • Doświadczenie zawodowe (liczba lat)

  • Branża (lista rozwijana z możliwością wyboru kilku opcji – multiple)

  • Przedział wynagrodzenia (range)

Preferencje i zainteresowania

  • Ulubione kolory (color)

  • Ulubione dni tygodnia (checkbox)

  • Ulubiona godzina (time)

  • Ulubiony miesiąc (month)

  • Adres strony internetowej (url)

  • Krótki opis zainteresowań (textarea)

  • Upload pliku CV (file) – opcjonalnie

  • Zgoda na newsletter (checkbox)

  • Ocena poziomu satysfakcji (range)

Inne elementy

  • Pole ukryte (hidden) – np. data wysłania formularza

  • Przycisk wyczyszczenia formularza (reset)

  • Przycisk wysyłania (submit)


Zapis danych do pliku

Po przesłaniu formularza dane użytkownika powinny zostać zapisane do pliku tekstowego (np. dane.txt).
Każdy wiersz w pliku powinien zawierać dane jednego użytkownika, rozdzielone średnikami (;) — np.:

Jan Kowalski;jan.kowalski@example.com;35;mężczyzna;Warszawa;Programista;IT;#3498db;Tak;2025-10-27

Do zapisu możesz wykorzystać funkcje PHP takie jak:

  • fopen(),

  • fputcsv() – poczytaj o tej funkcji w dokumentacji technicznej

  • fclose().


Odczyt danych (dane.php)

Dane powinny wyświetlać się w formie tabeli HTML. Tabela powinna:

  • mieć nagłówki kolumn,

  • prezentować wszystkie zapisane dane użytkowników,

  • wyświetlać komunikat „Brak zapisanych danych”, jeśli plik jest pusty.


Wymagania techniczne

  • Walidacja pól formularza po stronie HTML5 (np. required, min, max, pattern).

  • Dane powinny być zabezpieczone przed wstrzyknięciami HTML (np. za pomocą htmlspecialchars()).

  • Użytkownik po przesłaniu formularza powinien zobaczyć komunikat o poprawnym zapisie danych.

  • Pliki przesyłane przez użytkownika (np. zdjęcie, CV) powinny być zapisywane w katalogu uploads/.