Tworzenie prostego formularza kontaktowego w PHP obejmuje zarówno frontend (HTML) jak i backend (PHP). Formularz zbiera dane od użytkownika (np. imię, adres e-mail, wiadomość), a następnie za pomocą PHP przetwarza te dane i wysyła je na określony adres e-mail.
Kroki:
- Stwórz formularz w HTML.
- Przygotuj skrypt PHP do obsługi formularza.
- Wyślij dane z formularza za pomocą funkcji
mail().
Przykład formularza kontaktowego:
1. Formularz HTML (frontend):
Zacznij od stworzenia pliku HTML, który będzie zawierał formularz. Formularz wysyła dane metodą POST do skryptu PHP.
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Formularz kontaktowy</title>
</head>
<body>
<h2>Skontaktuj się z nami</h2>
<form action="kontakt.php" method="POST">
<label for="name">Imię:</label><br>
<input type="text" id="name" name="name" required><br><br>
<label for="email">E-mail:</label><br>
<input type="email" id="email" name="email" required><br><br>
<label for="message">Wiadomość:</label><br>
<textarea id="message" name="message" rows="5" required></textarea><br><br>
<input type="submit" value="Wyślij">
</form>
</body>
</html>
2. Skrypt PHP (backend):
Ten skrypt odbierze dane z formularza i wyśle je na podany adres e-mail.
Plik kontakt.php:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$to = "twoj@email.pl"; // Twój adres
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$message = trim($_POST["message"]);
// Podstawowa walidacja
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Nieprawidłowy adres email");
}
$subject = "Wiadomość z formularza kontaktowego";
$body = "Imię: $name\n";
$body .= "Email: $email\n\n";
$body .= "Wiadomość:\n$message";
$headers = [];
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-Type: text/plain; charset=UTF-8";
// UWAGA: From powinien być z Twojej domeny!
$headers[] = "From: Formularz kontaktowy <no-reply@twojadomena.pl>";
// TO JEST KLUCZOWE:
$headers[] = "Reply-To: $name <$email>";
mail($to, $subject, $body, implode("\r\n", $headers));
echo "Wiadomość została wysłana.";
}
?>
Jak to działa:
- Formularz HTML wysyła dane do pliku
kontakt.phpmetodąPOST. - Skrypt PHP odbiera dane, waliduje je (czy imię nie jest puste, e-mail jest poprawny, a wiadomość nie jest pusta).
- Jeśli wszystko jest poprawne, skrypt używa funkcji
mail(), aby wysłać wiadomość e-mail na podany adres. - Funkcja
mail()w PHP wysyła e-mail za pomocą serwera SMTP skonfigurowanego na serwerze, na którym jest hostowana strona.
Ważne uwagi:
- Walidacja danych: Skrypt weryfikuje dane, aby zapobiec wysyłaniu pustych lub niepoprawnych formularzy. Funkcja
filter_var()waliduje adres e-mail, ahtmlspecialchars()zapobiega atakom XSS. - Konfiguracja serwera: Aby funkcja
mail()działała poprawnie, serwer musi być skonfigurowany do wysyłania wiadomości e-mail (np. poprzez Sendmail lub inne narzędzie SMTP). W środowiskach lokalnych (np. XAMPP) możesz potrzebować dodatkowej konfiguracji, aby funkcjamail()działała poprawnie.
Jak zaimplementować formularz na stronie?
- Utwórz plik HTML z formularzem (np.
index.html). - Utwórz plik PHP obsługujący formularz (np.
kontakt.php). - Wgraj oba pliki na swój serwer (np. za pomocą FTP lub poprzez panel hostingowy).
- Upewnij się, że serwer jest skonfigurowany do obsługi PHP i wysyłania e-maili.
To bardzo prosty formularz kontaktowy. W prawdziwych projektach warto dodać dodatkowe zabezpieczenia, takie jak CAPTCHA, aby chronić formularz przed spamem, oraz lepszą walidację danych po stronie serwera.
Problem z przyciskiem „Odpowiedz”
Jeśli po kliknięciu „Odpowiedz” w kliencie poczty odpowiedź trafia do Ciebie zamiast do osoby, która wypełniła formularz, oznacza to brak nagłówka Reply-To.
Klient poczty nie analizuje treści wiadomości – korzysta wyłącznie z nagłówków email.
Aby odpowiedź trafiała do nadawcy formularza, należy dodać:
Reply-To: imie <email>
Jednocześnie nie zaleca się ustawiania pola From na adres użytkownika, ponieważ może to powodować problemy z dostarczalnością wiadomości.