JAO php lab3

background image

18.11.2009 14:05:36

Języki Automaty Obliczenia

Programowanie sterowane zdarzeniami

1. Cel ćwiczenia

Celem ćwiczenia jest utworzenie graficznego interfejsu użytkownika (GUI) do programu, który liczy
iloczyn kartezjański N zbiorów. Program został opracowany w trakcie poprzednich zajęć.

2. Wstęp

GUI do programu opracowane zostanie w języku HTML i będzie uruchomione na serwerze WWW.

2.1. Formularze HTML

Należy przypomnieć sobie z lekcji w gimnazjum tworzenie formularzy w języku HTML, które
zawierają przyciski i pola tekstowe.

2.2. Błyskawiczny kurs CGI

2.2.1. Metody GET i POST
Kiedy przeglądarka wysyła do serwera WWW żądanie dostarczenia zasobu:

http://materialy.prz-rzeszow.pl/index.php?doc=inz_opr.pdf&user=student&passwd=haslo

serwer WWW uruchamia skrypt o nazwie

index.php

i przekazuje do skryptu parametry:

1.

doc = inz_opr.pdf

2.

user = student

3.

passwd = haslo

Skrypt może odczytać wartości tych parametrów i na ich podstawie podjąć pewne działania.
Mówimy, że parametry zostały przekazane metodą GET. Inny sposób przekazywania parametrów to
metoda POST:

<form action='index.php' method='

post

'>

<input type='text' name='doc' value='inz_opr.pdf'/>
<input type='text' name='user' value='student'/>
<input type='hidden' name='passwd' value='haslo'/>
<input type='submit' name='send' value='Wyślij'/>

</form>

Metoda POST różni się w pewien sposób od metody GET, ale z punktu widzenia skryptu jest to
różnica mało istotna, ponieważ serwer WWW także utworzy odpowiednie parametry [1].
W formularzu powyżej, kliknięcie przycisku Wyślij spowoduje uruchomienie na serwerze WWW
skryptu

index.php

i przekazanie do niego parametrów takich, jak opisano wyżej (dodatkowo

ustawiany jest parametr

send='Wyślij'

).

2.2.2. Przesłanie danych z formularza do serwera
Żeby przeglądarka przesłała dane z formularza po kliknięciu w przycisk, przycisk musi być
elementem

input

typu

submit

:

1

background image

<form action='index.php' method='

post

'>

<input type='text' name='doc' value='inz_opr.pdf'/>
<input type='text' name='user' value='student'/>
<input type='hidden' name='passwd' value='haslo'/>
<input type='submit' name='send' value='Wyślij'/>

</form>

Przycisk powstanie także jeżeli użyjemy typu

button

, lecz nie będzie on wtedy automatycznie

przesyłał danych z formularza.

2.2.3. Przesłanie pliku do serwera
Jeżeli chcemy, żeby przeglądarka przesłała do serwera plik z komputera lokalnego, formularz musi
mieć określony sposób kodowania i posiadać pole wyboru pliku:

<form action='index.php' method='

post

' enctype="multipart/form-data">

<input type='file' name='doc' value=''/>
<input type='text' name='user' value='student'/>
<input type='hidden' name='passwd' value='haslo'/>
<input type='submit' name='send' value='Wyślij'/>

</form>

W linii 1 zaznaczono, że formularz będzie przesyłał pliki, tekst wykraczający poza kodowanie ASCII,
dane binarne. Linia 2 utworzy pole wyboru pliku.

2.2.4. Odczyt parametrów przez skrypt PHP
Skrypt PHP uzyskuje dostęp do zmiennych z formularza za pomocą zmiennej

_REQUEST

. W celu

sprawdzenia, czy wciśnięto przycisk Wyślij na formularzu z punktu 2.2.3., użyjemy kodu:

if(isset($_REQUEST['send'])) { .... }

W przykładzie powyżej sprawdzamy, czy ustawiony jest element o indeksie

