Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do...

12
Podstawy PHP Wstęp PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania C/C++, lecz jest bardzo uproszczona – programista PHP zazwyczaj nie musi przejmować się poprawnością typów zmiennych, przydzielaniem dla nich pamięci itp. Dodatkowo wbudowana obsługa wielu popularnych baz danych ułatwia twórcy operacje na tych bazach. Dzięki połączeniu z biblioteką GD możliwe jest także dynamiczne tworzenie obrazków GIF (starsze wersje GD) lub PNG (nowsze wersje). Aby plik był rozpoznany przez serwer WWW jako skrypt PHP musi on mieć odpowiednie rozszerzenie. Rozszerzenia te można zdefiniować w konfiguracji serwera WWW, ale zazwyczaj jest to .php3 (dla PHP w wersji 3), .php lub php4 (dla PHP w wersji 4) i .phtml (dla PHP w wersji starszej niż 3). Po nadaniu plikowi takiego rozszerzenia serwer będzie wiedział, że plik ten nie jest przeznaczony do bezpośredniego wyświetlenia (jak w przypadku plików HTML), ale że najpierw trzeba go przepuścić przez parser PHP. Jeśli zwykłemu plikowi HTML nadamy rozszerzenie .php, to zostanie on prawidłowo wyświetlony, mimo że nie jest to skrypt PHP. Dzieje się tak dlatego, że parser PHP przetwarzając stronę ma 2 tryby pracy: HTML, gdzie cała treść jest wyświetlana, bez przetwarzania, i PHP, gdzie treść jest traktowana jako skrypt do przetworzenia. Do określenia w pliku co jest kodem HTML a co PHP służą specjalne znaczniki. Początkowo parser jest w trybie HTML. Aby przejść do trybu PHP można użyć jednego z czterech znaczników: 1 <? echo ("to jest najprostsza metoda, podobna do SGML'a"); ?> 2 <?php echo("jeśli serwujesz pliki XML, użyj tej metody"); ?> 3 <script language="php"> echo ("niektóre edytory (np. FrontPage) nie lubią przetwarzania instrukcji"); </script> 4 <% echo ("Możesz też użyć metody podobnej do tej z ASP"); %> <%= $variable; # To jest skrót dla "<% echo ..." %> Przykład 1. Wyświetlenie “Hello Word”: <?php echo 'Hello World!'; ?> Po wejściu na tę stronę z przeglądarki WWW w okienku powinno być widać tylko napis “Hello World!” (bez cudzysłowów). Jedna uwaga: polecenie echo nie wysyła znaku końca linii, więc jeśli chcesz, aby po ciągu znaków (albo w którymkolwiek miejscu tego ciągu) kończyła się linia, w tym miejscu trzeba wstawić ‘\n’. Parser PHP podczas wykonywania skryptu sprawdza jego poprawność. Jeśli coś się nie zgadza, zostaniemy o tym poinformowani. Skrypt będzie jednak wykonany do miejsca, w którym pojawił się błąd. Najczęściej są to błędy składniowe – brak średnika na końcu linii, niedomkniętych nawiasach (bardzo częsty błąd przy złożonych instrukcjach warunkowych), cudzysłowach lub nawiasach klamrowych kończących blok danych (przy instrukcjach warunkowych, pętlach). Błędy przy braku zamykających nawiasów klamrowych łatwo można rozpoznać, ponieważ numer linii zawierającej błąd jest o jeden większa od liczby linii w pliku. Zmienne W języku PHP zmienne oznacza się za pomocą znaku dolara (‘$’) przed identyfikatorem. Obsługa zmiennych w PHP jest uproszczona do minimum. Zmienna jest inicjalizowana (to znaczy rezerwowany jest dla niej pewien obszar w pamięci) przy pierwszym jej użyciu. Nazwy zmiennych muszą zaczynać się od litery (dużej lub małej) lub “underscore” (dolna kreska – ‘_’) a dalej mogą się składać z dowolnej ilości liter, cyfr i znaków o kodzie ASCII powyżej 127. Przy nazwach zmiennych

Transcript of Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do...

Page 1: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

Podstawy PHP

Wstęp

PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania C/C++, lecz jest bardzo uproszczona – programista PHP zazwyczaj nie musi przejmować się poprawnością typów zmiennych, przydzielaniem dla nich pamięci itp. Dodatkowo wbudowana obsługa wielu popularnych baz danych ułatwia twórcy operacje na tych bazach. Dzięki połączeniu z biblioteką GD możliwe jest także dynamiczne tworzenie obrazków GIF (starsze wersje GD) lub PNG (nowsze wersje).

