Jak odbierać dane pochodzące z różnych pól formularza, PHP Skrypty


[PHP] Jak odbierać dane pochodzące z różnych pól formularza?

0x01 graphic

Chcesz się dowiedzieć jak odbierać dane pochodzące z różnych pól formularza, typu text, textarea, select, radio, checkbox czy hidden.

0x01 graphic

Przetwarzanie formularzy to podstawowa czynność, która pozwala na komunikację pomiędzy użytkownikiem i skryptami. W dużej mierze to właśnie formularze powodują, że strony mogą być interaktywne i dostosowane do wymagań odbiorcy. Zobacz jak tworzyć formularze i jak odbierać z nich wpisane (albo wybrane) przez użytkowników informacje.

Każdy formularz składa się z pól określonego rodzaju (pola wyboru lub pola tekstowego), które powinny mieć niepowtarzalne nazwy pozwalające na zidentyfikowanie ich. Użyjmy prostego przykładu z polami tekstowymi - całość możesz umieścić w pliku index.php i uruchomić w przeglądarce na serwerze z działającym PHP.

<form action="index.php" method="get">

tytuł strony: <input type="text" name="tytul"><br>

adres strony: <input type="text" name="adres" value="http://"><br>

<input type="submit" value=" wyślij dane ">

</form>

<?

echo $_GET["tytul"]." - ".$_GET["adres"];

?>

Pierwsza linijka określa jaki skrypt będzie przetwarzał dane pochodzące z formularza (u nas index.php w aktualnym katalogu - czyli ten sam, w którym znajduje się formularz) i jakiej metody wysyłania danych użyjemy (u nas GET, więcej o metodach przesyłania w osobnej poradzie - adres na końcu tekstu).