send

w tablicy

_REQUEST

. Jeżeli jest, i prawdziwy jest warunek

$_REQUEST['send'] == 'Wyślij'

to znaczy, że wciśnięto przycisk Wyślij. Używamy indeksu

'send'

tablicy

_REQUEST

, dlatego że

atrybut

name

przycisku Wyślij w punkcie 2.2.3. ma wartość

send

.

2.2.5. Odczyt pliku przesłanego na serwer
W przykładzie w punkcie 2.2.3. pokazano formularz, którego pole o nazwie

doc

służy do przesłania

pliku na serwer. W języku PHP w celu uzyskania dostępu do tego pliku, użyjemy kodu:

$nazwaPliku = $_FILES["doc"]["tmp_name"];

Indeks

doc

tablicy

_FILES

zawiera informacje o pliku przesłanym przez element

input

typu

file

o nazwie

doc

:

<input type='file' name='doc' value=''/>

Zmienna

$nazwaPliku

zawiera pełną ścieżkę do pliku przesłanego na serwer i może być użyta

bezpośrednio w funkcji

fopen

lub podobnej.

2.2.6. Zmienne globalne aplikacji WWW
Kiedy kończy się wykonywać skrypt określony w atrybucie action formularza, usuwane są wszystkie
zmienne utworzone przez ten skrypt. Jeżeli chcemy, żeby aplikacja zapamiętała wartość pewnej
zmiennej pomiędzy kolejnymi wywołaniami skryptu, należy zastosować zmienne sesyjne:

session_start(); // rozpoczęcie sesji serwera WWW
$zbiory = $_SESSION['zbiory']; // odczyt zmiennej sesyjnej
$wynik = oblicz($zbiory);
$_SESSION['wynik'] = $wynik; // zapisanie zmiennej sesyjnej

Pierwsza linia włącza mechanizm sesji serwera. Kolejne linie pokazują, w jaki sposób zapamiętać
zmienną w sesji i odczytać ją. Tablica

$_SESSION

zawiera zmienne, których wartości przechowywane

2

background image

są pomiędzy kolejnymi wywołaniami skryptów.

2.3. PHP – zastępowanie tekstu w pliku

W trakcie ćwiczenia wykorzystane zostaną funkcje języka PHP, przy pomocy których można
zastępować zawartość pliku.
Załóżmy, że w pliku

wynik.xhtml

mamy pole tekstowe, w którym chcemy prezentować wynik

obliczeń:

<textarea id="wynik" name="wynik" rows="20" cols="40" readonly="readonly">

:wynik:

</textarea>

W miejscu znacznika

:wynik:

ma się pojawić wynik obliczeń. W programie w języku PHP możemy

podstawić za znacznik

:wynik:

wartość pewnej zmiennej:

$wynikObliczen = print_r($wynik, TRUE); // przygotowuję zmienną z wynikiem
$html = file_get_contents("wynik.xhtml"); // pobieram plik z szablonem
$search = array(":wynik:"); // co ma być wyszukiwane w szablonie
$replace = array($wynikObliczeń); // czym zastąpić $search
$html = str_replace($search, $replace, $html); // zastępuję elementy $search
echo $html; // wyświetlam

Funkcja

print_r

użyta w sposób pokazany wyżej nie wysyła nic do bufora wyjściowego, tylko

zwraca reprezentację zmiennej czytelną dla człowieka.
Jeżeli chcemy wykonać kilka zastąpień tekstu jednocześnie, to należy rozbudować tablice:

$search = array(":wynik:", ":daneWejsciowe:", ":komunikat:");
$replace = array($wynikObliczeń, $daneWejsciowe, $komunikat);

3

background image

3. Konfiguracja serwera Apache

3.1. Pakiet xampplite w systemie Windows

W laboratorium w sali D104 nie wykonujemy punktu 1, ponieważ uprawnienia są ustawione
prawidłowo.