Aby plik był rozpoznany przez serwer WWW jako skrypt PHP musi on mieć odpowiednie rozszerzenie. Rozszerzenia te można zdefiniować w konfiguracji serwera WWW, ale zazwyczaj jest to .php3 (dla PHP w wersji 3), .php lub php4 (dla PHP w wersji 4) i .phtml (dla PHP w wersji starszej niż 3). Po nadaniu plikowi takiego rozszerzenia serwer będzie wiedział, że plik ten nie jest przeznaczony do bezpośredniego wyświetlenia (jak w przypadku plików HTML), ale że najpierw trzeba go przepuścić przez parser PHP.

Jeśli zwykłemu plikowi HTML nadamy rozszerzenie .php, to zostanie on prawidłowo wyświetlony, mimo że nie jest to skrypt PHP. Dzieje się tak dlatego, że parser PHP przetwarzając stronę ma 2 tryby pracy: HTML, gdzie cała treść jest wyświetlana, bez przetwarzania, i PHP, gdzie treść jest traktowana jako skrypt do przetworzenia. Do określenia w pliku co jest kodem HTML a co PHP służą specjalne znaczniki. Początkowo parser jest w trybie HTML. Aby przejść do trybu PHP można użyć jednego z czterech znaczników:

1 <? echo ("to jest najprostsza metoda, podobna do SGML'a"); ?>

2 <?php echo("jeśli serwujesz pliki XML, użyj tej metody"); ?>

3 <script language="php">

echo ("niektóre edytory (np. FrontPage) nie lubią przetwarzania instrukcji");

</script>

4 <% echo ("Możesz też użyć metody podobnej do tej z ASP"); %>

<%= $variable; # To jest skrót dla "<% echo ..." %>

Przykład 1. Wyświetlenie “Hello Word”:

<?php echo 'Hello World!'; ?>

Po wejściu na tę stronę z przeglądarki WWW w okienku powinno być widać tylko napis “Hello World!” (bez cudzysłowów). Jedna uwaga: polecenie echo nie wysyła znaku końca linii, więc jeśli chcesz, aby po ciągu znaków (albo w którymkolwiek miejscu tego ciągu) kończyła się linia, w tym miejscu trzeba wstawić ‘\n’.

Parser PHP podczas wykonywania skryptu sprawdza jego poprawność. Jeśli coś się nie zgadza, zostaniemy o tym poinformowani. Skrypt będzie jednak wykonany do miejsca, w którym pojawił się błąd. Najczęściej są to błędy składniowe – brak średnika na końcu linii, niedomkniętych nawiasach (bardzo częsty błąd przy złożonych instrukcjach warunkowych), cudzysłowach lub nawiasach klamrowych kończących blok danych (przy instrukcjach warunkowych, pętlach). Błędy przy braku zamykających nawiasów klamrowych łatwo można rozpoznać, ponieważ numer linii zawierającej błąd jest o jeden większa od liczby linii w pliku.

Zmienne

W języku PHP zmienne oznacza się za pomocą znaku dolara (‘$’) przed identyfikatorem. Obsługa zmiennych w PHP jest uproszczona do minimum. Zmienna jest inicjalizowana (to znaczy rezerwowany jest dla niej pewien obszar w pamięci) przy pierwszym jej użyciu. Nazwy zmiennych muszą zaczynać się od litery (dużej lub małej) lub “underscore” (dolna kreska – ‘_’) a dalej mogą się składać z dowolnej ilości liter, cyfr i znaków o kodzie ASCII powyżej 127. Przy nazwach zmiennych

Page 2: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

respektowana jest wielkość znaków – zmienne $Test i $test to dwie różne zmienne. Oto przykład przypisywania wartości zmiennym i wykorzystanie ich w poleceniu echo. Przykład 2:

<?php

$nazwa = 1; // Zmiennej "nazwa" przypisywana jest wartość liczbowa 1

$druga_nazwa = "Tekst"; /* Zmiennej "druga_nazwa" przypisany jest ciąg znaków

"Tekst" */

$trzecia_nazwa = $nazwa; // Zmiennej "trzecia_nazwa" przypisywana

echo "To jest $druga_nazwa"; // Powinien wyświetlić się napis "To jest Tekst"

echo '$druga_nazwa'; // Powinien wyświetlić się napis "$druga_nazwa"

echo $nazwa; // Powinna wyświetlić się cyfra 1

?>

