SlideShare a Scribd company logo
1 of 5
Zmienne i tablice 1
Formularze
Protokół HTTP
Podstawą funkcjonowania stron WWW
jest protokół HTTP, którego używa
przeglądarka i serwer. Zasada jego
działania jest bardzo prosta. Gdy
chcemy obejrzeć dokument pod
podanym adresem URL, wysyłamy do
serwera tzw. żądanie HTTP zawierające
lokalizację zasobu oraz garść informacji
o nas samych.Serwer odnajdujelub generuje (np. przy pomocy PHP) odpowiedni dokument i odsyła wszystko jako
odpowiedź HTTP. Odpowiedź zawsze zawiera pewną ilość nagłówkówinformacyjnych orazopcjonalnątreść,wktórej
przesyłany jest dokument. Przeglądarka odbiera wszystko i rozpoczyna działanie. Protokół jest stosowany zarówno
do pobierania kodu HTML strony, jak i znajdujących się na niej obrazków, ściągania plików i innych danych
multimedialnych. Rodzaj pobieranej zawartości jest określany przez nagłówki.
Skrypty PHP zawsze pracują po stronie serwera, generując odpowiedzi HTTP na przychodzące do niego żądania.
Przeważnie koncentrujemy sięjedyniena budowaniu treści,ponieważinterpreter potrafi samodzielnieskonstruować
podstawowy zestaw odpowiednich nagłówków, który co najwyżej uzupełniamy. Bardzo często do wygenerowania
strony potrzebne są dodatkowe informacje, które najczęściej przechowywane są w bazie danych, a rzadziej - w
plikach.Skrypty pobierająz nich dane, poddająje obróbce i osadzają w kodzie HTML, który jest odsyłany do klienta.
Zmienne i tablice 2
Uwaga!
Gdy przeglądarka zaczyna wyświetlać dokument,skryptPHP już dawnoskończyłswoją pracę. Pamiętaj,że działanieTwoich skryptów nie
może wykroczyć poza ramyprotokołu HTTP,w szczególności reagowaćna zdarzenia w przeglądarce(np. kliknięciemyszką), ani
modyfikowaćfizyczniewysłanej treści.Do takich celówwykorzystywanesą innejęzyki itechnologie: JavaScript, AJAX.
Istotną częścią protokołu HTTP są rodzaje żądań (zwane "metodami") informujące o tym, co próbujemy zrobić.
Dwa podstawowe to:
1. Żądania GET - zwyczajne pobieranie dokumentu z serwera.
2. Żądania POST - wysłanie pewnych danych na serwer.
Istniejąjeszcze inne metody, które są corazpowszechniej stosowanew większych aplikacjach WWW,jedna k na
niektórych serwerach są one z nieznanych powodów poblokowane. Protokołem HTTP zajmiemy siędokładniej w
dalszej części podręcznika, tymczasem na razie będą nas interesować te dwie metody. Pierwsza z nich jest
wykorzystywana podczas zwykłego pobierania z serwera dokumentu, natomiast druga - przy formularzach.
Ogólnie o danych wejściowych
W żądaniu HTTP przenoszonych jest wiele informacji o tym, co użytkownik chce obejrzeć oraz o nim samym.
Wielu danych dostarcza takżesamserwer HTTP. Wszystkieone sąpodstawą dla aplikacji PHP do wygenerowania
odpowiedzi. Mechanizm ich odbierania ewoluował stopniowo. Pierwsze wersje języka rejestrowały wszystkie
nadesłane parametry, dane formularzy itd. jako zmienne, lecz było to wyjątkowo niebezpieczne. Dodając nowe
parametry można było rejestrować nowe zmienne, które mogły nadpisać zmienne używane w kodzie aplikacji
powodując jego błędne działanie(np. zyskaniepraw administratora strony przez atakującego). Programista nie
mógł także policzyć, ile danych właściwie trafiało do skryptu i gdzie są one zawarte.
Wszystko zmieniło się wraz z pojawieniem się PHP4. Obecnie wszystkie pola są rejestrowane w specjalnych,
tworzonych przez skrypttablicach asocjacyjnych posegregowanewedługmiejsca,zktórego nadeszły.PHP potrafi
odbierać informacje:
• Charakterystyczne dla metody GET (adresy URL)
• Charakterystyczne dla metody POST (zawartość formularzy)
• z serwera
• z ciasteczek
• z sesji (emulowanych przez PHP)
Adresy URL
Do adresu URL można dołączać po znaku zapytania dodatkowe
zmienne, np. www.example.com/strona.php?zmienna=wartosc&inna_zmienna=wartosc. Są
one przechowywane w tablicy $_GET. Ten sposób przekazywania danych wykorzystujemy tylko, gdy skrypt nie
wykonuje operacji mających efekty uboczne (np. może być wyszukiwani e, alejużnie dodawanielub usuwanie
rekordów) lub do przesyłania danych kontrolnych.W przeciwnym wypadku roboty indeksującestronę i proxy
ładujące strony z wyprzedzeniem mogą niechcący wykonywać operacje na serwerze. Ponadto cache
przeglądarki i dostawcówinternetowych może spowodować zignorowaniezapytań.
Przyjrzymy się zawartości tablicy:
array(1) {["parametr"]=> string(7) "wartosc"}
Tablica zawiera jeden element o nazwie parametr przechowujący wpisaną w adresie wartość.
Napiszemy teraz prosty skrypt wyświetlający informacje powitalne na podstawie danych z adresu:
Zmienne i tablice 3
<?php if(sizeof($_GET) == 2) { echo 'Witaj,'.$_GET['imie'].'
'.$_GET['nazwisko'].'!'; } else { echo 'Nieprawidłowa liczba parametrów!'; }
Nie przejmuj sięistnieniemkonstrukcji,której jeszczeniepoznaliśmy.Niektórzy pewnie domyślili się,co ona robi,
ale szczegóły będą podane już w następnym rozdziale. Na razie wpiszmy ją tak, jak jest. Funkcja sizeof()
pojawiającasięwkodzie zwraca ilość elementów w tablicy.Sprawdzamy w ten sposób,czy użytkownik podał to,
co trzeba. Kontrola nadchodzących danych jest niezwykle istotna i nigdy nie wolno jej zlekceważyć. Pominięcie
tego aspektu zazwyczaj kończy się dla skryptu tragicznie, bo jeżeli coś jest do zepsucia, na pewno znajdzie się
ktoś, kto tego dokona.
Stwórzmy prosty formularz XHTML wysyłający dane metodą GET:
<?xml version="1.0"encoding="utf-8"standalone="no"?><!DOCTYPEhtml PUBLIC "-//W3C//DTDXHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>Formularz XHTML</title>
</head>
<body> <form method="get"action="nazwaskryptu.php">
<p> <label>Podajimię: <input type="text"name="imie"/></label>
</p>
<p> <label>Podajnazwisko: <inputtype="text"name="nazwisko"/></label>
</p>
<p> <input type="submit" value="OK"/>
</p>
</form>
</body>
</html>
Choć tworzenie formularzy teoretycznie pasujedo następnej sekcji,tak naprawdę w tym momencie zwyczajnie
oszukujemy. Wypełnij ten formularz i wyślij go, a zobaczysz, że przeglądarka dokleiła do pliku podanego w
znaczniku FORM parametry utworzone na podstawie pól! Tak więc nasz skrypt nawet nie ma możliwości
stwierdzenia, skąd dane do niego przyszły! Poznajmy zatem metodę POST...
Formularze
Obsługa formularzy z prawdziwego zdarzenia, którymi można przesyłać setki informacji, odbywa się dosyć
podobnie, jak w przypadku użycia w formularzu metody "get" do przesyłania adresów z parametrami. Różnica
jest taka,że wszystko wysyła sięwyłącznie z formularza,który posiada parametr "method" ustawiony na "post"
oraz że korzysta się z tablicy $_POST wewnątrz samego skryptu. Przeróbmy nasze ostatnie dzieło tak, aby
pracowało w ten sposób.
<?php if(count($_POST) == 2) { echo 'Witaj,'.$_POST['imie'].'
'.$_POST['nazwisko'].'!'; } else { echo 'Nieprawidłowa liczba parametrów!'; }
W skrypcie podmieniamy jedynie nazwy tablic na $_POST. W formularzu musimy jeszcze zmienić metodę:
Zmienne i tablice 4
<html>
<head>
<title>Formularz HTML</title>
</head>
<body>
<form method="post" action="nazwaskryptu.php">
Podaj imię: <input type="text" name="imie"/><br/>
Podaj nazwisko:<input type="text" name="nazwisko"/><br/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
I gotowe. Wyślijterazformularz.Zauważ,że żadna informacja niejestdoklejana do adresu,ponieważtransmisja
odbywa się niejako innym kanałem.
Nazwy tablic są trochęnieprecyzyjne.To, że wysłaliśmy żądaniemetodą POSTwcale nie oznacza, że tablica $_GETbędziewtedy zawsze
pusta. Możliwejest jednocześnewysłaniedanychformularzem wraz ze zmiennymi w adresie URL, cosprawi,że obie tablicebędą
posiadaćjakąś zawartość.
Z kursówjęzyka HTML wiadomo, że istniejąróżnetypy pól formularzy.Oto, jakiewartości otrzymujeod nich PHP:
<input type="text" name="nazwa"/>
- skrypt otrzymuje $_POST['nazwa'] z wartością wpisaną w pole formularza.
<input type="hidden" name="nazwa" value="wartosc"/>
- skrypt otrzymuje $_POST['nazwa'] z wartością wpisaną w danym znaczniku. Użyteczne do przesyłania
formularzem ukrytych informacji, o których typowy użytkownik wiedzieć nie musi.
<input type="radio" name="nazwa" value="wartosc"/>
- pozycje należące do tej samej grupy muszą mieć identyczną nazwę. $_POST['nazwa'] będzie zawierać
wartość tej pozycji, która jest aktualnie zaznaczona.
<input type="checkbox" name="nazwa"/>
- jeśli pole jest zaznaczone, $_POST['nazwa'] zawierać będzie słowo "on".
<select name="nazwa">...</select>
- $_POST['nazwa'] zawierać będzie wartość wybranego z listy elementu.
<input type="submit" name="nazwa"/>
- zmienna $_POST['nazwa'] zostanie utworzona, jeżeli akurat ten przycisk zostanie wciśnięty.
Dzięki temu można do formularzy wstawiać kilka przycisków "submit" i reagować inaczej w zależności od tego,
który z nich został naciśnięty.
Serwer
Na sam koniec zostawiliśmy sobie kilka informacji przekazywanych interpreterowi przez serwer WWW (np.
Apache). Zacznijmy od określenia adresu IP gościa:
<?php
Zmienne i tablice 5
echo 'Witaj,twój adres IP to '.$_SERVER['REMOTE_ADDR'].'!';
Ten skrypt pokaże nam adres IP komputera lub sieci,w której znajdujesięinternauta. W tym drugim przypadku
dalszeinformacjesąniepewne. Serwerowi potrzebny jestwyłącznie ten adres,aby móc gdzieś wysłać rezultat, a
pola $_SERVER['HTTP_X_FORWARDED_FOR'] lub $_SERVER['HTTP_CLIENT_IP'] sąbardzo niepewne - generuje je
właśnie serwer proxy, ale nic nie stoi na przeszkodzie, by podszył się pod nie hacker. Uznawanie ważności
informacji tu zawartych było przyczyną wielu błędów bezpieczeństwa w popularnym skrypcie forów
dyskusyjnych phpBBi jeżeli naprawdęzależy Ci na nim, pozostań przy REMOTE_ADDR, a resztę traktuj wyłącznie
jako ciekawostkę.
Korzystając z funkcji gethostbyaddr() możemy uzyskać nazwę hosta, którego dotyczy adres IP:
<?php
echo 'Witaj,twój host to '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'!';
Spróbujmy zidentyfikować przeglądarkę użytkownika:
<?php echo 'Twoja przeglądarka została zidentyfikowana jako:
'.$_SERVER['HTTP_USER_AGENT'].'!';
Pole to zawiera wyłącznie surowe informacje. Każda przeglądarka wpisuje tu co innego i dlatego wyciągnięcie
ładnych i pogrupowanych w odpowiednie kategorie danych to zadaniena więcej, niż jeden artykuł. Pozostańmy
zatem przy takiej postaci, a przetwarzaniem nagłówków przeglądarek zajmiemy się kiedy indziej.
Adres strony, z której przybyliśmy do naszego skryptu, znajduje się w zmiennej $_SERVER['HTTP_REFERER'].
Można wykorzystać go do utworzenia linków "Cofnij" albo do detekcji, jakich słów kluczowych używają ludzie
trafiający do nas zwyszukiwarek.Zauważ - szukane frazy zazwyczaj dołączane sąwłaśniedo adresów URL i w ten
sposób można je zdobyć.
Uwaga: nie można polegać na obecności i prawidłowości tej informacji. Istnieją przeglądarki i zapory ogniowe,
które ją usuwają lub wstawiają tam dowolny adres podany przez użytkownika.
<?php
echo 'Przybyłeś do nas ze strony: '.$_SERVER['HTTP_REFERER'].'!';
W chwili obecnej to tyle,jeżeli chodzi o pobieraniedanych.Dalszych informacji dowiemy sięwtrakcienastępnych
rozdziałów w miarę potrzeby.

More Related Content

What's hot

Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptZnaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptThe Software House
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresBrainhub
 
ZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania koduZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania koduzamcamp
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - PrzewodnikOskar Wycislak
 
Bash 1 ----- wykład2i3
Bash 1   -----     wykład2i3Bash 1   -----     wykład2i3
Bash 1 ----- wykład2i3kkk112
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.Semihalf
 
Professional Javascript for Developers
Professional  Javascript for DevelopersProfessional  Javascript for Developers
Professional Javascript for DevelopersRule_Financial
 
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010SARE
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4kkk112
 
React Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + WebsocketsReact Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + WebsocketsThe Software House
 
4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
4Developers 2015: PHPNG kontra HHVM - Leszek KrupińskiPROIDEA
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPPiotr Gabryjeluk
 
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyJavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyRafal Piekarski
 
ZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPzamcamp
 
Poznaj wp-config.php "Ukryte" możliwości.
Poznaj wp-config.php  "Ukryte" możliwości.Poznaj wp-config.php  "Ukryte" możliwości.
Poznaj wp-config.php "Ukryte" możliwości.Marcin Jóźwiak
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...The Software House
 

What's hot (20)

Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScriptZnaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closures
 
ZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania koduZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania kodu
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - Przewodnik
 
Angular Restmod
Angular RestmodAngular Restmod
Angular Restmod
 
Bash 1 ----- wykład2i3
Bash 1   -----     wykład2i3Bash 1   -----     wykład2i3
Bash 1 ----- wykład2i3
 
Lambdy strumienie
Lambdy strumienieLambdy strumienie
Lambdy strumienie
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Professional Javascript for Developers
Professional  Javascript for DevelopersProfessional  Javascript for Developers
Professional Javascript for Developers
 
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4
 
Wyszukiwanie
WyszukiwanieWyszukiwanie
Wyszukiwanie
 
React Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + WebsocketsReact Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + Websockets
 
4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHP
 
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyJavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
 
ZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHP
 
Poznaj wp-config.php "Ukryte" możliwości.
Poznaj wp-config.php  "Ukryte" możliwości.Poznaj wp-config.php  "Ukryte" możliwości.
Poznaj wp-config.php "Ukryte" możliwości.
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
 

Similar to Zajecia4 progbiz

Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...Tomasz Kopacz
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linuxbm9ib2r5
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoTomasz Dziuda
 
REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaTomasz Dziuda
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaMaciej Ziarko
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1Kamil Fojuth
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤Tomasz Dziuda
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiastosecman_pl
 
HTTP od zera do bohatera
HTTP od zera do bohateraHTTP od zera do bohatera
HTTP od zera do bohateraHordeTechnology
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETBartlomiej Zass
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwLuke Adamczewski
 
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Polcode
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API3camp
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-APITomasz Dziuda
 
Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008Przemysław ...
 
Export danych do word’a i excel’a
Export danych do word’a i excel’aExport danych do word’a i excel’a
Export danych do word’a i excel’asobek_wow
 

Similar to Zajecia4 progbiz (20)

Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp Trójmiasto
 
REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp Warszawa
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
 
HTTP od zera do bohatera
HTTP od zera do bohateraHTTP od zera do bohatera
HTTP od zera do bohatera
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
Ajax. Ćwiczenia
Ajax. ĆwiczeniaAjax. Ćwiczenia
Ajax. Ćwiczenia
 
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NET
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
 
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-API
 
Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008
 
Export danych do word’a i excel’a
Export danych do word’a i excel’aExport danych do word’a i excel’a
Export danych do word’a i excel’a
 

Zajecia4 progbiz

  • 1. Zmienne i tablice 1 Formularze Protokół HTTP Podstawą funkcjonowania stron WWW jest protokół HTTP, którego używa przeglądarka i serwer. Zasada jego działania jest bardzo prosta. Gdy chcemy obejrzeć dokument pod podanym adresem URL, wysyłamy do serwera tzw. żądanie HTTP zawierające lokalizację zasobu oraz garść informacji o nas samych.Serwer odnajdujelub generuje (np. przy pomocy PHP) odpowiedni dokument i odsyła wszystko jako odpowiedź HTTP. Odpowiedź zawsze zawiera pewną ilość nagłówkówinformacyjnych orazopcjonalnątreść,wktórej przesyłany jest dokument. Przeglądarka odbiera wszystko i rozpoczyna działanie. Protokół jest stosowany zarówno do pobierania kodu HTML strony, jak i znajdujących się na niej obrazków, ściągania plików i innych danych multimedialnych. Rodzaj pobieranej zawartości jest określany przez nagłówki. Skrypty PHP zawsze pracują po stronie serwera, generując odpowiedzi HTTP na przychodzące do niego żądania. Przeważnie koncentrujemy sięjedyniena budowaniu treści,ponieważinterpreter potrafi samodzielnieskonstruować podstawowy zestaw odpowiednich nagłówków, który co najwyżej uzupełniamy. Bardzo często do wygenerowania strony potrzebne są dodatkowe informacje, które najczęściej przechowywane są w bazie danych, a rzadziej - w plikach.Skrypty pobierająz nich dane, poddająje obróbce i osadzają w kodzie HTML, który jest odsyłany do klienta.
  • 2. Zmienne i tablice 2 Uwaga! Gdy przeglądarka zaczyna wyświetlać dokument,skryptPHP już dawnoskończyłswoją pracę. Pamiętaj,że działanieTwoich skryptów nie może wykroczyć poza ramyprotokołu HTTP,w szczególności reagowaćna zdarzenia w przeglądarce(np. kliknięciemyszką), ani modyfikowaćfizyczniewysłanej treści.Do takich celówwykorzystywanesą innejęzyki itechnologie: JavaScript, AJAX. Istotną częścią protokołu HTTP są rodzaje żądań (zwane "metodami") informujące o tym, co próbujemy zrobić. Dwa podstawowe to: 1. Żądania GET - zwyczajne pobieranie dokumentu z serwera. 2. Żądania POST - wysłanie pewnych danych na serwer. Istniejąjeszcze inne metody, które są corazpowszechniej stosowanew większych aplikacjach WWW,jedna k na niektórych serwerach są one z nieznanych powodów poblokowane. Protokołem HTTP zajmiemy siędokładniej w dalszej części podręcznika, tymczasem na razie będą nas interesować te dwie metody. Pierwsza z nich jest wykorzystywana podczas zwykłego pobierania z serwera dokumentu, natomiast druga - przy formularzach. Ogólnie o danych wejściowych W żądaniu HTTP przenoszonych jest wiele informacji o tym, co użytkownik chce obejrzeć oraz o nim samym. Wielu danych dostarcza takżesamserwer HTTP. Wszystkieone sąpodstawą dla aplikacji PHP do wygenerowania odpowiedzi. Mechanizm ich odbierania ewoluował stopniowo. Pierwsze wersje języka rejestrowały wszystkie nadesłane parametry, dane formularzy itd. jako zmienne, lecz było to wyjątkowo niebezpieczne. Dodając nowe parametry można było rejestrować nowe zmienne, które mogły nadpisać zmienne używane w kodzie aplikacji powodując jego błędne działanie(np. zyskaniepraw administratora strony przez atakującego). Programista nie mógł także policzyć, ile danych właściwie trafiało do skryptu i gdzie są one zawarte. Wszystko zmieniło się wraz z pojawieniem się PHP4. Obecnie wszystkie pola są rejestrowane w specjalnych, tworzonych przez skrypttablicach asocjacyjnych posegregowanewedługmiejsca,zktórego nadeszły.PHP potrafi odbierać informacje: • Charakterystyczne dla metody GET (adresy URL) • Charakterystyczne dla metody POST (zawartość formularzy) • z serwera • z ciasteczek • z sesji (emulowanych przez PHP) Adresy URL Do adresu URL można dołączać po znaku zapytania dodatkowe zmienne, np. www.example.com/strona.php?zmienna=wartosc&inna_zmienna=wartosc. Są one przechowywane w tablicy $_GET. Ten sposób przekazywania danych wykorzystujemy tylko, gdy skrypt nie wykonuje operacji mających efekty uboczne (np. może być wyszukiwani e, alejużnie dodawanielub usuwanie rekordów) lub do przesyłania danych kontrolnych.W przeciwnym wypadku roboty indeksującestronę i proxy ładujące strony z wyprzedzeniem mogą niechcący wykonywać operacje na serwerze. Ponadto cache przeglądarki i dostawcówinternetowych może spowodować zignorowaniezapytań. Przyjrzymy się zawartości tablicy: array(1) {["parametr"]=> string(7) "wartosc"} Tablica zawiera jeden element o nazwie parametr przechowujący wpisaną w adresie wartość. Napiszemy teraz prosty skrypt wyświetlający informacje powitalne na podstawie danych z adresu:
  • 3. Zmienne i tablice 3 <?php if(sizeof($_GET) == 2) { echo 'Witaj,'.$_GET['imie'].' '.$_GET['nazwisko'].'!'; } else { echo 'Nieprawidłowa liczba parametrów!'; } Nie przejmuj sięistnieniemkonstrukcji,której jeszczeniepoznaliśmy.Niektórzy pewnie domyślili się,co ona robi, ale szczegóły będą podane już w następnym rozdziale. Na razie wpiszmy ją tak, jak jest. Funkcja sizeof() pojawiającasięwkodzie zwraca ilość elementów w tablicy.Sprawdzamy w ten sposób,czy użytkownik podał to, co trzeba. Kontrola nadchodzących danych jest niezwykle istotna i nigdy nie wolno jej zlekceważyć. Pominięcie tego aspektu zazwyczaj kończy się dla skryptu tragicznie, bo jeżeli coś jest do zepsucia, na pewno znajdzie się ktoś, kto tego dokona. Stwórzmy prosty formularz XHTML wysyłający dane metodą GET: <?xml version="1.0"encoding="utf-8"standalone="no"?><!DOCTYPEhtml PUBLIC "-//W3C//DTDXHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Formularz XHTML</title> </head> <body> <form method="get"action="nazwaskryptu.php"> <p> <label>Podajimię: <input type="text"name="imie"/></label> </p> <p> <label>Podajnazwisko: <inputtype="text"name="nazwisko"/></label> </p> <p> <input type="submit" value="OK"/> </p> </form> </body> </html> Choć tworzenie formularzy teoretycznie pasujedo następnej sekcji,tak naprawdę w tym momencie zwyczajnie oszukujemy. Wypełnij ten formularz i wyślij go, a zobaczysz, że przeglądarka dokleiła do pliku podanego w znaczniku FORM parametry utworzone na podstawie pól! Tak więc nasz skrypt nawet nie ma możliwości stwierdzenia, skąd dane do niego przyszły! Poznajmy zatem metodę POST... Formularze Obsługa formularzy z prawdziwego zdarzenia, którymi można przesyłać setki informacji, odbywa się dosyć podobnie, jak w przypadku użycia w formularzu metody "get" do przesyłania adresów z parametrami. Różnica jest taka,że wszystko wysyła sięwyłącznie z formularza,który posiada parametr "method" ustawiony na "post" oraz że korzysta się z tablicy $_POST wewnątrz samego skryptu. Przeróbmy nasze ostatnie dzieło tak, aby pracowało w ten sposób. <?php if(count($_POST) == 2) { echo 'Witaj,'.$_POST['imie'].' '.$_POST['nazwisko'].'!'; } else { echo 'Nieprawidłowa liczba parametrów!'; } W skrypcie podmieniamy jedynie nazwy tablic na $_POST. W formularzu musimy jeszcze zmienić metodę:
  • 4. Zmienne i tablice 4 <html> <head> <title>Formularz HTML</title> </head> <body> <form method="post" action="nazwaskryptu.php"> Podaj imię: <input type="text" name="imie"/><br/> Podaj nazwisko:<input type="text" name="nazwisko"/><br/> <input type="submit" value="OK"/> </form> </body> </html> I gotowe. Wyślijterazformularz.Zauważ,że żadna informacja niejestdoklejana do adresu,ponieważtransmisja odbywa się niejako innym kanałem. Nazwy tablic są trochęnieprecyzyjne.To, że wysłaliśmy żądaniemetodą POSTwcale nie oznacza, że tablica $_GETbędziewtedy zawsze pusta. Możliwejest jednocześnewysłaniedanychformularzem wraz ze zmiennymi w adresie URL, cosprawi,że obie tablicebędą posiadaćjakąś zawartość. Z kursówjęzyka HTML wiadomo, że istniejąróżnetypy pól formularzy.Oto, jakiewartości otrzymujeod nich PHP: <input type="text" name="nazwa"/> - skrypt otrzymuje $_POST['nazwa'] z wartością wpisaną w pole formularza. <input type="hidden" name="nazwa" value="wartosc"/> - skrypt otrzymuje $_POST['nazwa'] z wartością wpisaną w danym znaczniku. Użyteczne do przesyłania formularzem ukrytych informacji, o których typowy użytkownik wiedzieć nie musi. <input type="radio" name="nazwa" value="wartosc"/> - pozycje należące do tej samej grupy muszą mieć identyczną nazwę. $_POST['nazwa'] będzie zawierać wartość tej pozycji, która jest aktualnie zaznaczona. <input type="checkbox" name="nazwa"/> - jeśli pole jest zaznaczone, $_POST['nazwa'] zawierać będzie słowo "on". <select name="nazwa">...</select> - $_POST['nazwa'] zawierać będzie wartość wybranego z listy elementu. <input type="submit" name="nazwa"/> - zmienna $_POST['nazwa'] zostanie utworzona, jeżeli akurat ten przycisk zostanie wciśnięty. Dzięki temu można do formularzy wstawiać kilka przycisków "submit" i reagować inaczej w zależności od tego, który z nich został naciśnięty. Serwer Na sam koniec zostawiliśmy sobie kilka informacji przekazywanych interpreterowi przez serwer WWW (np. Apache). Zacznijmy od określenia adresu IP gościa: <?php
  • 5. Zmienne i tablice 5 echo 'Witaj,twój adres IP to '.$_SERVER['REMOTE_ADDR'].'!'; Ten skrypt pokaże nam adres IP komputera lub sieci,w której znajdujesięinternauta. W tym drugim przypadku dalszeinformacjesąniepewne. Serwerowi potrzebny jestwyłącznie ten adres,aby móc gdzieś wysłać rezultat, a pola $_SERVER['HTTP_X_FORWARDED_FOR'] lub $_SERVER['HTTP_CLIENT_IP'] sąbardzo niepewne - generuje je właśnie serwer proxy, ale nic nie stoi na przeszkodzie, by podszył się pod nie hacker. Uznawanie ważności informacji tu zawartych było przyczyną wielu błędów bezpieczeństwa w popularnym skrypcie forów dyskusyjnych phpBBi jeżeli naprawdęzależy Ci na nim, pozostań przy REMOTE_ADDR, a resztę traktuj wyłącznie jako ciekawostkę. Korzystając z funkcji gethostbyaddr() możemy uzyskać nazwę hosta, którego dotyczy adres IP: <?php echo 'Witaj,twój host to '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'!'; Spróbujmy zidentyfikować przeglądarkę użytkownika: <?php echo 'Twoja przeglądarka została zidentyfikowana jako: '.$_SERVER['HTTP_USER_AGENT'].'!'; Pole to zawiera wyłącznie surowe informacje. Każda przeglądarka wpisuje tu co innego i dlatego wyciągnięcie ładnych i pogrupowanych w odpowiednie kategorie danych to zadaniena więcej, niż jeden artykuł. Pozostańmy zatem przy takiej postaci, a przetwarzaniem nagłówków przeglądarek zajmiemy się kiedy indziej. Adres strony, z której przybyliśmy do naszego skryptu, znajduje się w zmiennej $_SERVER['HTTP_REFERER']. Można wykorzystać go do utworzenia linków "Cofnij" albo do detekcji, jakich słów kluczowych używają ludzie trafiający do nas zwyszukiwarek.Zauważ - szukane frazy zazwyczaj dołączane sąwłaśniedo adresów URL i w ten sposób można je zdobyć. Uwaga: nie można polegać na obecności i prawidłowości tej informacji. Istnieją przeglądarki i zapory ogniowe, które ją usuwają lub wstawiają tam dowolny adres podany przez użytkownika. <?php echo 'Przybyłeś do nas ze strony: '.$_SERVER['HTTP_REFERER'].'!'; W chwili obecnej to tyle,jeżeli chodzi o pobieraniedanych.Dalszych informacji dowiemy sięwtrakcienastępnych rozdziałów w miarę potrzeby.