Webcity.pl


  [PHP] Wprowadź numer...

  Edytor BBCode w Java...

  Korzystanie i tworze...

  Wbrew regułom

  Kontrola danych wejś...

 

 02.02.06 - [new] E-video - artykuł

 30.01.06 - [update] Artykuł o sesjach

 18.12.05 - [update] PDO - artykuł

 19.08.05 - [new+upd] Aktualizacja materia...

 26.04.05 - [update] Nowy artykuł



  Pomocy WML
[php]Sesje nie działają, ...
[actionscript 2.0] [flash...
Problem z talicami w php
[ocena] llll.pl darmowe a...
Kamera na stronie interne...
Kamera na stronie interne...
[xml] Jak wyciągnąć dane
Wizualizacja w JS - POMOC
Web Developer - stała / f...

... i wiele innych wątków na forum ›

Partnerzy
› allRSS.info - katalog zasobów RSS
› iloveflyer.org - webdesign
› webserv.pl - serverpack
› skryptoteka.pl - mnóstwo skryptów
› vel.pl - hosting
› TelePraca.net - pracuj swobodnie
› PHP Solutions - magazyn PHP
› HELION - wydawnictwo informatyczne

Ksišżka dnia

CityMag
Wpisz swój e-mail, aby zaprenumerować nasz Magazyn, który zawiera najnowsze informacje ze świata i najciekawsze teksty.
 

Szukasz czegoś?
Nasza wyszukiwarka znajdzie wszystko, czego szukasz.
 

Szukanie zawansowane


  Reklama
  Redakcja
  Hosting
  Kanał

© WebCity.pl Team
 
 
  Forum Forum
Kursy Kursy
Porady Porady
Recenzje Recenzje
Newsy Newsy
Katalog stron WWW Katalog
Skrypty PHP Skrypty
Download Oferty i praca
Artykuły:
 Teoria
 Praktyka
 Promocja
 Inne
 

 Webcity.pl |

System wejścia w PHP

Autor: Zyx
   System wejścia to system przekazywania danych zewnętrznych (z formularza, URL'a, ciastek, sesji itp.) do skryptu. Pragnę poświęcić mu cały artykuł, gdyż fora dyskusyjne w naszym kraju są zalewane pytaniami o tenże system w związku z ciągłymi w nim zmianami i całkowitej ignorancji ze strony twórców artykułów, którzy nie chcą zaktualizować swoich tekstów pod kątem tych zmian.

   Rys historyczny
W pierwotnych wersjach PHP - PHP/FI 2, PHP 3, działających z prędkością ślimaka :) - każda informacja wejściowa była konwertowana do postaci pojedynczej zmiennej. Tak więc np. pole formularza nick pojawiało się w naszym skrypcie jako zwyczajna zmienna $nick. Rozwiązanie proste, ale jednak bardzo niebezpieczne. Przede wszystkim istniała możliwość niewłaściwego nadpisania się na siebie dwóch danych o tej samej nazwie, o możliwości nadpisania jakiejś zmiennej skryptu nie wspominając. Ponadto nie było żadnej metody na wyświetlenie wszystkich danych, które przyszły do skryptu - było to po prostu technicznie niemożliwe. Zmienne były zwyczajnie porozrzucane.
   Całe to zamieszanie dostrzegli twórcy PHP przy wydawaniu edycji czwartej. Postanowili więc, że wszystkie dane wejściowe będą tworzone w poszczególnych tablicach. I tak dane z URL'a trafiały do tablicy $HTTP_GET_VARS, z formularza do $HTTP_POST_VARS, z ciastek do $HTTP_COOKIE_VARS. W tablice również opakowano dane systemowe: $HTTP_SERVER_VARS. Problemy zostały rozwiązane - można było już bardzo łatwo zobaczyć, co do skryptu przyszło, dzięki funkcji print_r() służącej do wyświetlania zawartości tablic. Dane wejściowe już nie mieszały się ze zmiennymi wewnętrznymi i łatwo je można było odróżnić. Ponadto, dzięki odseparowaniu od siebie każdego rodzaju tych danych, nic nie stało na przeszkodzie, aby zadeklarować ciastko nick, a jednocześnie otrzymać z formularza pole o takiej samej nazwie.
   Wszystko fajnie, wszystko pięknie. Dla zachowania zgodności ze starymi skryptami, dodano do konfiguracji PHP specjalną dyrektywę - register_globals. Domyślnie była wyłączona, a jej uaktywnienie równoznaczne było uaktywnieniu na nowo starej metody pobierania danych, opisanej w pierwszym akapicie. I tu pojawiły się schody, przynajmniej w naszym kraju. Bo o ile Amerykanie żywo interesują się nowinkami technicznymi i błyskawicznie poprawili stare materiały i teksty, o tyle u nas sprawa została całkowicie olana. Autorom kursów (które stanowią dla większości "programistów" PHP praktycznie jedyne źródło wiedzy o tym języku) zupełnie nie zależało na zaktualizowaniu materiałów. Ich czytelnicy aktulizowali sobie PHP i następował ogólny szok - wszystkie skrypty przestały działać! Fora dyskusyjne zostały zalane pytaniami, co się właściwie stało. W zasadzie tu wypada też skrytykować postawę samych programistów, którzy całkowicie zignorowali funkcje "Szukaj" dostępne na forach :).
   Kiedy powoli sytuacja zaczęła wracać do normy, twórcy PHP wprowadzili kolejną zmianę, a mianowicie... skrócili nazwy tablic do $_POST, $_GET itp., ponadto dodając im właściwości superglobalne (nie trzeba było w funkcjach pisać global $_POST;). Tym razem jednak pozostawili też poprzednie tablice. Pomimo tego mocno zalecane jest używanie tablic ze skróconymi nazwami, gdyż wcześniejsze są już wyłączone w nadchodzącym PHP 5! Bądź uświadomiony i zaktualizuj swe skrypty już teraz, jeśli dotąd tego nie zrobiłeś.

   $_GET, $_POST...