Parametr dla polecenia echo można podawać zarówno w cudzysłowach jak i apostrofach. Jednak te parametry nie są sobie równoznaczne. W przypadku cudzysłowów zmienne zawarte między nimi są zamieniane na ich wartość, a w przypadku apostrofów zmienna pozostaje swoją nazwą.

Typy zmiennych:

liczby całkowite (integer)

liczby rzeczywiste (double)

ciągi (string)

tablice (array)

obiekty (object)

Dodatkowo PHP potrafi konwertować zmienne całkowite zapisane w różnych formatach liczbowych.

Przykład 3

<?php

$blah = "0"; // $blah jest ciągiem (ASCII 48)

$blah++; // $blah jest ciągiem "1" (ASCII 49)

$blah += 1; // $blah jest teraz wartością całkowitą (2)

$blah = $foo + 1.3; // $blah jest wartością rzeczywistą (1.3)

$blah = 5 + "10 Malutkich Świnek"; // $blah jest wartością całkowitą (15)

$blah = 5 + "10 Małych Świń"; // $blah jest wartością całkowitą (15)

?>

Przykład 4. Rzutowanie typów danych:

<?php

$liczba_calkowita = 10;

$liczba_rzeczywista = (real) $liczba_calkowita;

?>

(int), (integer) – rzutuj do typu całkowitego

(real), (double), (float) – rzutuj do typu rzeczywistego

(string) – rzutuj do ciągu

(array) – rzutuj do tablicy

(object) – rzutuj do obiektu

Drugim sposobem, trwałym, jest użycie funkcji settype. Funkcja ta pobiera 2 argumenty. Pierwszym jest nazwa zmiennej do ustalenia typu, a drugim ciąg określający nowy typ zmiennej.

W każdym skrypcie PHP dostępne jest kilka zmiennych, których wartość jest ustalana na podstawie zmiennych środowiskowych serwera WWW. Dostępne są jak zwykłe zmienne – ze znakiem dolara przed nazwą.

GATEWAY_INTERFACE -Informacja o specyfikacji CGI używanej przez serwer, np. ‘CGI/1.1′.

SERVER_NAME - Nazwa hosta serwera na którym skrypt jest uruchamiany. Jeśli skrypt pracuje na wirtualnym hoście, to zmienna przyjmie jako wartość nazwę wirtualnego hosta.

SERVER_SOFTWARE - Ciąg identyfikujący serwera podawany przy odpowiadaniu na zapytania.

Page 3: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

SERVER_PROTOCOL - Nazwa i numer wersji protokołu za pomocą którego wysłano zapytanie o stronę, np. ‘HTTP/1.0′;

REQUEST_METHOD - Metoda zapytania użyta do uzyskania dostępu do strony, np. ‘GET’, ‘HEAD’, ‘POST’, ‘PUT’.

QUERY_STRING - Ciąg zapytania (jeśli takowy istnieje) za pomocą którego połączono się ze stroną.

DOCUMENT_ROOT - Katalog główny drzewa dokumentów spod którego skrypt jest wykonywany – jest to ustawienie z pliku konfiguracyjnego serwera.

HTTP_ACCEPT - Nagłówek z aktualnego zapytania, jeśli taki istnieje.

HTTP_ACCEPT_CHARSET - Zawartość nagłówka “Accept-Charset” z aktualnego zapytania, jeśli taki istnieje, np. ‘iso-8859-1,*,utf-8′.

HTTP_ENCODING - Zawartość nagłówka “Accept-Encoding” z aktualnego zapytania, jeśli taki istnieje, np. ‘gzip’.

HTTP_ACCEPT_LANGUAGE - Zawartość nagłówka “Accept-Language” z aktualnego zapytania, jeśli taki istnieje, np. ‘en’.

HTTP_CONNECTION - Zawartość nagłówka “Connection” z aktualnego zapytania, jeśli taki istnieje, np. ‘Keep-Alive’.

HTTP_HOST - Zawartość nagłówka “Host” z aktualnego zapytania, jeśli taki istnieje.

HTTP_REFERER - Adres strony (jeśli taka była), która wskazała przeglądarkę do tej strony. Wartość ta jest ustawiana przez przeglądarkę – nie wszystkie to robią.

HTTP_USER_AGENT - Zawartość nagłówka “User-Agent” z zapytania, jeśli taki istnieje. Jest to ciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można użyć funkcji get_browser() aby dopasować funkcjonalność strony do przeglądarki użytkownika.

REMOTE_ADDR - Adres IP z którego użytkownik połączył się z serwerem.

REMOTE_PORT - Port używany do komunikacji pomiędzy użytkownikiem a serwerem.

