Język JavaScript. Wprowadzenie. Podstawowe rozszerzenia JavaScript



Podobne dokumenty
Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Bazy Danych i Usługi Sieciowe

Systemy internetowe Wykład 3 PHP

CZYM JEST JAVASCRIPT?

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Tworzenie Stron Internetowych. odcinek 10

Krótki kurs JavaScript

Umieszczanie kodu. kod skryptu

Języki skryptowe - PHP. Podstawy PHP. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Bazy Danych i Usługi Sieciowe

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Języki skryptowe w programie Plans

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

PHP: bloki kodu, tablice, obiekty i formularze

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Należy ściągnąć oprogramowanie Apache na platformę

Podstawy JavaScript ćwiczenia

Zdarzenia Zdarzenia onload i onunload

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

JavaScript funkcyjność

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Zaawansowane bazy danych i hurtownie danych

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Podstawy programowania skrót z wykładów:

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]

Języki programowania wysokiego poziomu. PHP cz.2.

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Języki programowania wysokiego poziomu. PHP cz.1.

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Programowanie obiektowe

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Cw.12 JAVAScript w dokumentach HTML

XML extensible Markup Language. część 5

JAVAScript w dokumentach HTML (1)

Test przykładowy 2 PAI WSB Wrocław /06/2018

JAVASCRIPT (cz. IV) ĆWICZENIA DO SAMODZIELNEGO WYKONANIA materiały dydaktyczne dla słuchaczy opracowanie: by Arkadiusz Gawełek, Łódź

Kurs PHP. Literatura. Zagadnienia: Wprowadzenie

Wykład 03 JavaScript. Michał Drabik

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

JAVAScript w dokumentach HTML - przypomnienie

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Zdarzenia w JavaScript (Zajęcia r.)

Dlaczego PHP? - zalety

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Bazy danych i strony WWW

Zmienne i stałe w PHP

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Współdziałanie przeglądarki i skryptów w pliku HTML (lub XML), oraz współdziałanie przeglądarki i ekranu ilustruje niżej położony rysunek.

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Zajęcia 4 - Wprowadzenie do Javascript

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

Podstawy programowania. Podstawy C# Tablice

PHP. PHP: Hypertext Preprocessor. mgr inż. Remigiusz Pokrzywiński

Oczywiście plik musi mieć rozszerzenie *.php

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

PHP i MySQL dla każdego / Marcin Lis. Wyd. 3. Gliwice, cop Spis treści

Internetowe bazy danych

Programowanie obiektowe

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

media Blitz wydajne sytemy szablonów

1 Podstawy c++ w pigułce.

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

JAVAScript w dokumentach HTML (2)

JavaScript. mgr inż. Remigiusz Pokrzywiński

JAVAScript tablice, przekazanie danych do funkcji, obiekty Date i window

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Bloki anonimowe w PL/SQL

Obiektowe bazy danych

Wykład 2 Składnia języka C# (cz. 1)

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Personal Home Page PHP: Hypertext Preprocessor

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie Komputerów

Aplikacje WWW - laboratorium

1. Wprowadzenie do języka PHP

Microsoft IT Academy kurs programowania

Materiały do laboratorium MS ACCESS BASIC

PODSTAWY BAZ DANYCH 13. PL/SQL

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Rys.2.1. Drzewo modelu DOM [1]

Właściwości i metody obiektu Comment Właściwości

Podstawy programowania III WYKŁAD 2

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Administracja i programowanie pod Microsoft SQL Server 2000

1 Podstawy c++ w pigułce.

Programowanie internetowe

WPROWADZENIE. Użycie PHP

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Pakiety podprogramów Dynamiczny SQL

Transkrypt:

Wprowadzenie 124 Język JavaScript JavaScript przenaszalnym, zorientowanym obiektowo językiem skryptowym JavaScript nie jest samodzielnym, pełnowartościowym językiem programowania, został tak zaprojektowany, aby można było go łatwo zagnieżdżać w innych produktach i aplikacjach JavaScript został opracowany przez firmę Netscape ECMAScript ustandaryzowana wersja języka (JavaScript jest z nią zgodny, jednocześnie oferując dodatkową funkcjonalność) JScript rozszerzona implementacja ECMAScript firmy Microsoft Core JavaScript obejmuje podstawowy zbiór obiektów, takich jak Array, Date i Math, oraz podstawowe elementy składni języka: operatory, struktury sterujące, instrukcje Core JavaScript może być rozszerzony o dodatkowe elementy, wymagane w określonych zastosowaniach Podstawowe rozszerzenia JavaScript 125 JavaScript Przykład programu 126 Client-side JavaScript rozszerza podstawę języka o obiekty reprezentujące środowisko przeglądarki i model dokumentu tzw. Document Object Model (DOM), pozwalając m.in. na: Dynamiczną generację dokumentów HTML Obsługę formularzy HTML Obsługę zdarzeń i komunikację z użytkownikiem Nawigację między dokumentami Server-side JavaScript rozszerza podstawę języka o obiekty typowe dla środowiska serwera, umożliwiając m.in.: Komunikację z bazami danych Operacje na plikach <HEAD> <TITLE>JavaScript Example</TITLE> <SCRIPT LANGUAGE="JavaScript"> document.writeln("<h1>welcome!</h1>"); </SCRIPT> </BODY> </HTML> Obiekt document reprezentuje dokument HTML aktualnie wyświetlany w przeglądarce Metoda writeln wypisuje jedną linię tekstu w treści wyświetlanego dokumentu Wykonuje się zanim wyświetlane jest Średnik na końcu linii można pominąć, gdy koniec instrukcji wynika z kontekstu