Wszystkie dane przychodzące do naszego skryptu są sortowane i przydzielane do odpowiednich tablic asocjacyjnych:

$_GET - dane z URL
$_POST - dane z formularza
$_COOKIE - dane z ciastek
$_SESSION - dane z sesji
$_SERVER - dane o serwerze
$_ENV - dane nt. środowiska, w jakim uruchamiane jest PHP
$_REQUEST - połączenie $_GET i $_POST

Są to tablice superglobalne, a więc nie trzeba ich "globalizować" w każdej funkcji. Nic nie stoi na przeszkodzie, byś napisał

function test(){
   echo $_GET['test'];
}

Kod ten wykona się prawidłowo.
   Dodatkowo, mamy także możliwość wyświetlenia, co do skryptu przyszło:

<?php
   print_r($_GET);
?>

Gdybyśmy mieli np. w formularzu pole-tablicę:

<input type="text" name="pole[]"/>
<input type="text" name="pole[]"/>
<input type="text" name="pole[]"/>
<input type="text" name="pole[]"/>

W skrypcie tablica ta zostanie zapisana w $_POST['pole']. Do elementów można dostać się poprzez $_POST['pole'][numer]. Aby wyświetlić wszystkie wartości, możemy użyć pętli foreach:

foreach($_POST['pole'] as $numer => $wartosc){
   echo $numer.' => '.$wartosc.'<br/>';
}


   Zakończenie
Jeszcze raz gorąco namawiam do przesiadki już teraz, jeśli tego jeszcze nie zrobiłeś. Nie będziesz mieć dzięki temu żadnych problemów w przyszłości, gdyż wszystkie znaki na niebie i ziemi wskazują, że metoda opisana w tym artykule zostanie już na zawsze.

Powrót