Zmienne ze źródeł zewnętrznych

Zmienne ze źródeł zewnętrznych

Formularze HTML (GET i POST)

Kiedy do skryptu PHP zostanie wysłany formularz, informacja z niego jest automatycznie dostępna w skrypcie. Istnieje wiele sposobów na uzyskanie tych informacji, dla przykładu:

Example #1 Prosty formularz HTML

<form action="foo.php" method="post">
    Imie:  <input type="text" name="imie" /><br />
    Email: <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="Wyslij!" />
</form>

W zależności od twoich szczególnych ustawień i osobistych upodobań, istnieje wiele sposobów dostępu do danych z twoich formularzy HTML. Oto kilka przykładów:

Example #2 Dostęp do informacji z prostego formularza HTML (wysłanego metodą POST)

<?php
// Możliwe od PHP 4.1.0
      
   echo $_POST['imie'];
   echo $_REQUEST['imie'];

   import_request_variables('p', 'p_');
   echo $p_imie;

// Niedostępne od PHP 6. Od PHP 5.0.0, te długie predefiniowane
// zmienne mogą być niedostępne z włączoną opcją register_long_arrays.

   echo $HTTP_POST_VARS['imie'];

// Dostępne, jeśli opcja register_globals jest włączona - "on". Począwszy od
// PHP 4.2.0 domyślna wartość opcji register_globals to off.
// Nie jest zalecane poleganie na tej metodzie.

   echo $imie;
?>

Przesyłanie danych z formularza metodą GET jest podobne, z takim wyjątkiem, że użyjesz zmienną predefiniowaną odpowiednią dla tej metody, zamiast poprzedniej. GET także odnosi się do tzw. QUERY_STRING (informacje w adresie URL, po znaku '?'). Tak więc, dla przykładu, http://www.example.com/test.php?id=3 zawiera dane dla metody GET, dostępne poprzez $_GET['id']. Zobacz także $_REQUEST oraz import_request_variables().

Informacja: Tablice superglobalne, takie jak $_POST i $_GET, zostały udostępnione w PHP 4.1.0

Jak widać, przed PHP 4.2.0 domyślną wartością opcji register_globals było on. Społeczność PHP jest całkowiie przekonana, by nie polegać na tej opcji; i rzeczywiście najlepiej jest nadać jej wartość off, oraz przystosować do tego kod.