Pole tekstowe ma prostą konstrukcję - określasz jego typ jako text, nadajesz mu jakąś nazwę (u nas tytul i adres) i ewentualnie możesz dodać wstępną wartość value, która od razu pojawi się w okienku (u nas http://).

Po wciśnięciu guzika typu submit o nazwie "wyślij dane", wartości wpisane do formularza zostaną wysłane do skryptu PHP i tam będzie je można odczytać.

Odczytywanie danych

Aby odczytać wartość dowolnej zmiennej należy skorzystać z tablic globalnych dostępnych w nowych wersjach PHP:
$_GET["zmienna"] - dla zmiennych wysyłanych metodą GET
$_POST["zmienna"] - dla zmiennych wysyłanych metodą POST
$_REQUEST["zmienna"] - dla zmiennych wysyłanych metodą POST lub GET

Jeżeli korzystasz ze starszej wersji PHP (wcześniejszych niż 4.1.0) zmienne są przechowywane jako tablice o innej nazwie:
$HTTP_GET_VARS["zmienna"] - dla zmiennych wysyłanych metodą GET
$HTTP_POST_VARS["zmienna"] - dla zmiennych wysyłanych metodą POST

Jeżeli w pliku konfiguracyjnym php.ini dyrektywa register_globals jest ustawiona na On możesz odwoływać się do zminnych wprost, dodając do nich znak dolara, jak w wypadku każdej jednej zmiennej: $zmienna

Więcej informacji o tablicach i ustawieniach w pliku konfiguracyjnego php.ini znajdziesz w osobnej, obszernej poradzie, której adres jest podany na końcu tekstu.

Zakładam, że masz PHP w najnowszej wersji i stosować będziemy zalecany sposób odczytywania zmiennych za pomocą tablic opisanych jako pierwsze, a więc $_GET["zmienna"] i $_POST["zmienna"]. Tylko dla formalności będę podawał sposoby odczytania zmiennych według dwóch starszych sposobów (nie są zalecane).

Pola typu text

Przykład z polem tekstowym został już przedstawiony powyżej, ale użyję go jeszcze raz dodając po zalecanym sposobie odczytu, również inne sposoby - uruchamiając ten skrypt, zobaczysz, które ze sposobów odczytania zmiennych działają u Ciebie:

<form action="index.php" method="get">

tytul strony: <input type="text" name="tytul"><br>

adres strony: <input type="text" name="adres" value="http://"><br>

<input type="submit" value=" wyślij dane ">

</form>

<?

echo "<br>1.) ".$_GET["tytul"]." - ".$_GET["adres"];

echo "<br>2.) ".$HTTP_GET_VARS["tytul"]." - ".$HTTP_GET_VARS["adres"];

echo "<br>3.) $tytul - $adres";

?>

Oczywiście gdy zmienisz metodę wysyłania na POST, również w tablicach musisz zmienić GET na POST. Stosowanie GET jest wygodne w naszym przypadku, bowiem od razu, w odnośniku zobaczysz przekazywane zmienne, np:

index.php?tytul=Moja+Strona&adres=http%3A%2F%2Fwww.mojastrona.com%2F

Pola typu textarea

Pola te również pozwalają wprowadzać tekst, ale może on mieć więcej niż jedną linijkę. Zasada działania jest identyczna - pole musi mieć jakąś nazwę, którą odczytamy jako zmienną w skrypcie. Pamiętaj, że powinno się korzystać tylko z pierwszej metody odczytywania danych, choć w praktyce często stosowana jest także trzecia.

<form action="index.php" method="post">

<textarea name="pole1" rows="5" cols="12"></textarea>

<input type="submit" value=" wyślij dane ">

</form>

<?

echo "<br>1.) " . $_POST["pole1"];

echo "<br>2.) " . $HTTP_POST_VARS["pole1"];

echo "<br>3.) " . $pole1;

?>

Pola typu select

Pola typu select (czyli listy) mogą przyjmować jedną z kilku wartości lub kilka z przedstawionych wartości, jeżeli pole ma dopisany atrybut multiple. Wybierzemy więc jedno miasto i kilka ulubionych kolorów (aby wybrać kilka pozycji przytrzymaj klawisz ctrl)

<form action="index.php" method="get">

miejsce zamieszkania:<br>

<select name="miasto">

<option>Warszawa</option>

<option>Katowice</option>

<option>Sopot</option>

</select><br>

ulubione kolory:<br>

<select name="kolory[]" multiple>

<option>biały</option>

<option>czerwony</option>

<option>zielony</option>

</select><br>

<input type="submit" value=" wyślij dane ">

</form>

<?

echo "<br>1.) " . $_GET["miasto"];

echo "<br>2.) " . $HTTP_GET_VARS["miasto"];

echo "<br>3.) " . $miasto;

echo "<p>";

echo "<br>1.";

for ($i=0;$i<count($_GET["kolory"]);$i++) {

echo $_GET["kolory"][$i];

echo " ";

}

echo "<br>2.";

for ($i=0;$i<count($HTTP_GET_VARS["kolory"]);$i++) {

echo $HTTP_GET_VARS["kolory"][$i];

echo " ";

}

echo "<br>3.";

for ($i=0;$i<count($kolory);$i++) {

echo $kolory[$i];

echo " ";

}

?>

O ile w wypadku miasta, które może być tylko jedno, nie ma problemu z odczytaniem wartości, to w wypadku pól wielokrotnego wyboru trzeba zastosować pewien zabieg. Zauważ, że nazwa tego pola ma dodane dwa nawiasy kwadratowe w formularzu, co oznacza, że zmienna będzie tablicą. W tablicy można przechować kilka wybranych wartości.

W pętli for() za pomocą funkcji count() obliczamy ile wartości zostało przekazanych z formularza i wypisujemy je na ekran. Poszczególne elementy tablicy zawierają wartości z zaznaczonych pól. Można w ten sposób stwierdzić jakie pola zostały wybrane i ile tych pól wybrano.

Pola typu checkbox

Ponieważ można zaznaczyć kilka pól typu checkbox, również trzeba zastosować rozwiązane z tablicą opisane powyżej. Do nazwy zmiennej trzeba dodać nawiasy kwadratowe, a dane odczytać w pętli.

<form action="index.php" method="get">

ulubiona potrawa:

<br><input type="checkbox" name="potrawa[]" value="rosół">rosół

<br><input type="checkbox" name="potrawa[]" value="pizza">pizza

<br><input type="checkbox" name="potrawa[]" value="kurczak">kurczak

<br><input type="submit" value=" wyślij dane ">

</form>

<?

echo "<br>1.";

for ($i=0;$i<count($_GET["potrawa"]);$i++) {

echo $_GET["potrawa"][$i];

echo " ";

}

echo "<br>2.";

for ($i=0;$i<count($HTTP_GET_VARS["potrawa"]);$i++) {

echo $HTTP_GET_VARS["potrawa"][$i];

echo " ";

}

echo "<br>3.";

for ($i=0;$i<count($potrawa);$i++) {

echo $potrawa[$i];

echo " ";

}

?>

Pola typu radio

Ponieważ można wybrać tylko jedno pole typu radio, odczytanie danych jest bardzo proste, podobnie jak w przypadku pól tekstowych.

<form action="index.php" method="get">

ile masz lat:

<br><input type="radio" name="wiek" value="10">10

<br><input type="radio" name="wiek" value="20">20

<br><input type="radio" name="wiek" value="30">30

<br><input type="radio" name="wiek" value="40">40

<br><input type="submit" value=" wyślij dane ">

</form>

<?

echo "<br>1.) " . $_GET["wiek"];

echo "<br>2.) " . $HTTP_GET_VARS["wiek"];

echo "<br>3.) " . $wiek;

?>

Kombinacje pól

Nic nie stoi na przeszkodzie aby połączyć wiele pól w jednym formularzu. Stwórzmy banalny formularz do pobrania uwag na temat serwisu. Zebrane dane wyświetlone zostaną na ekranie, ale równie dobrze można je zapisać w pliku lub wysłać pocztą elektroniczną pod wskazany adres.

<form action="index.php" method="post">

<br>Twoje imie: <br><input type="text" name="imie">

<br>Twoje nazwisko: <br><input type="text" name="nazwisko">

<br>Twój e-mail: <br><input type="text" name="email">

<br>Uwagi:

<br><textarea name="tresc" rows="5" cols="12"></textarea>

<br>Czy odpowiedź na list jest konieczna?

<br><input type="radio" name="odp" value="tak">tak

<br><input type="radio" name="odp" value="nie">nie

<br>Twoja opinia o serwisie?

<br><input type="checkbox" name="opinia[]" value="ciekawy">ciekawy

<br><input type="checkbox" name="opinia[]" value="miły">miły

<br><input type="checkbox" name="opinia[]" value="czytelny">czytelny

<br>Skąd go znasz?

<br><select name="skad">

<option>z prasy</option>

<option>z wyszukiwarek</option>

<option>znajomi opowiadali...</option>

</select><br>

<br><input type="submit" value=" wyślij dane ">

</form>

<?

echo " ".$_POST["imie"];

echo " ".$_POST["nazwisko"];

echo " ".$_POST["email"];

echo " ".$_POST["tresc"];

echo " ".$_POST["odp"];

for ($i=0;$i<count($_POST["opinia"]);$i++) {

echo " ".$_POST["opinia"][$i];

}

echo " ".$_POST["skad"];

?>

Oczywiście dane są trywialne, a formularz specjalnie nie został ładnie sformatowany, aby pokazać sam mechanizm i sposób odczytywania danych. Pobrane informacje powinny przejść jeszcze dodatkową weryfikację - skasowane powiny zostać zbędne spacje czy sprawdzona poprawność adresu e-mail, ale zależy to już od konkretnego przypadku i konstrukcji formularza.

0x01 graphic

[HTML/CSS] Czym różni się przesyłanie danych z formularza za pomocą metod POST i GET?

[PHP] Dlaczego w nowych wersjach PHP należy odczytywać zmienne za pomocą $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES, $_REQUEST i $_SESSION?



Wyszukiwarka

Podobne podstrony:
Jak dopisać dane na początku pliku tekstowego, PHP Skrypty
Jak przesłać ręcznie metodą POST dane do skryptu przetwarzającego formularze, PHP Skrypty
Jak zapisać dane pochodzące z animacji do pliku lub do bazy danych, PHP Skrypty
Jak stworzyć zaawansowany test wyboru lub quiz, PHP Skrypty
jak miedzy stronami przesłać zmienne korzystajac z sesji, PHP Skrypty
Jak zrobić licznik pobrań plików ze strony, PHP Skrypty
Jak zrobić przekierowanie z jednej strony na drugą, PHP Skrypty
jak wypisac zawartosc bazy danych dBase (dbf), PHP Skrypty
Jak wygenerować statyczny plik .html z bazy danych, PHP Skrypty
Jak zamienić liczby na kwoty zapisane słownie, PHP Skrypty
jak samodzielnie obliczyc numer dnia w dowolnym roku, PHP Skrypty
Jak wysłać list do grup dyskusyjnych USENET, PHP Skrypty
jak stworzyc licznik klikniec ze statystyka dzienną, PHP Skrypty
Jak cenzurować wypowiedzi i brzydkie słowa na forum, PHP Skrypty
jak w grafice zmienic wybrane kolory na inne, PHP Skrypty
jak wykonac strone z logowaniem do innej strony, PHP Skrypty
Jak automatycznie pokolorować na przemian wiersze tabeli, PHP Skrypty
Jak stworzyć zaawansowany test wyboru lub quiz, PHP Skrypty
jak przeslac dane z pol tekstowych do innych stron, PHP Skrypty

więcej podobnych podstron