SCRIPT_FILENAME - Ścieżka do aktualnie wykonywanego skryptu.

SERVER_ADMIN - Wartość podana dla opcji SERVER_ADMIN w konfiguracji serwera WWW. Jeśli skrypt działa na wirtualnym serwerze, to będzie to wartość podana dla tego wirtualnego serwera.

SERVER_PORT - Port na serwerze którego użyto do połączenia. Dla normalnych połączeń będzie to ’80′.

SERVER_SIGNATURE - Ciąg zawierający wersję i nazwę wirtualnego hosta który jest dodawany do stron generowanych przez serwer.

SCRIPT_NAME - Zawiera ścieżkę do aktualnie wykonywanego pliku. Jest to przydatne do skyptów, które muszą wskazywać samego siebie.

REQUEST_URI - URI który został podany aby uzyskać dostęp do tej strony.

Zmienne ustawiane przez PHP

Argv - Tablica argumentów przkazywanych do skryptu. Jeśli skrypt jest uruchamiany z linii poleceń, to zmienna ta daję dostęp do argumentów w stylu języka C. Jeśli jest wywołany przez metodę GET, to zmienna ta zawierać będzie ciąg parametrów (query string).

Argc - Zawiera liczbę parametrów podanych podanych do skryptu w linii poleceń (jeśli skrypt został wywołany z linii poleceń).

PHP_SELF - Nazwa pliku aktualnie wykonywanego skryptu, względna do katalogu głównego dokumentów. Ta zmienna jest niedostępna jeśli PHP jest uruchamiany z linii poleceń.

HTTP_COOKIE_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez HTTP cookies. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>.

Page 4: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

HTTP_GET_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez metodę GET. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>.

HTTP_POST_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez metodę POST. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>.

Przykład 5. Definiowanie stałych:

<?php

define("STALA", "Hello world.");

echo STALA; // Wyświetla "Hello world."

?>

Operatory

Przykład Nazwa Wynik

$a + $b Dodawanie Suma $a i $b.

$a – $b Odejmowanie Różnica $a i $b.

$a * $b Mnożenie Iloczyn $a i $b.

$a / $b Dzielenie Iloraz $a i $b (bez reszty).

$a % $b Modulo Reszta z dzielenia $a przez $b.

Operacja przypisania:

<?php

$nazwa = $inna_nazwa = $trzecia_nazwa = 5;

?>

Przykład Wynik

$a += 2 Do zmiennej $a dodane zostanie 2

$a -= 2 Od zmiennej $a odjęte zostanie 2

$a *= 2 Zmienna $a zostanie pomnożona przez 2

$a /= 2 Zmienna $a dodane podzielona przez 2

$a %= 2 Zmienna $a przyjmie wartość reszty z dzielenia $a przez 2

$a .= ” dalszy ciąg” Do zmiennej $a na końcu dodany zostanie ciąg ” dalszy ciąg”

Operacje bitowe

Przykład Nazwa Wynik

$a & $b AND Ustawiane są bity które są ustawione w obu zmiennych.

$a | $b OR Ustawiane są bity, które są ustawione w jednej lub drugiej zmiennej.

$a ^ $b XOR Ustawiane są bity, które są ustawione w jednej lub drugiej zmiennej, ale nie w obu.

~ $a NOT Inwerter – ustawiane są bity które nie są ustawione w zmiennej $a i odwrotnie.

$a << $b

Przesunięcie w lewo

Przesuń bity z $a $b-razy w lewo (każdy krok oznacza pomnożenie przez 2)

$a >> $b

Przesunięcie w prawo

Przesuń bity z $a $b-razy w prawo (każdy krok oznacza podzielenie przez 2)

Operatory porównania

Przykład Nazwa Wynik

$a == $b Równy Prawda jeśli $a jest równe $b.

$a === Identyczny Prawda jeśli $a jest równe $b i są tego samego typu. (tylko PHP4)

Page 5: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

$b

$a != $b Nie równe Prawda jeśli $a nie jest równe $b.

$a !== $b Nie identyczny Prawda jeśli $a nie jest równe $b lub nie są tego samego typu. (tylko PHP4)

$a < $b Mniejsze Prawda jeśli $a jest mniejsze niż $b.

$a > $b Większe Prawda jeśli $a jest większe niż $b.

$a <= $b Mniejsze lub równe

Prawda jeśli $a jest mniejsze lub równe $b.

$a >= $b Większe lub równe

Prawda jeśli $a jest większe lub równe $b.

Operator kontroli błedów