Informacja: Dyrektywa konfiguracyjna magic_quotes_gpc oddziałuje na zmienne z Get, Post i Cookie. Jeśli jest włączona, tekst (It's "PHP!") automagicznie zmieni się w (It\'s \"PHP!\"). Jest to potrzebne przy wpisywaniu danych do baz danych. Zobacz także addslashes(), stripslashes() i magic_quotes_sybase.

PHP obsługuje także tablice w kontekście zmiennych z formularzy (zajrzyj do FAQ). Można na przykład pogrupować razem powiązane zmienne lub użyć tej możliwości do pobrania wartości z pola wyboru (select). Na przykład, wyślijmy formularz z pliku metodą POST do samego siebie i wyświetlmy te dane:

Example #3 Bardziej złożone zmienne w formularzach

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Nazwisko: <input type="text" name="personal[nazwisko]"><br />
    Email: <input type="text" name="personal[email]"><br />
    Piwo: <br />
    <select multiple name="piwo[]">
        <option value="zywiec">Å»ywiec</option>
        <option value="tyskie">Tyskie</option>
        <option value="lech">Lech</option>
    </select><br />
    <input type="submit" value="WyÅ›lij mnie!" />
</form>

Nazwy zmiennych dla SUBMIT w postaci obrazka

Przy tworzeniu formularza, można użyć obrazka, zamiast standardowego przycisku Wyślij, za pomocą takiego znacznika:

<input type="image" src="obrazek.gif" name="sub" />

Kiedy użytkownik kliknie gdzieś na obrazku, formularz, którego to dotyczy, zostanie wysłany do serwera z dwiema dodatkowymi zmiennymi, sub_x i sub_y. Zawierają one współrzędne miejsca kliknięcia na obrazek. Można przy tym zauważyć, że na razie w nazwach zmiennych znajduje się kropka zamiast podkreślnika, ale PHP konwertuje kropkę na podkreślnik automatycznie.

Ciasteczka HTTP

PHP bez problemu obsÅ‚uguje ciasteczka HTTP, takie jak zdefiniowano w » Specyfikacji Netscape'a. Ciasteczka sÄ… mechanizmem przechowywania informacji w przeglÄ…darce klienta w celu Å›ledzenia lub identyfikowania staÅ‚ych bywalców strony. Ciasteczka ustawia siÄ™ za pomocÄ… funkcji setcookie(). Ciasteczka sÄ… częściÄ… nagłówka HTTP, wiÄ™c funkcja SetCookie musi być wywoÅ‚ana zanim jakakolwiek inna informacja zostanie wysÅ‚ana do przeglÄ…darki. Takie samo ograniczenie dotyczy funkcji header(). Dane z ciasteczek sÄ… wówczas dostÄ™pne w odpowiednich tablicach danych cookies, takich jak $_COOKIE, $HTTP_COOKIE_VARS jak również $_REQUEST. Zobacz także stronÄ™ dotyczÄ…cÄ… funkcji setcookie() aby poznać wiÄ™cej informacji i przykÅ‚adów.

Jeśli chcesz przypisać wiele wartości do jednego ciasteczka, możesz po prostu złączyć je w tablicę. Na przykład:

<?php
  setcookie
("MojeCiasteczko[foo]"'Test 1'time()+3600);
  
setcookie("MojeCiasteczko[bar]"'Test 2'time()+3600);
?>

Spowoduje to stworzenie dwóch oddzielnych ciasteczek, mimo, iż MojeCiasteczko będzie teraz pojedynczą tablicą w twoim skrypcie. Jeśli chcesz ustawić tylko jedno ciasteczko z wieloma wartościami, rozważ możliwość użycia przedtem funkcji serialize() lub explode() na wartości.

Pamiętaj, że wysłane ciasteczko zastąpi wcześniejsze ciasteczko o tej nazwie, o ile ścieżka lub domena nie są różne. Na przykład dla koszyka do zakupów możesz potrzebować licznika a jego wartość stale przekazywać dalej, tzn.

Example #4 Przykład użycia funkcji setcookie()

<?php
if (isset($_COOKIE['ile'])) {
    
$ile $_COOKIE['ile'] + 1;
} else {
    
$ile 1;
}
setcookie('ile'$iletime()+3600);
setcookie("Cart[$ile]"$pozycjatime()+3600);
?>

Kropki w nazwach odbieranych zmiennych

PHP normalnie nie zmienia nazw zmiennych podczas przekazywania ich do skryptu. Jednakże należy pamiętać, że kropka "." nie jest poprawnym znakiem w nazwie zmiennej PHP. Dlaczego? Proszę spojrzeć na to:

<?php
$varname
.ext;  /* niepoprawna nazwa zmiennej */
?>
To co widzi parser, to zmienna o nazwie $varname, po której pojawia się operator konkatenacji, a następnie pusty łańcuch (czyli taki, który nie jest żadnym słowem kluczowym, ani zarezerwowanym) "ext". Oczywiście, nie daje to żadnego sensownego wyniku.

Warto zatem wiedzieć, że PHP automatycznie zastąpi podkreślnikiem "_" każdą kropkę w nazwie każdej odebranej zmiennej.

Określanie typów zmiennych

Ponieważ PHP samodzielnie określa typy zmiennych i konwertuje je (zasadniczo) jak potrzeba, nie zawsze jest jasne, jakiego typu jest dana zmienna w danym momencie. PHP zawiera kilka funkcji do określania typów zmiennych, takich jak: gettype(), is_array(), is_float(), is_int(), is_object() i is_string(). Zobacz także rozdział o Typach.


waterman | pomysły na prezent | parkiety poznań | deski poznań | parker | produkty jubilerskie | Omega poradnik | kocioł | mapa Nałęczów | restauracja Lublin
Design by flankerds.com