Wyświetlanie komunikatów 127 Wartości i typy danych 128 <HEAD> <TITLE>JavaScript Example</TITLE> <SCRIPT LANGUAGE="JavaScript"> window.alert("welcome to \n JavaScript!"); </SCRIPT> </BODY> </HTML> JavaScript wykorzystuje następujące typy danych: liczby, np. 42 lub 3.14159 wartości logiczne, true oraz false łańcuchy znaków, np. "hello!", 'Wow!', "", "one \n two" null, wartość null (JavaScript rozróżnia wielkość liter: np. NULL nie jest traktowane jako null), w kontekście liczbowym zachowuje się jak 0, w kontekście logicznym jak false undefined, wartość undefined (niezdefiniowana), w warunkach logicznych zachowuje się jak false Obiekt window reprezentuje okno przeglądarki Metoda alert wyświetla okienko dialogowe z komunikatem JavaScript jest językiem dynamicznie typowanym deklarując zmienną nie podaje się jej typu; konwersja typów przeprowadzana jest automatycznie w trakcie działania skryptu x = "The answer is " + 42 // zwraca "The answer is 42 "37" - 7 // zwraca 30 "37" + 7 // zwraca 377 Zmienne Zmienne deklaruje się na dwa sposoby: Przez przypisanie wartości; np. x = 42 Za pomocą słowa kluczowego var; np. var x = 42 Zmienna lub element tablicy, któremu nie przypisano wartości ma wartość undefined; wynikiem jej ewaluacji jest: Gdy zmienna deklarowana z var undefined lub NaN Gdy zmienna deklarowana bez var generowany jest błąd Zmienne deklarowane poza funkcjami są zmiennymi globalnymi; zmienne deklarowane w obrębie funkcji są zmiennymi lokalnymi dostępnymi tylko w danej funkcji Użycie słowa kluczowego var przy deklaracji zmiennej globalnej jest opcjonalne, ale jest wymagane przy deklaracji zmiennych lokalnych Stałe deklaruje się za pomocą const; np. const g = 9.81 129 Korzystanie ze zmiennych Przykład (1) <HEAD> <TITLE>JavaScript Example</TITLE> <SCRIPT LANGUAGE="JavaScript"> firstnumber = window.prompt("enter the first integer","0"); secondnumber = window.prompt("enter the second integer","0"); number1 = parseint(firstnumber); number2 = parseint(secondnumber); sum = number1 + number2; document.writeln("<h1>the sum is " + sum + "</H1>"); </SCRIPT> </BODY> </HTML> Metoda prompt wyświetla okienko do wprowadzania wartości Jawnie konwertuje łańcuch znaków na liczbę całkowitą 130

