Przekazywanie zmiennych między stronami

Szybki hosting dla WordPressa

Formularze

Bardzo często zachodzi potrzeba przekazania pewnych danych do strony, na przykład w celu personalizacji wyświetlanych informacji. Jeśli użytkownik musi podać jakieś dane (np. w celu dodania ich do bazy danych), to jedyną metodą jest pobranie ich ze standardowego formularza HTML.

W większości języków programowania należy używać dodatkowych bibliotek, aby uzyskać dostęp do danych przesyłanych z formularza. W PHP zostało to maksymalnie uproszczone. Wszystkie dane z formularza znajdują się w zmiennych o nazwach takich, jak nazwy pól w formularzu. Najlepiej przedstawić to na przykładzie:

Plik jeden.html:

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

Imię: <input name="imie" type="text" />

Nazwisko: <input name="nazwisko" type="text" />

Proszę o fakturę do zamówienia: <input name="faktura" type="checkbox" />

Chcę zamówić:

<input name="zamow" value="c" type="radio" />Coca-colę

<input name="zamow" value="f" type="radio" />Fantę

<input name="zamow" value="s" type="radio" />Sprite'a

<input value="Wyślij" type="submit" />

Plik dwa.php:

<?
 
    echo "Imię: $_GET[imie]
Nazwisko: $_GET[nazwisko]
Faktura: ";

    if ($_GET['faktura'] == 'on')
        echo 'Tak';
    else
        echo 'Nie';

    echo '
Zamówienie: ';

    switch ($_GET['zamow']) {
        case 'c':
            echo 'Coca-cola';
            break;
        case 'f':
            echo 'Fanta';
            break;
        case 's':
            echo 'Sprite';
            break;
    }

?>

Linki

Istnieje możliwość przekazywania niedużej liczby parametrów za pomocą zwykłych linków dostępnych w języku HTML. W takim przypadku wykorzystuje się metodę GET – konstruuje się link, na końcu którego należy umieścić znak zapytania, a po nim oddzielone znakami ampersand (&) pary parametr=wartość, np:

<a href="strona.php?imie=Jak&nazwisko=Kowalski">Kliknij tu.

Cookies (ciasteczka)

Metodą nie tyle przekazywania parametrów, co przechowywania niewielkich ilości danych na komputerze oglądającego stronę (np. informacje o imieniu i nazwisku lub nazwie użytkownika w tym serwisie) jest mechanizm cookies (ciasteczka). Ciasteczka ustawione przez dany serwis dostępne są tylko dla niego i ustawiane są na jakiś czas.

Ciasteczka przekazywane są za pomocą nagłówków HTTP. Muszą być one wysłane zanim do przeglądarki zostanie wysłana jakakolwiek inna treść. W związku z tym przed zapisaniem ciasteczka nie może być żadnego wywołania funkcji echo i pochodnych, a także tag otwierający tryb PHP musi być pierwszymi znakiami w pliku – nie może być żadnej spacji ani pustych wierszy. Ograniczenie to można obejść używając buforowania wyjścia – po szczegóły odsyłam do podręcznika PHP.

PHP automatycznie odczytuje ciasteczka i zamienia je na zmienne. Są one przechowywane w superglobalnej tablicy asocjacyjnej $_COOKIE (dawniej $HTTP_COOKIE_VARS), w której kluczami są nazwy ciasteczek. Ciasteczka ustawia się za pomocą funkcji setcookie( nazwa, wartość, czas_wygaśnięcia, ścieżka, domena, bezpieczeństwo).

Tylko pierwszy parametr jest niezbędny. Oznacza on nazwę cookiesa – taką nazwą będzie miała zmienna stworzona przez PHP po ponownym odczytaniu ciastek. Funkcja parametru “wartość” jest chyba oczywista – taka wartość będzie przechowana w ciasteczku o podanej nazwie. Parametr czas_wygaśnięcia oznacza czas, po jakim ciastko zostanie skasowane. Czas ten należy podać jako ilość sekund od 1.1.1970 – tak jest przechowywany czas w systemach UNIX’owych.

Aktualny czas w tym formacie zwracany jest przez funkcję time(). Jeśli cookie ma być trzymany przez godzinę, to do czasu zwróconego przez time() należy dodać ilość sekund zawartych w godzinie – “time() + 3600”. Podobnie należy postępować w przypadku innych przedziałów czasu:

  • godzina – time()+3600
  • dzień – time()+86400
  • miesiąc – time()+30*86400

Jeśli czas będzie wcześniejszy niż aktualny czas, ciasteczko zostanie skasowane. Jeśli będ zie równy zero – ciasteczko będzie ważne tylko do zamknięcia przeglądarki.

Dwa następne parametry używane są do wskazania adresu, dla którego dostępne będą cookiesy. Jeśli ostatni parametr jest ustawiony na 1, to cookie będzie przesłany za pomocą szyfrowanego połączenia HTTPS.

