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:
- zapisanie wprowadzonych danych do pliku tekstowego,
-
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.:
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/.