30 dniowy kurs php – dzień 12 – formularze $_GET


Back-end (php, mysql)

Na pewno znasz serwis youtube. Jeśli włączysz jakieś video zobaczysz, że w adresie przeglądarki jest dość długi bliżej nie zrozumiany ciąg znaków. Czasami jest on dłuższy, czasami krótszy, ale weźmy pod uwagę przykład http://www.youtube.com/watch?v=YJeZ5KiDapo

I jest to właśnie przykład użytej metody $_GET. Co ciekawe metoda ta nie musi być koniecznie użyta w formularzu. Może to być zwykły link, z którego pobierzemy wartości omawianą metodą. Ale o tym za moment.

Jak rozpoznać parametry w adresie? Początek parametrów zawsze zaczyna się znakiem zapytania. Po pytajniku pojawiają się parametry. Mamy nazwę parametru, znak równości i wartość parametru. Każdy kolejny parametr oddzielany jest znakiem &. Sprawdźmy jak zadziała to w formularzu. W folderze wamp/www/dzien12 plik index.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body> 

 <form action="krok1.php" method="get">
 Imię: 
 <input type="text" name="imie" />
 Wiek: 
 <input type="text" name="wiek" />

 <input type="submit" value="Dalej" />
 </form>

</body>
</html>

i plik krok1.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body>

 <?php

 $imie = $_GET['imie'];
 $wiek = $_GET['wiek'];
 if(!is_numeric($wiek))
 {
 echo 'nieprawidłowy wiek <br/>';
 }
 if(!$imie)
 {
 echo 'nie podałeś imienia <br/>';
 }
 echo "$imie <br/> $wiek";

 ?>

</body>
</html>

Teraz formularz działa nam podobnie jak przy metodzie $_POST. Widoczną różnicą są jednak dane widoczne w adresie po przejściu z formularza na stronę krok1.php. Doszła nam też nowa komenda is_numeric, która sprawdza czy dane wyrażenie jest wartością liczbową. Wykrzyknik symbolizuje negację (omówiony w lekcji o operatorach), czyli w deklaracji if warunkiem jest zmienna $wiek jako wartość nie liczbowa. Jeśli warunek zostaje spełniony wyświetla się komunikat „nieprawidłowy wiek”. Podobnie z imieniem, wykrzyknik neguje zmienną $imie, więc jeśli zmienna $imie jest pusta zostaje uruchomiona dyrektywa wyświetlająca tekst „nie podałeś imienia”.

Podaj swoje imię i wiek w formularzu, a po zatwierdzeniu zobaczysz w adresie przeglądarki podobne wartości:

http://localhost/KursPHP/dzien12/krok1.php?imie=Adrian&wiek=25

Teraz nie cofając się do strony z formularzem zmodyfikuj w adresie wartości wpisując dowolne dane zamiast imienia i liczby odpowiadającej za wiek. Zatwierdzając zmianę enterem zobaczysz, że zmieni się również wyświetlany tekst, który pobierany jest właśnie z paska adresu metodą $_GET.

Chyba teraz rozumiesz już względy bezpieczeństwa, które przemawiają za metodą $_POST.

Jak wspominałem, można używać tej metody nie tylko w formularzach. Możemy sami tworzyć linki z odpowiednimi parametrami, które później zostaną pobrane parametrem $_GET. Stwórz sobie nowy plik o nazwie link.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body>

<a href="get.php?tlo=red">Strona z czerwonym tłem</a>
<br/>
<a href="get.php?tlo=green">Strona z zielonym tłem</a>

</body>
</html>

oraz plik get.php

<?php
$tlo = $_GET['tlo'];
?>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Formularz</title>
</head>
<body style="background-color:<?php echo $tlo; ?>;">

</body>
</html>

Teraz uruchom ścieżkę http://localhost/KursPHP/dzien12/link.php zakładając, że właśnie tam jest Twój plik link.php. Klikając w jeden z dwóch linków jesteś przenoszony na stronę get.php na której pobierana jest informacja z paska adresu zatytułowana „tlo”. Później tą informację wyświetlamy w stylu background-color w tagu html body. Dzięki temu strona wyświetla się w kolorze zależnym od wartości przekazanej w linku.

Jak widzisz metoda ta może mieć bardzo szerokie zastosowanie i wyświetlać np. różną zawartość strony w dynamiczny sposób.