1. Sprawdź, czy użytkownik, na koncie którego pracujesz w systemie, ma uprawnienia do

modyfikowania zawartości następujących folderów:

c:\xampplite\temp

c:\xampplite\apache\logs

c:\xampplite\htdocs

2. Uruchom konsolę i wpisz następujące polecenia:

3. W panelu sterowania

xampp

kliknij przycisk

start

przy module Apache.

4

background image

4. Jeżeli przy module Apache nie pojawiła się zielona etykieta

Running

, sprawdź punkt 1 oraz

komunikaty serwera:

3.2. Pakiet httpd w systemach Unix

W laboratorium w sali D10a nie trzeba nic robić, wszystko działa.

1. Sprawdź, czy użytkownik (lub grupa użytkowników) na koncie którego pracujesz w systemie,

ma uprawnienia do modyfikowania zawartości katalogu z zasobami serwera WWW:

Na rysunku jest to katalog

html

, grupa

users

ma uprawnienia do zapisu, a wszyscy do

odczytu i przeglądania.

2. Upewnij się, że serwer WWW pracuje:

service httpd restart

3. W przypadku wystąpienia błędów, sprawdź log serwera:

cat /var/log/httpd/error_log

4. Jeżeli twój system to nie Red Hat Linux, sprawdź w dokumentacji systemu jak nazywa się

pakiet serwera WWW, gdzie jest katalog z jego zasobami, jak zarządzać serwerem i gdzie są
pliki jego logów.

5

background image

4. Konfiguracja projektu Netbeans

Aplikacja będzie uruchamiana przez serwer WWW, w związku z czym trzeba lekko zmodyfikować
właściwości projektu.

4.1. Konfiguracja projektu w systemie Windows

1. Wybierz właściwości projektu, w kategorii

Sources

zaznacz kopiowanie plików do katalogu

zasobów serwera WWW. Katalog zasobów to

c:\xampplite\htdocs

Po nazwie katalogu podaj nazwę folderu z aplikacją.

2. W kategorii

Run Configuration

wybierz

uruchomienie

projektu

na lokalnym serwerze

WWW oraz wpisz URL aplikacji. Zwróć uwagę, że

numer portu serwera

to

8080

a

katalog

aplikacji

jest taki, jak w ustawiono punkcie 1.

6

background image

4.2. Konfiguracja projektu w systemie Linux

Na laboratorium w sali D104 debugger działa tylko w jednym procesie Netbeans.

1. Wybierz właściwości projektu, w kategorii

Sources

zaznacz kopiowanie plików do katalogu

zasobów serwera WWW. Katalog zasobów to

/var/www/html

Po nazwie katalogu podaj nazwę konta użytkownika.

2. W kategorii

Run Configuration

wybierz

uruchomienie

projektu

na lokalnym serwerze

WWW oraz wpisz URL aplikacji. Zwróć uwagę, że

katalog aplikacji

jest taki, jak

w ustawiono punkcie 1.

7

background image

5. Przebieg ćwiczenia

5.1. Odtworzenie projekt z poprzednich zajęć

Rozpakuj archiwum z projektem Netbeans z poprzednich zajęć i otwórz go w środowisku Netbeans.
Upewnij się, czy w środowisku Netbeans jest otwarty wyłącznie twój projekt. Jeżeli otwartych jest
kilka projektów, zamknij wszystkie i wykonaj jeszcze raz punkt 5.1.

5.2. Dodanie okienka GUI

Do plików źródłowych projektu dodaj nowy plik
XHTML o nazwie

gui.xhtml

.

Jeżeli pozycji

XHTML File

nie ma na liście, wybierz

Other

i poszukaj w okienku, które się pojawi.

5.3. Kontrola poprawności ćwiczenia

Sprawdź, czy w twoim projekcie są następujące pliki:

1. index.php
2. IliczynKartezjański.php
3. OdczytDanych.php
4. dane.txt
5. ProgramJAO.php
6. gui.xhtml