Operator kontroli błędów (‘@’) powoduje, że wyrażenie przed którym postawiono ten znak nie spowoduje wyświetlenia się jakiegokolwiek błędu lub ostrzeżenia. Przykład 6:

<?php

/* Jeden z najczęstszych błędów SQL (za dużo o jeden apostrof) */

$res = @mysql_query ("select nazwa, kod from 'lista") or

die ("Zapytanie się nie powiodło: błąd to '$php_errormsg'");

?>

Inkrementacja i dekrementacja:

Przykład Nazwa Wynik

++$a Preinkrementacja Zwiększa $a o jeden, a następnie zwraca $a.

$a++ Postinkrementacja Zwraca $a, a następnie zwiększa $a o jeden.

–$a Predekrementacja Zmniejsza $a o jeden, po czym zwraca $a.

$a– Postdekrementacja Zwraca $a, po czym zmniejsza $a o jeden.

Operatory logiczne

Przykład Nazwa Wynik

$a && $b AND Prawda, jeśli $a i $b są prawdą

$a || $b OR Prawda, jeśli $a lub $b są prawdą

! $a NOT Prawda, jeśli $a nie jest prawdą

Operator ciągu (‘.’ – kropka) służy do łączenia kilku ciągów w jedną całość. Przykład 7:

<?php

$zmienna1 = "Wartość zmiennej 'zmienna2' to";

$zmienna2 = 5;

echo $zmienna1." ".$zmienna2;

?>

Instrukcje

Instrukcja Składnia Przykład

Instrukcja warunkowa IF <?php

if(wyrażenie_warunkowe)

instrukcja wykonywana

jeśli spełniony zostanie

warunek

elseif(inne_wyrażenie_warunk

owe)

instrukcja wykonywana

jeśli spełniony zostanie

drugi warunek, a pierwszy

nie

else

instrukcja wykonywana

jeśli nie zostanie spełniony

<?php

$a = 2;

$b = 5;

$c = 1;

if($a > $b)

echo "$a jest większe od

$b";

elseif ($b > $c)

echo "$b jest większe od

$c";

else

echo "$c jest większe od

$a i $b";

if($a)

Page 6: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

żaden z warunków

?>

echo "Zmienna $a ma

wartość większą od zera";

?>

Pętla FOR <?php

for( inicjalizacja zmiennych

; sprawdzenie warunku ;

modyfikacja zmiennych) {

blok wyrażeń

}

?>

<?php

for( $x = 1; $x <= 10; $x++ )

echo $x."<br>";

?>

Pętla WHILE <?php

for( $x = 1; $x <= 10; $x++

)

echo $x."<br>";

?>

<?php

$x=1;

while($x <= 10){

echo $x."<BR>";

$x++;

}

?>

Pętla DO … WHILE <?php

do {

...

instrukcje

...

} while( warunek );

?>

<?php

$x=1;

do

{

echo $x."<BR>";

$x++;

} while($x <= 10);

?>

SWITCH

<?php

switch($zmienna){

case 'wartość1':

...

instrukcje

...

break;

case 'wartość2':

...

instrukcje

...

break;

default:

...

instrukcje

...

}

?>

<?php

$i = 3;

switch($i){

case 0:

case 1:

case 2:

case 3:

echo "Zmienna $i jest

mniejsza bądź równa od

trzech\n";

break;

case 4:

echo "Zmienna $i jest

równa cztery\n";

break;

default:

echo "Zmienna $i jest

większa od czterech\n";

}

?>

Przerwanie pętli

Przykład 11:

<?php

for($x = 1; $x<=100; $x++) {

if($x % 2 != 0)

continue; //tu przerywamy I przechodzimy to następnego kroku pętli

echo $x." ";

}

?>

Przykład 12:

<?php

for($x = 0; $x<10; $x++) {

if($x%2==0)

echo $x." ";

if($nazwa == "Test1")

break; //całkowite wyjście z pętli

}

?>

Page 7: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

Przekazywanie danych między stronami

Formularze

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 trafiają do odpowiednich tablic asocjacyjnych o nazwach kluczy takich, jak nazwy pól formularza. Jeśli w konfiguracji PHP włączona zostanie opcja register_globals (jest ona domyślnie wyłączona od wersji 4.2.0), to stworzone zostaną od razu zmienne o nazwach takich jak nazwy pól formularza.

