PHP | Formularze · Technik informatyk egzamin zawodowy

Programowanie / PHP

PHP | Formularze

Formularze HTML umożliwiają użytkownikom przesyłanie danych, ale to PHP odpowiada za ich odbiór i przetwarzanie na serwerze. W tym artykule omówimy podstawy obsługi formularzy w PHP, sposoby przesyłania danych oraz ich walidację.

Tworzenie formularza HTML

Formularz w HTML umożliwia wprowadzenie różnych typów danych przez użytkownika, które następnie są przesyłane do serwera w celu ich dalszego przetwarzania. Możemy korzystać z pól tekstowych, przycisków wyboru (radio), list rozwijanych (select), pól wyboru (checkbox) oraz obsługi plików (file).

Przykładowy formularz HTML przesyłający dane metodą POST:

<form action="formularz.php" method="POST" enctype="multipart/form-data">
    <label for="imie">Imię:</label>
    <input type="text" name="imie" id="imie" required>
    
    <label for="email">Email:</label>
    <input type="email" name="email" id="email" required>
    
    <label for="haslo">Hasło:</label>
    <input type="password" name="haslo" id="haslo" required>
    
    <label>Płeć:</label>
    <input type="radio" name="plec" value="M"> Mężczyzna
    <input type="radio" name="plec" value="K"> Kobieta
    
    <label for="jezyki">Wybierz język:</label>
    <select name="jezyki" id="jezyki">
        <option value="pl">Polski</option>
        <option value="en">Angielski</option>
        <option value="de">Niemiecki</option>
    </select>
    
    <label>Zgoda na przetwarzanie danych:</label>
    <input type="checkbox" name="zgoda" value="1">
    
    <label for="plik">Załącz plik:</label>
    <input type="file" name="plik" id="plik">
    
    <button type="submit">Wyślij</button>
</form>

 

Odbiór danych w PHP

Po przesłaniu formularza PHP odbiera dane za pomocą tablicy $_POST oraz $_FILES. Warto sprawdzić, czy dane są poprawnie przesłane i obsłużyć sytuacje, gdy brakuje wymaganych pól.

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $imie = $_POST['imie'] ?? '';
    $email = $_POST['email'] ?? '';
    $haslo = $_POST['haslo'] ?? '';
    $plec = $_POST['plec'] ?? 'Nie podano';
    $jezyk = $_POST['jezyki'] ?? 'Nie wybrano';
    $zgoda = isset($_POST['zgoda']) ? "Tak" : "Nie";
    
    echo "<h3>Otrzymane dane:</h3>";
    echo "Imię: $imie <br>";
    echo "Email: $email <br>";
    echo "Hasło: (ukryte) <br>";
    echo "Płeć: $plec <br>";
    echo "Wybrany język: $jezyk <br>";
    echo "Zgoda na przetwarzanie danych: $zgoda <br>";
}

 

Obsługa przesyłania plików

Przesyłanie plików odbywa się poprzez tablicę $_FILES. Kluczowe parametry pliku to:

  • name – oryginalna nazwa pliku,

  • tmp_name – tymczasowa ścieżka na serwerze,

  • size – rozmiar pliku w bajtach.

Aby zabezpieczyć aplikację, warto sprawdzać format pliku i jego maksymalny rozmiar.

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_FILES['plik'])) {
    $nazwaPliku = $_FILES['plik']['name'];
    $tymczasowaSciezka = $_FILES['plik']['tmp_name'];
    $rozmiarPliku = $_FILES['plik']['size'];
    
    if ($rozmiarPliku > 0 && $rozmiarPliku < 2097152) { // Maks. 2MB
        move_uploaded_file($tymczasowaSciezka, "uploads/" . $nazwaPliku);
        echo "Plik $nazwaPliku został przesłany!";
    } else {
        echo "Błąd przesyłania pliku lub plik za duży.";
    }
}

 

Walidacja i filtrowanie danych

Aby uniknąć błędów i ataków, dane należy filtrować:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $imie = htmlspecialchars(strip_tags(trim($_POST['imie'])));
    $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
    $haslo = trim($_POST['haslo']);
    
    if (!$email) {
        echo "Błąd: Niepoprawny adres email.";
    } else {
        echo "<h3>Otrzymane dane:</h3>";
        echo "Imię: $imie <br>";
        echo "Email: $email <br>";
    }
}

 

Zagrożenia związane z obsługą formularzy

Obsługa danych wejściowych może prowadzić do różnych zagrożeń, dlatego warto zwrócić uwagę na:

  • SQL Injection – należy unikać wstrzykiwania niebezpiecznego kodu SQL poprzez stosowanie przygotowanych zapytań (prepared statements).

  • Cross-Site Scripting (XSS) – zabezpieczenie się przed wstrzyknięciem złośliwego kodu HTML i JavaScript poprzez funkcję htmlspecialchars().

  • Cross-Site Request Forgery (CSRF) – dodanie tokena zabezpieczającego do formularza i weryfikacja jego poprawności.

  • Bezpieczeństwo haseł – zamiast przechowywać hasła w formie tekstowej, należy je hashować przy pomocy password_hash().