Jeżeli brakuje któregokolwiek z tych plików, lub jest obecny
logicznie, jednak jego nazwa jest inna, skoryguj projekt.

5.4. Utworzenie GUI

W pliku

gui.xhtml

wpisz takie znaczniki języka HTML, które

utworzą stronę pokazaną na obrazku z prawej strony. Pamiętaj
o następujących rzeczach:

w nagłówku musi być element

title

zawierający tytuł

strony,

elementy

input

formularz muszą być zawarte wewnątrz

paragrafów (element

p

),

każdy element

input

musi mieć określony atrybut

name

,

przycisk to element

input

, którego atrybut

type

ma

wartość

submit

,

duże okienko na wynik to element

textarea

o kilkunastu wierszach i kolumnach.

8

background image

5.5. Wynik obliczeń

W pliku

gui.xhtml

do zawartości znacznika

textarea

wstaw tekst

:wynik:

(patrz 2.3.). Tekst ten

będzie zastąpiony wynikiem obliczeń.

5.6. Kontrola poprawności ćwiczenia

W oknie projektu kliknij prawym przyciskiem myszy w plik

gui.xhtml

i z menu kontekstowego

wybierz polecenie Validate XHTML.
Jeżeli walidator wyświetlił jakiekolwiek błędy lub ostrzeżenia, skoryguj plik.

5.7. Obsługa akcji użytkownika

Otwórz plik

index.php

i skasuj zawartość pomiędzy znacznikami

<?php

a

?>

.

Pisząc kod wstawiaj komentarze informujące o krokach algorytmu, np.:

session_start(); // punkt 1

Napisz program wg algorytmu:

1. Rozpocznij sesję serwera WWW (patrz 2.2.6.).
2. Jeżeli wciśnięto przycisk Wczytaj (patrz 2.2.4.), to:

2.1. Zapisz do zmiennej

nazwaPliku

nazwę pliku z danymi (patrz 2.2.5.).

2.2. Utwórz nowy obiekt klasy

OdczytDanych

.

2.3. Używając obiektu utworzonego w kroku 2.2. algorytmu, odczytaj zawartość pliku

i zapisz ją do zmiennej sesyjnej (patrz 2.2.6.)

3. Jeżeli wciśnięto przycisk Oblicz (patrz 2.2.4.), to:

3.1. Odczytaj z sesji zmienną zapisaną w kroku 2.3. algorytmu (patrz 2.2.6.) - są to zbiory

odczytane z pliku przesłanego z przeglądarki.

3.2. Utwórz nowy obiekt klasy

IloczynKartezjański

.

3.3. Używając obiektu utworzonego w kroku 3.2. algorytmu, oblicz iloczyn kartezjański

zbiorów odczytanych z sesji w kroku 3.1..

3.4. Zapisz obliczony iloczyn kartezjański do zmiennej sesyjnej (patrz 2.2.6.)

4. Jeżeli wciśnięto przycisk Wyświetl (patrz 2.2.4.), to:

4.1. Odczytaj z sesji zmienną zapisaną w kroku 3.4. algorytmu (patrz 2.2.6.) - jest to iloczyn

kartezjański zbiorów z pliku przesłanego z przeglądarki.

4.2. Przygotuj prezentację wyniku, używając funkcji

print_r

(patrz 2.3.).

5. Wyświetl plik

gui.xhtml

zamieniając znacznik

:wynik:

zawartością zmiennej

przygotowanej w kroku 4.2. algorytmu (patrz 2.3.).

5.8. Informacja o stanie aplikacji

Wykonanie tego etapu ćwiczenia jest opcjonalne.
Po prawidłowym wykonaniu punktu mamy działający program, lecz po wciśnięciu przycisku Wczytaj
użytkownik nie jest informowany, że dane zostały wczytane. Podobnie, po wciśnięciu przycisku
Oblicz, nie wiemy, czy obliczenia są wykonane.

