30 dniowy kurs php – dzień 11 – formularze $_POST


Back-end (php, mysql)

Formularze pozwalają przesyłać i przetwarzać wprowadzone dane. Możesz np. poprosić odwiedzającego Twoją witrynę o podanie swojego imienia. Później zapisując tą informację np. w ciastkach (cookies, do tego jeszcze dojdziemy) możesz za każdym razem witać użytkownika podając jego imię.

Stwórz dwa pliki w katalogu dzien11: index.php i krok1.php. W pliku index.php umieścimy htmlowy formularz:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body>
<form action="krok1.php" method="post">
Imię: <input type="text" name="imie" />
<input type="submit" value="Dalej" />
</form>
</body>
</html>

A w pliku krok1.php skrypt odpowiadający za przechwycenie wpisanych danych.

<?php
echo $_POST['imie'] . ', witaj na mojej stronie!';
?>

Zauważ 2 istotne elementy. W pliku index.php w formularzu action odnosi się do pliku krok1.php. Oznacza to, że po kliknięciu przycisku typu submit (zatwierdzającego formularz) zostaniemy automatycznie przeniesieni do pliku krok1.php. Jeśli plik nie będzie istniał wyświetli się błąd o braku tegoż pliku.

Drugi element to metoda przesyłania informacji. W tagu method mamy wpisaną opcję post. Do wyboru są dwa typy: post i get. Metoda post przesyła dane w sposób ukryty, natomiast metoda get dopisuje w adresie ciąg przesyłanych znaków. Ze względów bezpieczeństwa lepiej więc używać metody post. Metoda get ma jednak też swoje plusy, o których szerzej w kolejnej lekcji.

I teraz, skoro przesłaliśmy dane metodą post musimy odebrać je również tą samą metodą. W php do tego celu służy polecenie $_POST, po którym występuje nawias kwadratowy. W nawiasie wpisujemy nazwę, którą podaliśmy w formularzu jako name wybranego elementu. W naszym wypadku pole input do wpisania imienia miało name=”imie”. Aby więc odebrać tą informację musimy wpisać $_POST[‚imie’].

Ale co jeśli ktoś nie wpisał swojego imienia? W takim wypadku, możemy go poinformować przy pomocy poznanej wcześniej funkcji if. Zmodyfikujmy więc plik krok1.php.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body>
<?php
$imie = $_POST['imie'];
if($imie == '')
{
 echo 'Nie podałeś imienia';
 die;
}
else
{
echo $_POST["imie"] . ', witaj na mojej stronie!';
}
?>
</body>
</html>

Dodatkowo dopisałem komendę die w przypadku braku podania imienia. Die kończy całkowicie dalsze wczytywanie strony, więc jeśli dodamy jeszcze jakąś treść nie zostanie ona wczytana bez podania imienia.

A co jeśli chcemy przenieść wartości z formularza na dalszy ciąg kroków? Stwórz sobie kolejny plik krok2.php. W pliku krok1.php dorzucimy jeszcze forumarz. W wartości hidden czyli ukrytej przeniesiemy imię na stronę krok2.php. Zmodyfikuj plik krok1.php:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body>
<?php
$imie = $_POST['imie'];
if($imie == '')
{
 echo 'Nie podałeś imienia';
 die;
}
else
{
echo $_POST["imie"] . ', witaj na mojej stronie!';
}
?>
<br/>
<form action="krok2.php" method="post">
<input type="hidden" name="imie" value="<?php echo $imie; ?>" />
Ile masz lat? <input type="text" name="wiek" />
<input type="submit" value="Dalej" />
</form>
</body>
</html>

A w pliku krok2.php wpisz poniższe dane:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body>
<?php
$imie = $_POST['imie'];
$wiek = $_POST['wiek'];
if($wiek == '')
{
 echo 'Nie podałeś wieku';
 die;
}
elseif($wiek < 18)
{
 echo 'Brak dostępu. Strona tylko dla dorosłych';
 die;
}
else
{
echo "$imie masz $wiek lat, możesz korzystać z tej strony";
}
?>
</body>
</html>

Jak widzisz dopisałem jeszcze dodatkowe argumenty w deklaracji if. Jeśli użytkownik wpisz wiek poniżej 18 lat nie uzyska dostępu. Imię pobierane jest z formularza z pliku krok1.php, w którym przekazaliśmy je w ukryty sposób.