Są dwie metody przekazywania parametrów do innych stron: metoda “GET” i metoda “POST”. Metody GET używa się kiedy parametrów jest niewiele. Dzieje się tak ponieważ parametry przekazuje się za pomocą adresu URL (np. http://www.cos.pl/strona.php?parametr1=wartość1&parametr2=wartość2), którego długość jest ograniczona. Należy też pamiętać że parametry są widoczne w pasku adresu przeglądarki, więc tej metody nie należy używać jeśli przekazywane są np. hasła. Metoda “POST” do przekazywania parametrów wykorzystuje nagłówek zapytania – wystarczy wiedzieć, że metoda ta umożliwia przekazywanie dużo większych parametrów, a także że parametrów nie widać w pasku przeglądarki.

Dane przesłane metodą GET trafiają do tablicy $_GET (lub $HTTP_GET_VARS w wersjach starszych niż 4.1.0) a dane z metody POST to tablicy $_POST (lub $HTTP_POST_VARS). Tablice $_GET i $_POST są superglobalne. Oznacza to, że są widoczne w każdym miejscu kodu PHP bez konieczności użycia składni globals.

Przykład 13

Plik jeden.html

<html>

<head>

<title>

Test formularza

</title>

</head>

<body>

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

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

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

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

Chcę zamówić:<br/>

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

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

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

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

</form>

</body>

</html>

Plik dwa.php

<html>

<head>

<title>

Wyniki

</title>

</head>

<body>

Imię: <?php echo $_GET['imie']?><br>

Page 8: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

Nazwisko: <?php echo $_GET['nazwisko']?><br>

Faktura: <?php echo ($_GET['faktura'] == 'on' ? 'Tak' : 'Nie')?><br>

Zamówienie: <?php switch($_GET['zamow']){

case "kola":

echo "Coca-cola";

break;

case "fanta":

echo "Fanta";

break;

case "sprite":

echo "Sprite";

break;

}

?>

</body>

</html>

Ładowanie plików

Często zachodzi też potrzeba przekazania jakiegoś pliku na serwer, na przykład dodając zdjęcie do galerii. Plik przesyła się korzystając z pola formularza typu “file”. Należy pamiętać o tym, że w tagu otwierającym formularz musi znaleźć się parametr ENCTYPE=”multipart/form-data” a formularz musi być wysyłany metodą POST. Na stronie do której został wysłany formularz dostępna będzie wielowymiarowa tablica asocjacyjna $_FILES ($HTTP_POST_FILES w starszych wersjach PHP), której pierwszym wymiarem będą pola typu file z formularza (klucze są nazwami tych pól), a w drugim informacje o przesłanym pliku.

Informacje o przesłanym pliku:

tmp_name - nazwa tego pliku na serwerze wraz ze ścieżką; używając tego pola można uzyskać dostęp do przesłanego pliku

name - nazwa pliku jaką posiadał u użytkownika

type - typ MIME pliku, np. text/plain lub image/gif; informacja ta jest dostępna tylko jeśli przeglądarka klienta dostarczyła takiej informacji.

size - wielkość pliku w bajtach

Przykład 14:

plik1.html:

<html>

<body>

<form action="plik2.php" method="POST" ENCTYPE="multipart/form-data">

<input type="file" name="plik"/><br/>

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

</form>

</body>

</html>

plik2.php:

<?php

$max_rozmiar = 1024*1024;

if (is_uploaded_file($_FILES['plik']['tmp_name'])) {

if ($_FILES['plik']['size'] > $max_rozmiar) {

echo 'Błąd! Plik jest za duży!';

} else {

echo 'Odebrano plik. Początkowa nazwa: '.$_FILES['plik']['name'];

echo '<br/>';

if (isset($_FILES['plik']['type'])) {

echo 'Typ: '.$_FILES['plik']['type'].'<br/>';

}

move_uploaded_file($_FILES['plik']['tmp_name'],

$_SERVER['DOCUMENT_ROOT'].'/foto/'.$_FILES['plik']['name']);

Page 9: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

}

} else {

echo 'Błąd przy przesyłaniu danych!';

}

?>

Odnośniki

Istnieje możliwość przekazywania niedużej liczby parametrów za pomocą zwykłych odnośników dostępnych w języku HTML. W takim przypadku wykorzystuje się metodę GET: <a href=”strona.php?imie=Franek&nazwisko=Kowalski”>Kliknij tu</a>

Tablice

Tablice są bardzo specyficznym typem zmiennych – są to, najprościej mówiąc, zmienne zawierające w sobie uporządkowany zbiór zmiennych. Do zmiennych tych uzyskuje się dostęp przez liczbę w nawiasie kwadratowym podane bezpośrednio po nazwie zmiennej – tablicy. Liczba ta to tak zwany indeks – numer kolejny zmiennej w tablicy. Tak samo przypisuje się wartość do tablicy.

Przykład 15:

<?php

$tablica[0] = "Wpis numer 0";

$tablice[1] = "Wpis numer 1";

$tablica[2] = "Wpis numer 2";

echo $tablica[2]; // Wyświetlony zostanie napis "Wpis numer 2";

?>

Aby po prostu dodać kolejny wpis na końcu tabeli wystarczy przy przypisywaniu wartości nie wpisywać indeksu do nawiasów kwadratowych. Jeśli w ten sposób dodawane są wpisy do nowej tablicy, to pierwszy wpis ma indeks 0. Indeks można też podawać ze zmiennej, z innej tablicy czy funkcji – z dowolnego wyrażenia zwracającego wartość.

Przykład 16:

<?php

$tab1[] = 1;

$tab1[] = 0;

$tab1[] = 3;

$tab1[] = 2;

$tab2[] = "Pierwszy";

$tab2[] = "Drugi";

$tab2[] = "Trzeci";

$tab2[] = "Czwarty";

echo $tab2[$tab1[2]];

?>

Tablice asocjacyjne

W PHP występuje też inny rodzaj tablic, tak zwane tablice asocjacyjne (zwane też czasem haszami – hash table). Są to tablice, w których zamiast indeksów liczbowych używa się identyfikatorów znakowych (kluczy):

Przykład 17:

<?php

$tablica["imie"] = "Jan";

$tablica["nazwisko"] = "Kowalski";

$tablica["adres"] = "Polna 1";

echo $tablica["imie"]." ".$tablica["nazwisko"].", ul. ".$tablica["adres"]."n";

?>

Przeglądanie tablicy gdy nie znamy jest wielkości (liczby elementów) – wtedy można skorzystać z funkcji count( $nazwa_tablicy ). Zwraca ona ilość elementów w tablicy podanej jako parametr.

Przykład 18:

Page 10: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

<?php

$tbl[] = 1;

$tbl[] = 2;

$tbl[] = 3;

$tbl[] = 4;

$tbl[] = 5;

for( $x = 0, $cnt = count($tbl); $x < $cnt; $x++ ){

echo $tbl[$x];

}

?>

Przeglądanie tablicy asocjacyjnej. Przykład 19:

<?php

$tablica["imie"] = "Jan";

$tablica["nazwisko"] = "Kowalski";

$tablica["adres"] = "Polna 1";

while( list($klucz, $wartosc) = each($tablica) )

echo "$klucz => $wartosc<BR>";

?>

Sortowanie tablic

PHP ofertuje cały zestaw funkcji służących do sortowania tablic. Są to:

asort() - sortuje tablice asocjacyjne zachowując przypisanie kluczy do wartości

arsort() - sortuje w odwrotnej kolejności tablice asocjacyjne zachowując przypisanie kluczy do wartości. Funkcja prawie identyczna jak poprzednia, tyle że dane sortowane są “od tyłu”

ksort() - sortuje tablice asocjacyjne według kluczy.

rsort() - sortuje zwykłe tablice (nie asocjacyjne) w odwróconej kolejności

sort() - sortuje zwykłe tablice (nie asocjacyjne) w kolejności alfabetycznej

uasort() - funkcja sortująca tablice asocjacyjne za pomocą zdefiniowanej przez użytkownika funkcji porównującej elementy (nazwa funkcji jest podawana za pomocą drugiego parametru)

usort() - funkcja sortująca zwykłe tablice za pomocą funkcji zdefiniowanej przez użytkownika

uksort() - funkcja sortująca tablice asocjacyjne według klucza za pomocą funkcji zdefiniowanej przez użytkownika.

Tworzenie ciągów z tablic i odwrotnie

Przykład 20 (wykorzystanie średnika jako rozdzielenia danych):

<?php

$dane = "12/11/2000;19:23:33;Netscape Navigator;192.168.1.1";

$tablica = explode(";", $dane);

?>

Jest także rozszerzona wersja funkcji explode: split(). Różni się ona tym, że zamiast prostego ciągu znaków rozdzielających pola, akceptuje ona wyrażenia regularne.

Przykład 21 (operacja odwrotna – tworzenie ciągu z tablicy)

<?php

$dane = implode(";", $tablica);

?>

Funkcje

Funkcja jest kawałkiem kodu, który można wywołać podając jej nazwę. Już wcześniej podane zostało kilka funkcji dostarczanych przez PHP, takich jak array(), each(), list(), explode() czy implode(). Jak można zauważyć, funkcje rozpoznaje się po nawiasach występujących po ich nazwie. W nawiasach tych (jeśli funkcja tego wymaga) podaje się parametry dla danej funkcji. Niektóre funkcje zwracają jakąś wartość, a więc wywołanie takiej funkcji można wstawić jak dowolne inne wyrażenie do listy parametrów innej funkcji czy np. do obliczenia.

Page 11: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

Przykład 22 (własna funkcja obliczająca sumę)

<?php

function suma($parametr1 = 0, $parametr2 = 0)

{

$wartosc = $parametr1 + $parametr2;

return $wartosc;

}

?>

Klasy

Przykład 23 (klasa koszyk)

<?php

// Początek definicji klasy Koszyk - definiującej koszyk sklepowy

class Koszyk

{

// Definicja zmiennej - tablicy asocjacyjnej zawierającej numery artykułów i

// ich ilość

var $artykuly;

// Metoda dodająca podaną ilość artykułów do koszyka

function dodaj($numer, $ilosc)

{

$this->artykuly["$numer"] += $ilosc;

}

// Metoda usuwająca podaną ilość artykułów z koszyka

function usun($numer, $ilosc)

{

if($this->artykuly["$numer"]>$ilosc)

$this->artykuly["$numer"]-=$ilosc;

else

$this->artykuly["$numer"]=0;

}

// Metoda wyświetlająca zawartość koszyka

function wyswietl()

{

while(list($k, $v) = each($this->artykuly))

if($v>0)

echo "Artykul nr $k - $v sztuk<br>";

}

}

// Przykład wykorzystania

$koszyk = new Koszyk;

$koszyk->dodaj('20', 2);

$koszyk->dodaj('12', 4);

$koszyk->dodaj('20', 5);

$koszyk->usun('12', 4);

$koszyk->wyswietl();

?>

Dziedziczenie – Przykład 24

<?php

class Nazwany_koszyk extends Koszyk{

var $nazwa;

function ustaw_nazwe($nowa_nazwa)

{

$this->nazwa = $nowa_nazwa;

}

}

$koszyk = new Nazwany_koszyk;

$koszyk->ustaw_nazwe('Fredzio');

$koszyk->dodaj('2', 34);

echo 'Właściciel: '.$koszyk->nazwa.'<br/>';

$koszyk->wyswietl();

?>

Page 12: Podstawy PHP - Politechnika Opolskaciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można

Zastosowanie konstruktora klasy:

<?

class Auto_koszyk extends Nazwany_koszyki

{

function Auto_koszyk( $nazwa = 'Anonim')

{

$this->ustaw_nazwe($nazwa);

}

}

$koszyk = new Auto_koszyk('Jakiś właściciel');

$koszyk->dodaj('4', 30);

echo 'Właściciel: '.$koszyk->nazwa.'<br/>';

$koszyk->wyswietl();

?>

Include i require

W PHP istnieją dwie instrukcje, które pozwalają włączyć do kodu zawartość innego pliku także zawierającego kod PHP. Obu tym instrukcjom podaje się jeden parametr – nazwę pliku do włączenia do kodu (może to być ścieżka do pliku znajdującego się na innym serwerze WWW). Różnica między nimi polega na sposobie włączania tych plików do kodu. W przypadku instrukcji require pliki dołączane są do kodu jeszcze przed parsowaniem, w każdym miejscu gdzie znajduje się instrukcja require. Dlatego instrukcja ta nie nadaje się do dołączania plików których nazwa pobierana jest ze zmiennej – zamiast tego należy użyć instrukcji include. Używając tych instrukcji należy pamiętać o dwóch rzeczach. Po pierwsze, przetwarzanie plików zaincludowanych zaczyna się od trybu HTML, a więc jeśli plik zawiera tylko kod PHP, to powinien zaczynać się od jednego ze znaczników otwierających. Po drugie należy pamiętać, że jeśli instrukcja include używana jest w pętli lub instrukcji warunkowej, to pomimo że jest to teoretycznie jedna linia, to musi znajdować się ona w nawiasach klamrowych, ponieważ ta pojedyncza linia zamieniana jest na wiele linii dołączanych z innego pliku.

Funkcja readfile()

Innym typem funkcji służącej do dołączania treści zawartych w innym pliku jest funkcja readfile(). Rzeczą odróżniającą tą funkcję od instrukcji zawartych w poprzednim punkcie jest to, że dane pobrane z pliku nie są przetwarzane przez PHP, więc funkcja ta nadaje się tylko do wyświetlania plików HTML bądź czysto tekstowych.