Standardowo nie ma możliwości przechowywania tablic w ciasteczkach, lecz można to zrobić “na około”. Przed zapisaniem tablicy w ciasteczku należy użyć funkcji serialize(). Zamienia ona tablicę na ciąg znaków. Do ponownego odczytania takiej tablicy służy funkcja unserialize().

<?
 
   // zapis
$tablica = Array('a' => 'pierwszy', 'b' => 'drugi');
setcookie('tablica', serialize($tablica), time()+3600);

// odczyt zabezpieczony przed nieistniejącym ciasteczkiem
if (isset($_COOKIE['tablica'])) {
    $tablica = unserialize($_COOKIE['tablica']);
} else {
    $tablica = Array();
}

?>

W PHP nowszych od 4.1.0 istnieje jeszcze superglobalna tablica $_REQUEST, która łączy w sobie tablice $_GET, $_POST, $_COOKIE i $_FILES.

Sesje

Mechanizm sesji był najważniejszą ze zmian oczekiwanych w PHP4. Umożliwia on przekazywanie parametrów między stronami w łatwy sposób. Zmienne są przechowywane po stronie serwera a u klienta trzymane jest tylko ID sesji. Te ID jest zapisane w cookie lub przekazywane przez URL. PHP jest w stanie sam rozpoznać czy na komputerze klienta włączony jest mechanizm cookies i w razie potrzeby dodać identyfikator sesji do każdego URLu i formularza. Wymaga to jednak posiadania PHP skompilowanego z opcją –enable-trans-sid.

Jako że sesje mogą bazować na ciasteczkach, także i w tym przypadku przed rozpoczęciem sesji do przeglądarki nie mogą być wysłane żadne inne dane.

Po otrzymaniu żądania klienta PHP automatycznie (jeśli w konfiguracji PHP włączona została opcja auto_start) lub “ręcznie” przez programistę (za pomocą funkcji session_start()) sprawdza, czy przypisano już ID sesji. Jeśli tak, to PHP odczytuje zmienne zarejestrowane w tej sesji. Jeśli nie, generowany jest nowy, unikalny identyfikator sesji.

W PHP 4.1.0 wprowadzone zostały opisane wcześniej zmienne superglobalne. Jedna z tych zmiennych, $_SESSION, przechowuje zmienne zarejestrowane w sesji. Kluczem tej tablicy jest oczywiście nazwa zarejestrowanej zmiennej.

Tablica ta ma jednak pewną różnicę w stosunku do innych tablic superglobalnych. Mianowicie można jej użyć do rejestrowania zmiennych sesyjnych. Wystarczy przypisać wartość odpowiedniemu kluczowi tej tablicy aby zmienna została zarejestrowana.

Przykład: zliczanie ile dana osoba odczytała daną stronę w czasie jednej sesji.

<?
 
    
session_start(); // można pominąć jeśli jest się pewnym że włączona jest 
opcja auto_start
if (!isset($_SESSION['count'])) { // jeśli zmienna nie jest zarejestrowana
    $_SESSION['count'] = 0;      // przypisz jej początkową wartość
} else {                          // jeśli jest zarejestrowana
    $_SESSION['count']++;        // zwiększ jej wartość
}
echo 'Strona odczytana '.$_SESSION['count'].' razy w ciągu tej sesji';
?>

Skrypt z tego przykładu będzie pamiętał ilość odwiedzin przez cały czas działania przeglądarki, jeśli w przeglądarce włączony jest mechanizm cookies, lub dopóki strona odświeżana jest z takim samym numerem sesji przekazanym przez URL.

Użycie sesji rodzi pewne wątpliwości: co jeśli ktoś ‘ukradnie’ numer sesji? W ten sposób uzyska dostęp do danych zapisanych w tej sesji. Mimo że istnieje taka teoretyczna możliwość, to ilość dostępnych identyfikatorów sesji jest tak duża, że taka ‘kradzież’ byłaby całkiem przypadkowa.

register_globals

PHP posiada możliwość ustawienia w pliku konfiguracyjnym php.ini  dyrektywy register_globals. Jest ona odpowiedzialna za rejestrowanie danych otrzymanych z formularzy, ciastek, sesji czy serwera jako zmienne globalne. Oznacza to, że jeśli dyrektywa register_globals została ustawiona na “on”, to wszystkie zmienne przekazane do skryptu dostępne są w postaci $nazwa_zmiennej, bez potrzeby stosowania żadnych tablic.

Wydaje się to wygodniejsze i łatwiejsze, lecz powoduje pewne niebezpieczeństwo. Mianowicie używając zmiennych globalnych nie można stwierdzić, czy dana wartość pochodzi z sesji czy może została podana w URLu metodą GET. Przy źle napisanych skryptach można tak obchodzić zabezpieczenia.

W związku z powyższym, używanie odpowiednich tablic jest mocno zalecane. Ostatnio twórcy PHP dodali do tego jeszcze jeden powód. Począwszy od wersji 4.2.0, dyrektywa register_globals jest domyślnie wyłączona. Tak więc pisząc skrypt dla nieznanego serwera trzeba się liczyć z ewentualnością braku dostępu do zmiennych globalnych.