9

background image

Uzupełnij plik

gui.xhtml

dodając znaczniki informujące o stanie aplikacji:

1. Za elementem

input

tworzącym przycisk Wczytaj umieść tekst

:daneWczytane:

.

2. Za elementem

input

tworzącym przycisk Oblicz umieść tekst

:obliczeniaWykonane:

.

3. Uzupełnij tablice

search

i

replace

z kroku 5. algorytmu z punktu 5.7., tak żeby teksty

:daneWczytane:

i

:obliczeniaWykonane:

były zastępowane wartościami z odpowiednich

zmiennych, np.

:daneWczytane:

będzie zastępowane wartością zmiennej

$daneWczytane

.

4. Do bloków kodu obsługujących kliknięcia w przyciski Wczytaj i Oblicz dopisz kod

ustawiający wartości zmiennych użytych w kroku 3., np.

$daneWczytane = "dane

wczytane";

5. Za instrukcją rozpoczynającą sesję serwera WWW dopisz instrukcje, które zapisują do

zmiennych używanych w kroku 3. puste łańcuchy tekstowe.

5.9. Kontrola poprawności wykonywania ćwiczenia

Sprawdź, czy:

1. Program napisany przez ciebie wykonuje się bez błędów i realizuje cel ćwiczenia.
2. Program składa się z sześciu plików:

dane.txt

,

index.php

,

ProgramJAO.php

,

IloczynKartezjański.php

i

OdczytDanych.php

,

gui.xhtml

.

3. Plik

gui.xhtml

jest poprawny składniowo.

4. Kod w pliku

index.php

jest zgodny z algorytmem z punktu 5.7.

5. Linie kodu z pliku

index.php

zawierają w komentarzach odnośniki do punktów algorytmu.

5.10.

Koniec ćwiczenia

1. W środowisku Netbeans ustal położenie katalogu z projektem (informacja o tym jest we

właściwościach projektu).

2. Zamknij projekt w środowisku Netbeans.
3. Zarchiwizuj katalog z projektem i prześlij go na adres e-mail podany przez osobę prowadzącą

zajęcia.

6. Sprawozdanie

Na stronie internetowej z materiałami dydaktycznymi znajduje się szablon sprawozdania
z ćwiczenia 3. Należy go zastosować do wykonania sprawozdania.

7. Pytania na wejściówkę

1. Czy do wykonania tego ćwiczenia potrzebny jest projekt Netbeans z ćwiczenia 2?
2. Jaki jest obecnie obowiązujący standard dokumentów HTML?
3. Jaki znacznik HTML tworzy formularz?
4. Jaki znacznik HTML tworzy przycisk służący do wysyłania danych formularza?
5. Jak utworzyć pole formularza HTML służące do wysyłania plików?
6. Jak w kodzie PHP sprawdzić, czy wciśnięto przycisk na formularzu HTML?

10

background image

7. W jaki sposób w języku PHP wyświetlić zawartość pliku przesłanego przez przeglądarkę?

8. Literatura

1. Rafe Colburn „CGI”. Helion 1998.

11


Document Outline


Wyszukiwarka

Podobne podstrony:
JAO php lab1
JAO php lab2
JAO php lab5
lab3
lab3 kalorymetria
PHP podst progr suplement wyklad grudzien 2011
cw php
Instrukcja Lab3
lab3 6
Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem, PHP Skrypty
Jak przerwać wykonywanie pętli (for, PHP Skrypty
Jak stworzyć prostą wyszukiwarkę dla własnych stron WWW, PHP Skrypty
Jak stworzyć zaawansowany test wyboru lub quiz, PHP Skrypty
Jak wygenerować bezpieczne, PHP Skrypty
lab3
sprawko z lab3 z auto by pawelekm
Lab3 zadanie 2 schemat organizacyjny
JAO sprawozdanie 1

więcej podobnych podstron