Korzystanie ze zmiennych Przykład (2) 131 Wyrażenia i operatory Przypisania: +=, -=, *=, /=, %=, <<=, >>= Arytmetyczne: +, -, *, /, %, ++, -- Bitowe: <<, >> (zachowuje znak), >>>, &, ^, Porównania: ==,!=, === (równe wartości i ten sam typ),!==, >, <, >=, <= Logiczne: &&,,! Inne: condition? val1:val2, op1, op2 (operator przecinka), delete (niszczy obiekt), new (tworzy obiekt), this (bieżący obiekt), typeof (zwraca typ operandu jako łańcuch znaków), void, in, instanceof 132 Instrukcje 133 Definiowanie funkcji 134 if (condition) { statements1 [else { statements2 ] do { statement while (condition) while (condition) { statements label break continue switch (expression){ case label : statement; break; case label : statement; break;... default : statement; for (variable in object) { statements with (object){ statements /* comments */ // comments throw exception try { catch (exception) { for ([initialexpression]; [condition]; [incrementexpression]) { statements <HEAD> <TITLE>JavaScript Example</TITLE> <SCRIPT LANGUAGE="JavaScript"> document.writeln("<h1>square the numbers from 1 to 10</H1>"); for (x = 1; x <= 10; x++) document.writeln("the square of "+x+" is "+square(x)+ "</BR>"); function square(y) { return y*y; </SCRIPT> </BODY> </HTML>

Predefiniowane obiekty 135 Tablice 136 Array, e.g.: billingmethod = new Array(5) Boolean, e.g.: myboleanobject = new Boolean(true) Date, e.g.: Xmas95 = new Date("December 25, 1995 13:30:00") metody obiektu Date: set*, get* (np. getfullyear()),... Function, e.g.:var setbgcolor = new Function( "document.bgcolor='antiquewhite'") Math, e.g.: Math.sin(1.56) metody obiektu Math: abs, sin, cos, tan, acos, asin, atan, exp, log, ceil, floor, min, max, pow, random, round, sqrt String, e.g.: s1 = new String("foo") RegExp Number Do obsługi tablic służy obiekt Array Przykłady tworzenia i inicjalizowania tablic: billingmethod = new Array(5); billingmethod[1] = "cash"; myarray = new Array("Wind","Rain","Fire"); coffees = ["French Roast", "Columbian", "Kona"] Metody obiektu Array: concat, join, pop, push, reverse, shift, slice, splice, sort, unshift; Pole: length Indeks liczbowy od 0; indeksem tablicy mogą być również łańcuchy znaków (tablice asocjacyjne) Nawigacja po elementach tablicy 137 Łańcuchy znaków 138 var tab = new Array(5); tab[0] = 'a'; tab[2] = 'c'; tab[3] = 'd'; for (var i = 0; i < tab.length; i++) document.writeln(''+i+":"+tab[i]); Łańcuchy znaków występują jako obiekty String i jako literały (wywołanie metody obiektu String na rzecz literału powoduje automatyczną konwersję literału do tymczasowego obiektu String) Metody obiektu String: zorientowane na HTML: anchor, big, blink, fixed, italics, small, strike, sub, sup, link zorientowane na przetwarzanie treści: charat, charcodeat, indexof, lastindexof, concat, fromcharcode, split, slice, substring, substr, match, replace, search, tolowercase, touppercase Operatory konkatenacji: +, +=; Pole: length for (var j in tab) document.writeln(''+j+":"+tab[j]); 0:a 1:undefined 2:c 3:d 4:undefined 0:a 2:c 3:d document.writeln("first bold text".bold()); document.writeln("<b>second bold text</b>");

JavaScript w dokumentach HTML 139 Obsługa zdarzeń 140 JavaScript może być zagnieżdżony w dokumencie HTML: jako instrukcje i funkcje w obrębie znacznika <SCRIPT>...</SCRIPT> w sekcji <HEAD> poprzez wyspecyfikowanie pliku z kodem JavaScript, np. <SCRIPT SRC= filename.js"></script> poprzez podanie wyrażenia JavaScript jako wartości atrybutu znacznika HTML, np. <HR WIDTH="&{barWidth;%" ALIGN="LEFT"> jako procedury obsługi zdarzeń dla znaczników HTML, np. <INPUT TYPE ="button" VALUE="Press Me" onclick="myfunc('astring')"> Kod JavaScript jest zazwyczaj umieszczany w komentarzu HTML w celu ukrycia go przed starszymi przeglądarkami Kod HTML zawarty w znaczniku <NOSCRIPT> jest wyświetlany w przeglądarkach nieobsługujących języka JavaScript Nazwy zdarzeń: onabort, onblur, onchange, onclick, ondragdrop, onerror, onfocus, onkeydown, onkeyup, onkeypress, onload, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onmove, onreset, onresize, onselect, onsubmit, onunload Definiowanie procedur obsługi zdarzeń: <TAG eventhandler="javascript Code"> przykład: <INPUT TYPE="button" NAME="Button1" VALUE="Open Sesame!" onclick="window.open('mydoc.html', 'newwin')"> Obsługa zdarzeń - Przykład (1) 141 Obsługa zdarzeń Przykład (2) 142 <HEAD> <SCRIPT> function compute() { myform.result.value = eval(myform.expr.value) </SCRIPT> <FORM NAME="myform"> funkcja eval wartościuje podane wyrażenie Enter an expression: <INPUT TYPE="text" NAME="expr" SIZE=15 > <INPUT TYPE="button" VALUE="Calculate" onclick="compute()"> <BR><BR> Result: <INPUT TYPE="text" NAME="result" SIZE=15 > </FORM> </BODY> </HTML> <HEAD> <SCRIPT> function isaposnum(s) { return (parseint(s) > 0) function value_check(item) { if (!isaposnum(item.value)) alert("please enter a positive number"); </SCRIPT> <FORM> Quantity: <INPUT TYPE="text" NAME="q" onchange="value_check(this)"><br> Price: <INPUT TYPE="text" NAME="p" onchange="value_check(this)"><br><br> <INPUT TYPE="submit"> </FORM> </BODY> </HTML>

Obsługa zdarzeń Przykład (3) <HEAD> <SCRIPT LANGUAGE="JavaScript"> function m1() { i1.innertext="mouse Over"; function m2() { i1.innertext="mouse Out"; 143 Hierarchia obiektów dokumentu HTML i przeglądarki Otwarcie dokumentu HTML w przeglądarce powoduje utworzenie wielu obiektów języka JavaScript Obiekty te tworzą hierarchię będącą odbiciem struktury strony HTML 144 </SCRIPT> <B id="i1" onmouseover="m1()" onmouseout="m2()">mouse Out</B> </BODY> </HTML> Obiekty window i frame 145 window.setinterval setinterval() - Przykład 146 Podstawowe metody: open (otwiera okno przeglądarki) close (zamyka okno przeglądarki) alert (wyświetla okienko z komunikatem) confirm (wyświetla okienko z przyciskami OK i Anuluj) prompt (wyświetla okienko z polem tekstowym do wprowadzenia wartości) focus, blur (aktywuje / deaktywuje element) scrollto (przewija zawartość okna do określonej współrzędnej) setinterval (wartościuje wyrażenie lub wywołuje funkcję zgodnie z podanym interwałem czasowym) settimeout (wartościuje wyrażenie lub wywołuje funkcję po upłynięciu podanego czasu) Podstawowe pola: location (pozwala przekierować klienta do innego adresu URL) <HEAD> <SCRIPT LANGUAGE="JavaScript"> var seconds = 0; function starttimer(){ window.setinterval("updatetime()", 1000); function updatetime(){ seconds++; sofar.innertext = seconds; </SCRIPT> <BODY OnLoad="startTimer()"> <P>Seconds you have spent viewing this page so far: <B ID="soFar">0</B></P> </BODY> </HTML>

Obiekty document i form 147 Obiekty location, history i navigator 148 Metody obiektu document: write, writeln,... Właściwości obiektu document: bgcolor, fgcolor, linkcolor, alinkcolor, vlinkcolor, lastmodified, referrer, cookie,... Każdy formularz reprezentowany jest przez obiekt form; dokument HTML może zawierać wiele formularzy są one dostępne przez tablicę forms lub swoje nazwy, np.: document.forms[0], document.myform Elementy formularza (pola tekstowe, przyciski radiowe, itp.) są dostępne poprzez tablicę elements lub swoje nazwy, np.: document.forms[0].elements[0], document.forms[0].imie Pola obiektu location zawierają informacje o adresie URL aktualnie załadowanej strony; location ma dwie methody: reload ponownie ładuje bieżący dokument replace ładuje podany adres URL w bieżącej pozycji historii Obiekt history zawiera listę łańcuchów znaków reprezentujących odwiedzone adresy URL; właściwości: current, next, previous, metody: go; e.g. history.go(-1) Obiekt navigator zawiera informacje o wersji używanej przeglądarki; jedna z metod: javaenabled informuje czy włączona jest Java Typowe zastosowania JavaScript po stronie przeglądarki Weryfikacja poprawności danych wprowadzanych do formularzy HTML Dynamiczne modyfikacje list wyboru w formularzach Otwieranie nowych okien z możliwością określenia ich położenia i funkcjonalności Otwieranie dodatkowych okien przy otwarciu lub opuszczeniu dokumentu Nawigacja za pomocą przycisków Modyfikacja wyglądu elementów w związku z nawigacją myszą Budowa rozwijanych menu NOWOŚĆ: AJAX Asynchronous JavaScript and XML Implementacja części logiki aplikacji po stronie przeglądarki w JavaScript Asynchroniczne żądania HTTP wysyłane do serwera; w odpowiedzi serwer przesyła dane w formacie XML Uaktualnianie zawartości w przeglądarce bez konieczności przeładowywania całej strony (modyfikacja dokumentu poprzez interfejs DOM) 149 Weryfikacja poprawności danych w formularzu - Przykład <HEAD> Zwrócenie false wstrzymuje <SCRIPT> wysłanie danych z formularza function sprawdz() { var liczby = "0123456789"; if (mojaforma.rok.value == "") { alert("podaj wartość!"); return false; for (var i=0; i<mojaforma.rok.value.length; i++) if (liczby.indexof(mojaforma.rok.value.charat(i)) == -1) { alert("rok musi być liczbą!"); return false; </SCRIPT> <FORM NAME="mojaForma"> Podaj rok: <INPUT TYPE="text" NAME="rok" SIZE=5 > <INPUT TYPE="button" VALUE="Szukaj" onclick="sprawdz()"> </FORM> </BODY> </HTML> 150

Common Gateway Interface (CGI) 152 Technologie budowy aplikacji pracujących po stronie serwera WWW CGI jest interfejsem służącym do uruchamiania zewnętrznych programów po stronie serwera WWW Aplikacje CGI mogą być tworzone w C, Pascal, Fortran, Perl, językach skryptowych, itd. Jednym z najpopularniejszych zastosowań CGI jest umożliwianie bieżącego dostępu do baz danych Serwer WWW wykonuje aplikację CGI i przesyła wynik jej pracy do klienta WWW CGI definiuje interfejs pomiędzy serwerami WWW a aplikacjami CGI, obejmujący parametry wywołania, wejście i wyjście Adresy URL dla aplikacji CGI 153 Zmienne środowiskowe CGI 154 Przykładowy URL dla bezparametrowej aplikacji CGI: http://www.foo.org/cgi-bin/foo.cgi W metodzie GET, parametry dla aplikacji CGI są przekazywane w URL poprzez dołączenie znaku zapytania, a za nim listy argumentów i wartości (rozdzielanych & ): http://www.foo.org/cgi-bin/foo.cgi?a=1 http://www.foo.org/cgi-bin/foo.cgi?a=1&b=5&c=3 W metodzie POST, parametry dla aplikacji CGI są przekazywane na standardowe wejście parametry zakodowane jak w metodzie GET dodatkowo istnieje możliwość przekazania zawartości wieloczęściowej wykorzystywane do przesyłania plików (upload) Parametry wywołania są dostępne poprzez zmienne środowiskowe (metoda GET) lub odczyt ze standardowego wejścia (metoda POST) Serwer WWW przekazuje aplikacji CGI dane przy pomocy zmiennych środowiskowych; w języku C, mogą one być odczytywane przez funkcję getenv() Niektóre zmienne środowiskowe CGI: REQUEST_METHOD metoda żądania, dla HTTP: GET, POST,... QUERY_STRING - argumenty wejściowe w URL po znaku? (dla metody GET) CONTENT_LENGTH rozmiar danych przesłanych na standardowe wejście programu CGI (wykorzystywane w metodzie POST) PATH_INFO - ścieżka URL do aplikacji CGI REMOTE_ADDR - adres IP użytkownika wysyłającego żądanie REMOTE_HOST - adres domenowy użytkownika wysyłającego żądanie REMOTE_USER - nazwa użytkownika wysyłającego żądanie SERVER_PORT - numer portu, do którego przybyło żądanie Aplikacja CGI zapisuje wyniki na stdout (standardowe wyjście) Generowana zawartość powinna być poprzedzona nagłówkiem z informacją o jej typie np. dla HTML: Content-type: text/html

Przykład prostej aplikacji CGI 155 Język Perl 156 #!/bin/sh # Get current time and date DATE=`/bin/date +%D` TIME=`/bin/date +%T` #Send the data to the client echo "Content-type: text/html" echo echo "<HEAD>" echo "Current date: $DATE." echo "Current time: $TIME." echo "</BODY></HTML>" exit 0 Perl (Practical Extraction and Report Language) jest językiem interpretowanym, podobnym do C z domieszkami sed, awk, sh, csh, Pascal, FORTRAN, BASIC-PLUS Wysoce zoptymalizowany dla przetwarzania tekstów, ale też odpowiedni dla danych binarnych Typy danych: skalary ($), tablice indeksowane (listy) (@), tablice asocjacyjne (%) $foo = 3.14159; $foo = red ; @foo = (1, 3, 5); %frogs = ( green => 3, blue => 6, yellow => 9); Operatory języka Perl 157 Instrukcje sterujące języka Perl 158 Potęgowanie: **, **= Operator zakresowy:.. for $i (60..75) {do foo($i); Konkatenacja tekstów:.,.= $x = $y. $z Powtórzenie tekstu: x, x= $bar = - x 72; Porównania tekstów: eq, ne, lt, gt, le, ge if ($x eq foo ) { Operacje na plikach: -e, -z, -O, -T, itd. if (-e $file) { if (expr) block else block if (expr) block elsif (expr) block else block while (expr) block do block while expr for (expr; expr; expr) block foreach $var (list) block Uwagi: Dodatkowo Perl oferuje instrukcje unless i until unless (expression) { jest równoważne if (! expression) { until (expression) jest równoważne while (! expression) block oznacza blok instrukcji w nawiasach klamrowych (nawiasy wymagane nawet gdy jedna instrukcja w bloku!) if ($x == 10) { print "Ten";

Zmienne proste - przykład 159 Tablice w Perlu: przykład 160 print "Using a variable before initializing: $var\n"; #!/usr/bin/perl # Print out today s yearday on stdout $test = $num + 5; print "Adding uninitialized variable num to 5 yields: $test.\n"; $a = 5; print "The value of variable a is: $a\n"; $a = $a + 5; print "Variable a after adding 5 is $a.\n"; $b = "A string value"; $a = $a + $b; print "Adding a string to an integer yields: $a\n"; $number = 7; $b = $b + $number; print "Adding an integer to a string yields: $b\n"; Using a variable before initializing: Adding uninitialized variable num to 5 yields: 5. The value of variable a is: 5 Variable a after adding 5 is 10. Adding a string to an integer yields: 10 Adding an integer to a string yields: 7 Zmienne o zasięgu lokalnym (ograniczonym do bloku) inicjalizowane są przy użyciu słowa kluczowego my, np.: my $y = 20; ($sec, $min, $hour, $day, $mon, $year, @rest) = gmtime(); @months = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); $year += 1900; # years after 1900, months 0..11 if ($year == int($year/400)*400 $year!= int($year/100)*100 && $year == int($year/4)*4) { $months[1] = 29; $yearday = 0; for ($m=0; $m<$mon; $m++) { $yearday += $months[$m]; $yearday += $day; print $yearday. "\n"; Wyrażenia regularne 161 Przykład aplikacji WWW (1) 162 Porównania tekstowe $string =~ /sought_text/; operator "match" Wycinanie tekstów $string =~ m/whatever(sought_text)whatever2/; $soughttext = $1; Zastępowanie tekstów $string =~ tr/originaltext/newtext/; operator "translate" $string =~ s/originaltext/newtext/; operator "substitute" #!/usr/bin/perl use CGI qw/:standard/; print header; open(countread, "counter.dat"); $data = <COUNTREAD>; $data++; close(countread); open(countwrite, ">counter.dat"); print COUNTWRITE $data; close(countwrite); print "<CENTER>"; print "<STRONG>You are visitor number</strong><br>"; for ($count = 0; $count < length($data); $count++ ) { $number = substr( $data, $count, 1 ) ; print "<IMG SRC=\"images/counter/$number.jpg\">"; print "</CENTER>";

Przykład aplikacji WWW Example (2) Dostęp do zmiennych CGI 163 Dostęp do baz danych - przykład 164 use DBI; #!/usr/local_old/bin/perl use CGI qw/:standard/; $par1 = param(par1); $par2 = param(par2); print header; print "Par1 is $par1 and Par2 is $par2\n"; my $dbh = DBI->connect('DBI:mysql:scott'); my $sth = $dbh->prepare( 'SELECT etat, id_prac FROM pracownicy WHERE nazwisko =?'); my @data; $sth->execute( KOWALSKI ); while (@data = $sth->fetchrow_array()) { my $etat = $data[0]; my $id = $data[1]; print "\t$id: $etat $lastname\n"; $sth->finish; $dbh->disconnect; Server Side Includes (SSI) 165 SSI - przykład 166 Dokumenty HTML, zapisane w systemie plików serwera WWW, mogą zawierać proste komendy, które będą interpretowane przez serwer podczas przekazywania dokumentu do użytkownika Komendy SSI zapisywane są w postaci komentarzy HTML, zawierających następujące słowa kluczowe: config (sterowanie przetwarzaniem pliku) include (włączenie zawartości innego dokumentu) echo (wyświetlenie wartości zmiennej środowiskowej SSI) fsize (wyświetlenie rozmiaru podanego pliku) flastmod (wyświetlenie daty ostatniej modyfikacji podanego pliku) exec (wykonanie polecenia systemu operacyjnego lub aplikacji CGI) <h2>ssi Example</h2> Today's date and time is:<b> <!--#echo var="date_local" --> </b><br> Your IP address is:<b> <!--#echo var="remote_addr" --> </b><br>

Czym jest PHP? 168 PHP PHP: Hypertext Preprocessor Język skryptowy ogólnego przeznaczenia opracowany z myślą o aplikacjach WWW najczęściej zagnieżdżany w HTML zagnieżdżone skrypty uruchamiane po stronie serwera Rozwijany na zasadach Open Source Szczególnie popularny w środowisku Linux, ale dostępny również na wielu innych platformach np. Microsoft Windows Składnia PHP przypomina C, pewne elementy przejęte z Perla Architektura PHP 169 Przyczyny popularności PHP 170 PRZEGLADARKA WWW URL HTML SERWER WWW X-Powered-By: PHP/4.2.2 Content-type: text/html <html> <head> <title>php Example</title> </head> <body> Hi, PHP works! </body> </html> DOKUMENT PHP <html> <head> <title>php Example</title> </head> <body> <?php echo "Hi, PHP works!";?> </body> </html> test.php PHP jest bardzo łatwy do opanowania szczególnie dla programistów znających C, C++ lub Java PHP obsługuje ok. 20 najpopularniejszych SZBD ("native support") oraz standard ODBC PHP jest szybki i oszczędza zasoby serwera PHP jest dostępny dla wielu systemów operacyjnych i serwerów WWW PHP jest rozwijany na zasadach Open Source darmowy rozszerzalny (możliwość dodawania własnych modułów) błędy szybko wykrywane i poprawiane nowe funkcje dodawane zgodnie z wymaganiami rynku łatwo o darmowe wsparcie techniczne ze strony "PHP community"

Historia PHP 171 Obszary zastosowań PHP 172 PHP/FI Rasmus Lerdorf, 1995, PHP/FI 2.0 Rasmus Lerdorf, 1997 Personal Home Page/Forms Interpreter (skrypty w Perlu, potem C) stworzony do śledzenia odwiedzin strony domowej PHP 3 Gutmans & Suraski, 1997 interpretacja kodu, ale parser analizujący cały skrypt szybkość działania dla prostych, krótkich skryptów olbrzymia popularność kolejny raz złożoność faktycznych zastosowań przerosła plany twórców PHP 4 Zend Technologies, 2000 zupełnie nowy "engine" (Zend Engine) prawie pełna zgodność z PHP3 najpierw kompilacja skryptu (kod pośredni), później uruchomienie wzrost efektywności dla dużych, złożonych skryptów PHP 5 Zend Technologies, 2004 nowy "engine" (Zend Engine 2) większa wydajność, więcej możliwości nowy model obiektowy Skrypty server-side na potrzeby aplikacji WWW podstawowe zastosowanie PHP (do tego celu stworzony) praca jako moduł serwera WWW lub w trybie CGI Skrypty uruchamiane z linii poleceń Aplikacje klienckie z interfejsem użytkownika prawdopodobnie nie najlepszy język do tego celu wymagane rozszerzenie PHP-GTK Obsługiwane bazy danych 173 Zagnieżdżanie PHP w HTML 174 "Native support": IBM DB2, Informix, MS SQL Server, Oracle, Sybase MySQL, PostgreSQL Adabas D, dbase, Empres, FilePro, Hyperwave, Ingres, InterBase, FrontBase, msql, Direct MS-SQL, Ovrimos, Solid, Velocis, Unix dbm interfejs ODBC abstrakcyjne rozszerzenie dbx pozwala na "przezroczyste" używanie dowolnej bazy obsługiwanej przez to rozszerzenie w tej chwili obsługuje: FrontBase, MS SQL Server, MySQL, ODBC, PostgreSQL, Sybase-CT, Oracle, SQLite Zawsze dostępne 1) <?php echo("zawsze działa\n");?> 2) <script language="php"> echo ("Dobre dla niektórych edytorów HTML.\n"); </script> Wymagające uaktywnienia w php.ini 3) <? echo("short_open_tag = on. Kolizja z XML.\n");?> <?= wyrażenie?> 4) <% echo("asp_tags = on.\n"); %> <%= $zmienna %>

Przeplatanie PHP i HTML 175 Oddzielanie instrukcji, komentarze 176 <?php?> <?php?> <?php?> if ($wyrażenie) { <b>wyrażenie jest prawdziwe.</b> else { <b> Wyrażenie jest fałszywe.</b> Tekst pomiędzy?> i <?php jest traktowany jak argument echo <?php echo "Jedna instrukcja";?> <?php echo "Pierwsza instrukcja"; echo "Druga instrukcja"?> <?php echo "Instrukcja"; // Jednoliniowy echo "Instrukcja"; # Jednoliniowy /* Komentarz wieloliniowy */?> Typy danych 177 Typ logiczny (boolean( boolean) 178 Typy skalarne (4) boolean, integer, float, string Typy złożone (2) array, object Typy specjalne (2) resource, NULL! Typ zmiennych ustala PHP na podstawie kontekstu! PHP dokonuje automatycznych konwersji typów gdy w danym miejscu spodziewana jest wartość innego typu w przypadku operacji (np. "+") na operandach różnych typów! Można jawnie ustawić typ zmiennej funkcją settype() lub przez rzutowanie (jak w C)! Do sprawdzania typu zmiennej służy rodzina funkcji is_nazwatypu() Prawda lub fałsz (literały TRUE i FALSE wielkość znaków dowolna) Konwersje wartości innych typów do typu boolean FALSE (0, 0.0, pusty łańcuch znaków, łańcuch "0", tablice i obiekty bez elementów, NULL, niezainicjalizowane zmienne) TRUE (pozostałe wartości) if ($x!= 0) {... if ($x) {...

Typy liczbowe 179 Łańcuchy znaków (1) 180 Liczby całkowite ze znakiem (integer) np. 123, -123, 0654, 0x7FFF rozmiar zależy od platformy (typowo 32-bity) Liczby zmiennoprzecinkowe (float) np. 3.14, 4.8e5, 125E-3 rozmiar zależy od platformy (typowo 64-bitowy IEEE) Łańcuchy bajtowych znaków (brak wewnętrznego wsparcia UNICODE) Mogą być "dowolnie" długie - brak ograniczeń w języku 3 możliwe notacje w apostrofach np. 'Tekst', 'O\'Brien' bez parsowania zmiennych i sekwencji specjalnych (poza \\ i \') w cudzysłowach np. "Tekst", "Hej!\n" z parsowaniem zmiennych i sekwencjami specjalnymi (np. \n \$...) heredoc (jak w Perlu) z parsowaniem zmiennych i sekwencjami specjalnymi (np. \n \$...) $wiek = 30; echo "Mam $wiek lat.\n"; // wyświetli: Mam 30 lat. echo 'Mam $wiek lat.\n'; // wyświetli: Mam $wiek lat.\n Łańcuchy znaków (2) 181 Funkcje działające na łańcuchach znaków 182 Parsowanie zmiennych składnia prosta składnia złożona Konkatenacja łańcuchów znaków (operator ".") Indeksowanie łańcucha Wyrażenia regularne styl Perl styl POSIX Extended echo "Kwadrat o boku $a."; echo "Kwadrat o boku ${acm."; echo "Wartość = $wektor[0]."; echo "Wartość = {$macierz[0][1]."; echo 'Marek'. " ". 'Wojciechowski'; $napis = "Ola\n"; echo $napis{0; // Wyświetli: O $napis{2 = "o"; echo $napis; // Wyświetli: Olo Bogaty zestaw funkcji działających na łańcuchach PHP oferuje bogaty zestaw funkcji łańcuchowych, np. explode() dzieli łańcuch tworząc tablicę implode() łączy elementy tablicy w łańcuch echo()/print() wysyła łańcuch na wyjście printf(), sscanf(), sprintf(),..., strlen(), strcmp() (dostępne są odpowiedniki niektórych funkcji łańcuchowych z C) strstr() szuka łańcucha w innym łańcuchu str_replace() podmienia podłańcuch w łańcuchu strtolower()/ strtoupper() md5() haszowa sygnatura łańcucha (algorytm md5)

Tablice 183 Tworzenie tablic 184 Tablica w PHP jest uporządkowaną mapą mapa jest typem, przyporządkowującym wartości do kluczy Kluczami w tablicach PHP mogą być: nieujemne liczby całkowite łańcuchy znaków Tablice w PHP mogą być używane jako "typowe tablice" tablice asocjacyjne listy, kolejki, stosy Wartościami w tablicy mogą być inne tablice tablice wielowymiarowe drzewa $tab = array ('zero', 'jeden', 'dwa'); $tab = array (0 => 'zero', 1 => 'jeden', 2 => 'dwa'); $tab[0] = 'zero'; $tab[1] = 'jeden'; $tab[2] = 'dwa'; $tab[] = 'zero'; $tab[] = 'jeden'; $tab[] = 'dwa'; $stolice = array ('Czechy' => 'Praga', 'Łotwa' => 'Ryga'); $stolice['czechy'] = 'Praga'; $stolice['łotwa'] = 'Ryga'; Odwołanie do elementu: $tab[wyrażenie_klucz] Dodanie nowej wartości do tablicy bez podania klucza przypisuje jej kolejny klucz całkowitoliczbowy (licząc od 0) Możliwe jest usunięcie danego elementu z tablicy (unset()) Nawigacja po elementach tablicy (1/2) 185 Nawigacja po elementach tablicy (2/2) 186 for ($i = 0; $i < 3; $i++) { echo "$i => $tab[$i]\n"; reset($stolice); while (list($klucz, $wart) = each($stolice)) { echo "$klucz => $wart\n"; foreach ($stolice as $stolica) { echo "$stolica\n"; foreach ($stolice as $kraj => $stolica) { echo "$kraj => $stolica\n"; list() pozwala na przypisanie wartości kilku zmiennym w jednej operacji po prawej stronie przypisania musi być tablica z indeksem numerycznym od 0 na liście można pomijać elementy zostawiając przecinki each() zwraca kolejny element tablicy (klucz i wartość) w postaci 4-elementowej tablicy: array(0 => klucz, 1 => wartość, "key" => klucz, "value" => wartość)

Funkcje działające na tablicach 187 Typy specjalne 188 PHP oferuje bogaty zestaw funkcji dla obsługi tablic Niektóre użyteczne funkcje działające na tablicach: count() zwraca liczbę elementów sort()/rsort() sortują tablice (rosnąco/malejąco) asort()/arsort() sortują tablice asocjacyjne array_walk() uruchamia daną funkcję dla elementów in_array() sprawdza czy dana wartość jest w tablicy array_search() zwraca klucz dla danej wartości array_key_exists() sprawdza czy dany klucz istnieje array_intersect() wyznacza część wspólną tablic array_push(), array_pop() na koniec/z końca array_unshift(), array_shift() na pocz./z pocz. Identyfikator zasobów (resource) typ ten służy do przechowywania odnośników do zewnętrznych źródeł zasobów (np. połączenia z bazą danych) wartości typu tworzone i wykorzystywane przez specjalne funkcje NULL wartość NULL oznacza brak przechowywanej wartości wielkość liter w literale NULL nieistotna Zmienne 189 Zasięg zmiennych 190 Nazwy zmiennych w PHP poprzedza się znakiem $ Wielkość liter w nazwach zmiennych ma znaczenie Przykłady nazw zmiennych: $zm, $ZM, $j23, $_xxx Zmiennych nie deklaruje się przed użyciem nie ma konieczności ustalania typu zmiennej typ zmiennej zmienia się w zależności od jej wartości PHP obsługuje zmienne referencyjne np. $x = &$y Użyteczne funkcje: isset() sprawdza czy zmienna jest ustawiona unset() usuwa zmienną empty() sprawdza czy zmienna jest pusta Zmienne definiowane w funkcjach użytkownika mają charakter lokalny (mogą być statyczne) Zmienne globalne nie są bezpośrednio widoczne w funkcjach (!) dostęp przez tablicę asocjacyjną $GLOBALS dostęp przez nazwę po "zadeklarowaniu globalności" $g = 5; // zmienna globalna function Fun() { global $g; // deklaracja globalności bez niej $GLOBALS["g"] static $s = 0; // zmienna statyczna $l =... // zmienna lokalna...

Zmienne predefiniowane 191 Przetwarzanie danych z formularzy HTML (1/2) 192 PHP udostępnia zestaw predefiniowanych tablic, zawierających zmienne pochodzące ze środowiska wywołania skryptu (serwer, formularz HTML,...) Tablice te są "superglobalne" automatycznie dostępne w każdym zasięgu Superglobale PHP (od wersji 4.1): $GLOBALS $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST, $_SESSION! Istnieją jeszcze predefiniowane tablice: $HTTP_SERVER_VARS, $HTTP_GET_VARS,... przestarzałe, nie-superglobalne Dane z formularzy HTML są dostępne w PHP poprzez: tablice superglobalne $_GET lub $_POST zmienne globalne (gdy register_globals = on) <H1>Podaj 2 liczby:</h1> <FORM ACTION='mnoz.php METHOD='get'> Liczba 1: <INPUT TYPE= text NAME= p1 ><BR> Liczba 2: <INPUT TYPE= text NAME= p2 ><BR> <INPUT TYPE= submit VALUE= Wynik > </FORM></BODY></HTML> mnoz.htm mnoz.php... <?php echo $_GET['p1'] * $_GET['p2']?> <BR><?php echo $p1 * $p2?>... register_globals = on Przetwarzanie danych z formularzy HTML (2/2) 193 Stałe 194 Dane z kilku pól formularza można przekazać jako tablicę... <input name="tab[]"> <input name="tab[]"> <input name="tab[]">... *.html *.php <?php print_r($_get['tab'])?> <BR> <?php print_r($tab)?> <BR> <?php echo $_GET['tab'][1]?> <BR> <?php echo $tab[1]?> <BR> </BODY></HTML> Stała jest nazwą dla prostej wartości Przykłady nazw stałych: STALA, _MAX, x wielkość liter istotna (zwyczajowo duże litery) Funkcje operujące na stałych: define() definiuje stałą defined() sprawdza czy stała jest zdefiniowana constant() zwraca wartość stałej o nazwie przekazanej dynamicznie Niezależnie od miejsca definiowania stałej, po wykonaniu define(), stała jest wszędzie widoczna Zdefiniowanej stałej nie można zmienić ani usunąć Użyteczne również w polach wielokrotnego wyboru np. <select name="opcje[]" multiple>... </select> define("stala", 3.14); echo STALA; // 3.14 if (defined("stala")) echo constant("st". "ALA"); // 3.14

priorytet Powiązanie prawe bez bez prawe prawe bez Operatory Operator, or xor and print = += -= *= /=.= %= &= = ^= ~= <<= >>=?: && ^ & ==!= ===!== < <= > >= << >> + -. * / %! ~ ++ -- (int) (double) (string) (array) (object) @ [ new arytmetyczne inkrementacja / dekrementacja łańcuchowe bitowe przypisania porównania logiczne kontroli błędów konwersji typów 195 if (wyrażenie) instrukcja if (wyrażenie) instrukcja else instrukcja Instrukcje sterujące if (wyrażenie) instrukcja elsif (wyrażenie) instrukcja else instrukcja while (wyrażenie) instrukcja do instrukcja while (wyrażenie) for (wyr1; wyr2; wyr3) instrukcja foreach ($tab as $zm) instrukcja instrukcja: pojedyncza lub grupa instrukcji w { 196 switch (wyr) { case W1: instrukcje... case WN: instrukcje [default: instrukcje] break break N foreach ($tab as $zm1 => $zm2) instrukcja continue continue N Alternatywna składnia instrukcji sterujących 197 Funkcje 198 Alternatywna składnia dostępna dla if/else/elsif, while, for, foreach, switch Brak {, zastąpione jawnym kończeniem instrukcji Może być użyteczna przy przeplataniu PHP i HTML if (wyrażenie) : instrukcje elsif (wyrażenie) : instrukcje else : instrukcje endif; while (wyrażenie) : instrukcje endwhile; for (wyr1; wyr2; wyr3) : instrukcje endfor; foreach ($tab as $zm) : instrukcje endforeach; switch (wyr) : case W1: instrukcje... case WN: instrukcje [default: instrukcje] endswitch; Funkcje definiowane przez użytkownika w PHP: definicja rozpoczyna się słowem function () wymagane nawet gdy brak argumentów ciało funkcji w { instrukcja return kończy działanie funkcji i opcjonalnie zwraca wartość wielkość liter w nazwach funkcji nieistotna (!) nie można przeciążać ani przedefiniować funkcji wywołanie funkcji może poprzedzać jej definicję (PHP4) przy wywołaniu funkcji, w miejscu nazwy może pojawić się zmienna function e(){ return 2.71; echo e(); // 2.71 function e(){ return 2.71; $liczba = 'e'; echo $liczba(); // 2.71

Argumenty funkcji 199 PHP + MySQL: : zestaw funkcji 200 Można podać domyślne wartości argumentów (ostatnich!) Obsługiwane są listy argumentów o zmiennej długości: func_num_args(),func_get_arg(),func_get_args() Argumenty można przekazywać przez referencję (jak w C++) gdy zmiany dokonane na nich w funkcji mają być widoczne na zewnątrz nie ma sensu używać referencji dla efektywności (uniknięcie kopiowania), gdyż PHP4 obsługuje kopie jako referencje do momentu ich zmiany (!) function napisz($co = 'Nic') { echo $co; napisz('coś'); // Coś napisz(); // Nic function dodaj5($x,&$y) { $x+=5, $y+=5; $a = $b = 0; dodaj5($a, $b); echo $a, $b; // 05 Przykłady funkcji PHP do komunikacji z bazą MySQL: mysql_connect otwiera połączenie z serwerem MySQL mysql_select_db wybiera bazę MySQL mysql_query wysyła polecenie SQL do serwera MySQL mysql_num_rows zwraca liczbę wierszy odczytanych przez SELECT mysql_affected_rows - zwraca liczbę wierszy przetworzonych przez INSERT, UPDATE, DELETE mysql_fetch_array pobiera kolejny wiersz wyniku i umieszcza go w tablicy (numerycznej, asocjacyjnej lub w obu) mysql_free_result zwalnia pamięć zajmowaną przez wynik zapytania mysql_close zamyka połączenie z serwerem MySQL mysql_errno / mysql_error zwracają informacje o błędzie (numer/komunikat) z ostatniej operacji MySQL PHP + MySQL: : przykład 201 <?php $link = mysql_connect("localhost") or die("connect failed"); mysql_select_db("kadry"); $query = 'SELECT nazwisko, placa_pod FROM pracownicy'; Active Server Pages $result = mysql_query($query); while ($row = mysql_fetch_array($result)) { echo $row[0]." zarabia ".$row[1]."<br>\n"; mysql_free_result($result); mysql_close($link);?>

Active Server Pages (ASP) 203 Przykład aplikacji ASP (1) 204 Technologia Microsoftu, umożliwiająca tworzenie aplikacji internetowych pracujących po stronie serwera WWW Aplikacje ASP są zapisywane w postaci plików, nazywanych dokumentami ASP Dokument ASP jest plikiem HTML, zawierającym zagnieżdżony kod w języku VBScript (lub JScript) VBScript jest podzbiorem języka Microsoft Visual Basic Dokumenty ASP są przetwarzane (interpretowane) w odpowiedzi na żądanie użytkownika, przez serwer WWW (np. Microsoft Internet Information Server) Aplikacje ASP mogą współpracować z systemami baz danych przy użyciu obiektów ADO (ActiveX Data Objects) Technologia ASP stanowiła bazę dla ASP.NET Podstawowy element platformy.net Aplikacje kompilowane, 20 języków (np. VB, C++, C#, J#) <% @LANGUAGE=VBScript %> wybór języka skryptowego (opcjonalnyl) <CENTER> Today is <B><% =now() %></B> and all is well.<br><h2> wyświetla wynik funkcji now() <% IF hour(now())>12 THEN %> Good Evening <% ELSE %> wyświetla, jeżeli warunek był spełniony Good Morning! <% END IF %> wyświetla, jeżeli warunek nie był spełniony </H2></CENTER> </BODY></HTML> Przykład aplikacji ASP (2) 205 Przekazywanie parametrów wywołania 206 <HEAD> <TITLE>ASP Example</TITLE> <% when=now() tommorow=dateadd("d",1,when) twoweekslater=dateadd("ww",2,when) %> Tommorow is <B> <% =tommorow %> </B><BR> Two weeks later is <B> <HEAD> <TITLE>ASP demo</title> <% term1 = Request("par1") term2 = Request("par2") result = term1 * term2 %> <H1> Multiplication result: <% =result %> </H1> </BODY> </HTML> <% =twoweekslater %> </B><BR> </BODY></HTML>

Obiekt Response 207 <HEAD> <TITLE>ASP demo</title> <% term1 = Request("par1") term2 = Request("par2") result = term1 * term2 call Response.Write("<H1>Result: " & result & "</H1>") %> </BODY> </HTML> konkatenacja tekstów wyświetl wewnątrz wynikowego dokumentu HTML