WAŻNE! W sieci home.pl dyrektywa register_globals jest domyślnie wyłączona.

Hosting stworzony dla WordPressa

Masz stronę WWW na WordPressie? My też uwielbiamy ten system dla stron internetowych. Dlatego stworzyliśmy hosting specjalnie dla jego użytkowników.


  • Czy artykuł był pomocny ?
  • Tak   Nie
Szukaj
Generic filters
Tylko dokładne dopasowania
Szukaj w tytułach
Szukaj w treści
Filter by Article Categories
Częste pytania
Narzędzia
Połączenie SSH
Analityka serwera
Statystyki serwera (nowe)
Statystyki serwera (stare)
WebFTP
Autoinstalator
Kontrola wersji (SVN)
Listy mailingowe
Poczta home.pl
Obsługa poczty webmail
Konfiguracja programów pocztowych
Nowa platforma home.pl
Częste pytania
Bezpieczeństwo
Instalacje
Panel klienta
Domeny
Hosting
Serwer Apache
Bazy danych
Certyfikaty SSL
Zamawianie SSL
Instalacja i konfiguracja SSL
Poczta e-mail
Office 365
WordPress Hosting SSD
Dodatki od partnerów
Poprzednia platforma home.pl
Certyfikaty SSL
Zamawianie certyfikatów SSL
Konfiguracja i instalacja SSL
Panel home.pl
Informacje podstawowe
Pulpit
Usługi
Płatności
Profil
Centrum Pomocy
Operacje w Panelu home.pl
Serwery
WebFTP
Informacje podstawowe
Konfiguracja serwerów
Serwery Unix
Serwery Windows
Obsługa baz danych
phpMyAdmin (MySQL)
phpPgAdmin (PgSQL)
myLittleAdmin (MSSQL)
Sklep internetowy eSklep
Panel usługi eSklep
RODO w sklepie internetowym
Panel sklepu internetowego
Pierwsze kroki
Promocja sklepu
Sprzedaż
Pierwsze uruchomienie
Dodatki od partnerów
Asortyment
Klienci
Integracje
Inne integracje
Systemy aukcyjne
Baza produktów
Aplikacje
App store
Aplikacja mobilna
Marketing
Modyfikacja wyglądu
Dokumentacja
Dla deweloperów
Style graficzne
Inne zagadnienia
Raporty i statystyki
Zawartość
Filmy instruktażowe
Konfiguracja sklepu
Rozliczenia i dokumenty
Faktury
Zmiana danych (cesja)
Rozliczenia i płatności
Dokumenty do pobrania
Produkty i usługi
Kreator Stron WWW
eCommerce
Moduły
Ustawienia
Szablony
Nawigacja
Publikacja i dodatki
Szybki start
Prestahosting
Profesjonalne Usługi IT
Certyfikaty SSL
Przywracanie danych
Udostępnienie logów oraz analizowanie błędów
Operacje na plikach i bazach danych
WordPress
Terminal płatniczy SumUp
Wordpress hosting SSD
Office 365
OneDrive
Domeny
Informacje podstawowe
Rejestracja / opłacanie
Konfiguracja domen
Transfer domen
Giełda domen
Dodatki do domen
Serwery VPS
Skrzynki e-mail
Microsoft Exchange
Cloud Email Xchange
Obsługa skrzynki e-mail za pomocą Panelu home.pl
Jak zarejestrować Personal email lub Business email?
Bezpieczeństwo
eKsięgowość
Wizyta - system rezerwacji
Reklama internetowa
Reklama Allegro Ads
Tworzenie stron WWW
Contact LEADer
Reklama banerowa Google
Zakupy Google
Google Ads (AdWords)
eKampanie Google
SEMSTORM
Pozycjonowanie
rankingCoach
Baza wiedzy
Facebook
Systemy CMS
Internet w praktyce
Przydatne programy
Konfiguracja programów FTP
Zagadnienia techniczne
.htaccess
mod_rewrite
Akademia home.pl
Poradniki do pobrania
Kursy i specyfikacje
Kurs HTML
Kurs PHP
Kurs SQL
Kurs mod_rewrite
Rejestracja usług
RODO w home.pl
English
Control Panel
Webmail
FTP
Office 365
WordPress
SSL
Aplikacje w marketplace
SiteLock - ochrona WWW
Dropsuite Backup
CCleaner
Antywirus Kaspersky
Dropbox - dysk w chmurze
Płatności PayU
Programy antywirusowe AVAST
Office 365
AVG PC TuneUp
Reklama na start
Google AdWords
Zareklamuj stronę WWW na Facebook
Dropbox
Cloud Email Xchange
Dropsuite
Brand24
Microsoft OneDrive
FreshMail.pl
Tłumaczenia online
G Suite - poczta Gmail
Program prowizyjny
Acronis Backup
Informacje podstawowe
Ustawienia dodatkowe
Panel użytkownika
Panel administratora
lub