Organizacja kodu PHP i interfejs użytkownika
|
|
- Grzegorz Smoliński
- 9 lat temu
- Przeglądów:
Transkrypt
1 Organizacja kodu PHP i interfejs użytkownika 1. Pobieranie danych od użytkowników 2. Funkcje 3. Include i require 4. Argumenty funkcji 5. Zasięg zmiennych 6. Operacje na plikach 7. Praktyczny przykład elektroniczne głosowanie 1
2 1. Pobieranie danych od użytkowników Programy PHP są ściśle związane z kodem HTML, nic więc dziwnego, że do pobierania danych od użytkowników stosujemy formularze HTML. Aby użyć skryptu PHP do obsługi formularza, należy najpierw odpowiednio ten formularz przygotować. W znaczniku FORM w parametrze ACTION należy podać adres dokumentu PHP, mającego obsłużyć ten formularz. Parametr METHOD może mieć wartość POST lub GET obie metody są obsługiwane przez PHP. Jednak należy pamiętać, że formularze wysyłane przez GET mają dość ograniczoną długość. Do ich zalet należy natomiast to, że użytkownik może zrobić sobie zakładkę do wyników formularza, co nie jest możliwe w przypadku formularzy POST. Przypomnijmy sobie podstawowe informacje na temat metod GET i POST. Obie należą do protokołu HTTP. Jest to protokół komunikacji typu klient serwer, obsługujący wymianę informacji w sieci WWW. Przeglądarki internetowe, takie jak Netscape Navigator czy Internet Explorer, są najbardziej typowymi przykładami klientów HTTP. Z kolei do najpopularniejszych serwerów HTTP można zaliczyć używany w tym kursie serwer Apache i serwer IIS Microsoftu. Transakcja protokołu HTTP składa się z żądania inicjowanego przez klienta (przeglądarkę WWW), po którym następuje odpowiedź serwera i zakończenie połączenia. Żądania i odpowiedzi są bezstanowe ani nie zawierają informacji o wcześniejszych połączeniach, ani nie pozostawiają żadnych wskazówek dla następnych połączeń. Protokół HTTP obsługuje pewną liczbę metod, które przesyłane są jako pierwszy wyraz w żądaniu. Najprostszą i najczęściej używaną jest metoda GET. Kod przedstawiony poniżej zawiera żądanie, w którym klient domaga się od serwera przesłania dokumentu strona.html, korzystając z wersji 1.0 protokołu HTTP: GET strona.html HTTP/1.0 Żądanie protokołu HTTP może zawierać jeden lub więcej nagłówków, czyli argumentów podanych w formacie "nazwa:wartość", które opisują żądanie wysłane przez przeglądarkę. Kolejne polecenie zawiera nagłówek User-Agent, który podaje zazwyczaj nazwę i wersję przeglądarki: GET strona.html HTTP/1.0 User-Agent: Mozilla
3 Żądanie GET działa w sposób bardzo charakterystyczny. Przesyła do serwera argumenty w ten sposób, że dodaje do adresu URL znak zapytania (?), po którym następuje jedna lub więcej definiujących wybrane parametry par "nazwa=wartość", oddzielonych od siebie znakami &. I tak na przykład polecenie: GET strona.html?imie=rafal&stankonta=2000 HTTP/1.0 żąda od serwera przesłania pliku strona.html, przekazuje jednocześnie do serwera dwa parametry: imie o wartości rafal oraz "stankonta" o wartości Zwróć uwagę, że zarówno wartości tekstowe, jak i liczby przekazywane są w wywołaniu jednakowo (tekst nie jest otoczony cudzysłowami, jak to ma miejsce w większości języków programowania). Z pracą polecenia GET protokołu spotykasz się podczas codziennego przeszukiwania zasobów internetowych. Wystarczy uruchomić popularną przeszukiwarkę Google, wpisać w pole poszukiwania dowolną frazę (np. test), aby po naciśnięciu klawisza Szukaj na ekranie pojawił się obraz, którego fragment przedstawia poniższy rysunek. Zwróć uwagę na linię adresową przeglądarki. Zawiera ona właśnie żądanie typu GET, wywołujące z serwera dokument search z parametrami q=test&ie=utf... itd. Drugim popularnym żądaniem protokołu HTTP jest polecenie POST. W przeciwieństwie do omówionego już GET, żądanie to nie przesyła danych w sposób jawny, w linii żądania (przekazywanych argumentów nie widać w linii adresowej przeglądarki). Pary 3
4 "nazwa=wartość" są tutaj podawane dopiero po pierwszym wierszu żądania i oddzielone od niego pustym wierszem: POST strona.html HTTP/1.0 imie=rafal&stankonta=2000 Ciąg przekazywany jako argumenty w przypadku obu metod nie może zawierać spacji i niektórych znaków specjalnych (np.? czy & nie mogą wystąpić w argumentach, gdyż pełnią specjalne funkcje). Znaki, takie jak znak spacji (Space) czy znak zapytania (?) nie mogą być więc w normalnej formie przesyłane w adresie URL. Zastępowane są one symbolem %, po którym następuje szesnastkowy kod odpowiedniego znaku (proces ten nosi nazwę kodowania URL). Tak więc znak spacji (kod ASCII 0x20) w adresie URL podawany będzie jako %20, a znak zapytania (kod ASCII Ox3F) jako %3F. Znasz już jeden element internetowy, korzystający z metod POST i GET. Są to formularze HTML. Formularz HTML, tworzony za pomocą znacznika <form>, pozwala użytkownikom na wysyłanie danych w formacie "nazwa=wartość" pod wybrany adres URL. Użytkownik wprowadza wartości, korzystając z graficznych elementów interfejsu, wyświetlanych na stronie przez jego przeglądarkę. Znasz dobrze te elementy to pola tekstowe, przyciski wyboru i klawisze. Każdy formularz musi zawierać przynajmniej jeden przycisk Submit (Zatwierdź). Gdy użytkownik naciśnie ten przycisk, przeglądarka wyśle zawartość formularza pod adres URL zdefiniowany w atrybucie "action" znacznika <form>, używając odpowiedniej metody żądania (GET lub POST), podanej w atrybucie "method". Na przykład przedstawiony tutaj formularz wywoła stronę test.php, używając do tego metody POST: <html> <head> <title>formularz testowy</title> </head> <body> <form action="test.php" method="post"> <input type="text" name="tekst"> <input type="submit" value="uruchom"> </form> </body> </html> 4
5 Jeżeli w tworzonym formularzu nie umieścisz atrybutu "method", określającego metodę przesyłania danych, Twoja przeglądarka w sposób domyślny wybierze metodę GET. Zauważ, że formularz zawiera też pole tekstowe o nazwie tekst. Zobaczmy, jak powinien wyglądać skrypt test.php, aby wyświetlał zawartość pola tekst. <html> <head> <title>test PHP</title> </head> <body> <?php echo $tekst;?> </body> </html> Zwróć uwagę, że skrypt zawiera tylko jedno polecenie echo $tekst, a wszystko działa bez zarzutu. Skrypt bezbłędnie wyświetla wartość, którą wpiszesz do pola tekstowego formularza. Większość pracy wykonuje za nas PHP po prostu w skrypcie od razu będą dostępne zmienne o nazwach takich, jak nazwy pól formularza, zawierające ich wartości. W przypadku pola tekstowego będzie to po prostu wpisany przez użytkownika tekst. Jeżeli pole jest typu CHECKBOX wartością będzie "on" jeśli pole jest zaznaczone lub zmienna będzie pusta jeśli pole nie zostało zaznaczone. Jeżeli w polu typu CHECKBOX podamy parametr VALUE, będzie on użyty zamiast "on". Tak samo wygląda obsługa pola typu RADIO. Wartością pola SELECT będzie wartość parametru VALUE zdefiniowanego w znaczniku OPTION. Takie działanie PHP jest bardzo wygodne, ale w niektórych sytuacjach spodziewane przez Ciebie zmienne nie są tworzone. Często zdarza się tak, gdy korzystasz z usług zewnętrznych dostawców Internetu. Aby zmienne te powstały, w pliku php.ini musi być ustawiony parametr konfiguracji o nazwie register_global. Jeżeli zainstalowałeś własny serwer, zgodnie z wytycznymi z rozdziału Instalacja środowiska, jest to ustawienie, które pozwala na dostęp do wszystkich pól formularza przez zmienne PHP. Jednak z powodu zwiększenia poziomu bezpieczeństwa niektórzy dostawcy Internetu decydują się na wyłączenie tej opcji poprzez przestawienie opcji konfiguracji register_global na off. W wyniku takiego działania zmienna skojarzona z przedstawionym powyżej polem formularza będzie pusta. 5
6 Gdy wyłączysz rejestry globalne, co jest zalecane i dużo bezpieczniejsze, nasz skrypt powinien wyglądać następująco: <html> <head> <title>test PHP</title> </head> <body> <?php $tekst = $_POST["tekst"]; echo $tekst;?> </body> </html> Dołączona została jedna linia, której zadaniem jest przypisanie do zmiennej $tekst zawartości tablicy asocjacyjnej _POST, zawierającej wszystkie wartości przekazywane metodą POST. Analogiczna tablica dla metody GET nazywa się _GET. Tablice te istnieją zawsze, niezależnie od ustawień rejestrów globalnych i dlatego zaleca się tworzenie oprogramowania przy ich użyciu. Kiedy już wiesz, w jaki sposób przekazywać parametry do skryptu, uruchom poniższy program. To prosta zgadywanka, która ilustruje sposób wykorzystania formularzy. <html> <head> <title>zgadywanka</title> </head> <body> <?php $a=$_get["a"]; print 'Ile to jest 2*2, hmm? '; if ($a!= 4) { echo "<form action=\"zgaduj.php\" method=\"get\">"; echo "<input type=\"text\" name=\"a\">"; echo "<input type=\"submit\" value=\"sprawdz\"> </form>"; if($a) {print "$a --- Niestety to zly wynik!\n"; else { print "Jakos Ci sie udalo.\n"; 6
7 ?> </body> </html> Zwróć uwagę, że program dzięki formularzowi wywołuje sam siebie, przekazując za każdym razem wartość wpisaną do pola tekstowego o nazwie a. To do tego pola właśnie powinno się wpisać odpowiedź na zagadkę. Takie wielokrotne wywołanie skryptu przez siebie samego doskonale zastępuje pętlę, w której liczba iteracji jest ściśle kontrolowana przez użytkownika. Można więc powiedzieć, że jest to pętla dynamiczna. 7
8 2. Funkcje Podczas pisania programu zastanawiasz się zwykle, jakie funkcje musi wykonywać i w jaki sposób możesz podzielić je na mniejsze fragmenty. Pomyślmy o tych fragmentach jak o modułach. W nowoczesnych językach programowania programiści piszą moduły kodu i dołączają je do dużej aplikacji. Łatwiej jest przetestować fragment kodu realizujący tylko jedno zadanie. Mamy wtedy do czynienia z dużo mniejszą liczbą wartości wejściowych i wyjściowych. Jeżeli jesteśmy pewni, że moduł działa bezbłędnie, a program zwraca nieprawidłowe wyniki, możemy łatwiej wyizolować prawdziwe źródło problemu. Jeżeli moduł realizuje jakieś zadanie, może być wywoływany za każdym razem, gdy potrzebujesz wykonać to zadanie. Taki moduł można traktować jak czarną skrzynkę, do której wkładamy dane, a wyjmujemy wyniki i dopóki dane wejściowe są prawidłowe, nie musimy przejmować się tym, co jest we wnętrzu. W PHP (i innych językach) takie moduły kodu nazwano funkcjami. Funkcje są fragmentami kodu zdefiniowanymi przez użytkownika w celu realizacji określonego zadania. Pobierają one wartości wejściowe w postaci argumentów, wykonują jakieś operacje i mogą zwracać wartość. Funkcje kopiują wartości argumentów do nowych zmiennych, nazywanych parametrami, które stosowane są we wnętrzu funkcji. Aby zdefiniować funkcję, musisz nadać jej nazwę. Realizujemy to za pomocą słowa kluczowego function; po którym następuje nazwa funkcji. Nazwy parametrów podane są w nawiasach po nazwie funkcji. Kod tworzący ciało funkcji umieszczony jest w nawiasach klamrowych po parametrach. function test ($arg_1, $arg_2,..., $arg_n) { echo "Przykładowa funkcja.\n"; return $wartosc; Funkcja może mieć dowolną liczbę linii kodu, ale jeżeli chcesz, aby zwracała wartość, musisz umieścić końcowe wyrażenie lub obliczenie po słowie kluczowym return. Instrukcja ta wskazuje, że skończyliśmy pracę i funkcja kończy się w tym miejscu. Może to również oznaczać, że chcemy zwrócić wartość obliczoną w funkcji. Nie musisz jednak zwracać żadnej wartości. Słowo return może zostać użyte po prostu do oznaczenia końca funkcji. 8
9 Ważne: nie możesz zwracać wielu wartości z funkcji, ale podobny efekt możesz uzyskać przez zwrócenie tablicy. Wewnątrz funkcji może się pojawić dowolny poprawny kod PHP, także definicje innych funkcji. W PHP 3 funkcje muszą być zdefiniowane przed odwołaniem do nich. W PHP 4 nie ma takiego wymagania. PHP nie obsługuje przeciążania funkcji (przypomnij sobie z kursu o języku Java, na czym polega przeciążanie). Nie jest także możliwe oddefiniowanie lub przedefiniowanie wcześniej zadeklarowanych funkcji. 9
10 3. Include i require Programiści często przygotowują biblioteki najbardziej przydatnych funkcji, umieszczając je w osobnych plikach. W celu wykorzystania tak przygotowanych plików PHP udostępnia instrukcje include() i require(). Obydwie instrukcje są identyczne w każdym szczególe, z wyjątkiem obsługi błędów. include() generuje błąd typu Warning, podczas gdy require() generuje błąd Fatal Error. Innymi słowy, funkcji require() używa się, by zatrzymać przetwarzanie skryptu, gdy brakuje jakiegoś pliku. Jeżeli zostanie użyta funkcja include(), to w powyższej sytuacji skrypt będzie przetwarzany dalej. Aby pokazać zastosowanie tych instrukcji, wpisz następujący przykład do pliku owoce.php: <?php $kolor = 'zielone'; $owoc = 'jabłko';?> po czym utwórz plik dolacz.php i wpisz do niego następujący kod: <?php echo "Jedno $kolor $owoc"; // Jedno include 'owoce.php'; echo "Jedno $kolor $owoc"; // Jedno zielone jabłko?> Uruchom teraz przeglądarkę internetową i wywołaj plik dolacz.php. Jeżeli oba pliki znajdują się w tym samym katalogu, na ekranie zobaczysz napis "Jedno zielone jabłko". Jeżeli plik owoce.php umieściłeś w innym katalogu (np. katalogu bibliotecznym), na początku pliku dolacz.php musisz zdefiniować ścieżkę dołączania. Zrobisz to, dopisując na początku linię: include_path=".;c:\twoja_sciezka" Spróbuj wymienić include na require wszystko będzie działać identycznie. 10
11 4. Argumenty funkcji Jak już wspomniano w rozdziale poświęconym funkcjom, podczas deklaracji funkcji, można w nawiasach zadeklarować jej argumenty, oddzielając je przecinkami. Argumenty muszą być poprzedzone symbolem dolara. Stają się one wewnątrz funkcji zmiennymi. Kiedy funkcja jest wywoływana, spodziewa się wartości, które będą odpowiadały argumentom i występowały w tej samej kolejności, w jakiej zostały zadeklarowane. Istnieje kilka możliwości operowania na argumentach funkcji. Przeanalizujmy następujący kod: <html> <head> <title> Parametry funkcji </title> </head> <body> <?php function podatek ($pensja) { $pensja = $pensja - (($pensja/100)*30); return $pensja; $pensja = 2500; echo (podatek($pensja)); /* przekazanie przez wartość */ echo "<br>"; echo '$pensja ='. $pensja; echo "<br>"; echo '$pensja ='. $pensja; echo "<hr>"; echo (podatek(&$pensja)); /* przekazanie przez zmienną (referencję) */ echo "<br>"; echo '$pensja ='. $pensja; echo "<br>"; echo '$pensja ='. $pensja; echo "<hr>"; 11
12 function podatek1 ($pensja=2500) /* domyślna wartość parametru*/ { $pensja = $pensja - (($pensja/100)*20); return $pensja; echo "Wywolanie podatek():". podatek(); echo "<br>"; echo "Wywolanie podatek1():". podatek1(); echo "<hr>"; function podatek2 ($pensja=2500, $podatek) /* kolejność parametrów*/ { $pensja = $pensja - (($pensja/100)*$podatek); return $pensja; function podatek3 ($pensja, $podatek=20) /* kolejność parametrów*/ { $pensja = $pensja - (($pensja/100)*$podatek); return $pensja; echo "Wywolanie podatek2(3000, 20):". podatek2(3000, 20); echo "<br>"; echo "Wywolanie podatek2(3000):". podatek2(3000); echo "<br>"; /*echo "Wywolanie podatek2(,3000):". podatek2(,3000);*/ echo "<br>"; echo "Wywolanie podatek3(3000):". podatek3(3000); echo "<hr>";?> </body> </html> 12
13 Argumenty domyślnie kopiują przesłaną im wartość do zmiennej lokalnej. Tak działa pierwsze wywołanie funkcji podatek(). Nazywa się to przekazaniem przez wartość. Jeżeli jednak zmienną poprzedza operator &, staje się ona wskazaniem zmiennej przesłanej do funkcji. Zwykle nazywa się to odwołaniem przez zmienną (referencję). Zwróć uwagę na drugie wywołanie funkcji podatek to właśnie ten mechanizm. Zmiana wartości wskazywanej zmiennej zmienia wartość zmiennej, która się do niej odwołuje. Możliwe jest również deklarowanie argumentów opcjonalnych. Wiele z funkcji, w które standardowo wyposażono PHP wykorzystuje tę możliwość. Należy do nich np. funkcja date(). Można jej przesłać jeden lub dwa argumenty. Pierwszy z nich to format zwracanej daty, a drugi to datownik wyrażony w sekundach, które upłynęły od 1 stycznia 1970 roku. W przypadku, gdy drugi argument jest pominięty, użyta zostaje bieżąca data. Argumenty opcjonalne deklaruje się we własnych funkcjach poprzez przyporządkowanie im wartości domyślnej operatorem =. Po prawej stronie znaku = znajduje się konkretna wartość, jaka zostanie przyporządkowana zmiennej. W omawianym przykładzie, mechanizm ten reprezentują funkcje podatek1(), podatek2() i podatek3(). Ponieważ argumenty muszą odpowiadać sobie w kolejności, trzeba przyporządkować wartość domyślną każdemu argumentowi, który wystąpi po pierwszym argumencie z wartością domyślną. Dlatego też funkcja podatek2() jest niepoprawnie zdefiniowana i wywołana z niekompletną liczbą parametrów zwróci błąd. 13
14 5. Zasięg zmiennych Zasięg zmiennej to zakres od miejsca jej utworzenia do miejsca jej zniszczenia. Zwykle jest to cała strona WWW. Jeżeli jednak użyjemy zmiennej we wnętrzu funkcji, niekoniecznie musi być to prawda. Zmienna może na przykład istnieć jedynie we wnętrzu funkcji. Jeżeli funkcja zostaje wywołana, tworzone są zmienne w jej wnętrzu, natomiast gdy funkcja się kończy, zmienne są niszczone. Odwołania spoza funkcji do tych zmiennych są nieprawidłowe, ponieważ w momencie odwołania (poza funkcją) nie mają one żadnej wartości. Podobnie jak w poprzednim rozdziale do dokładnego zaprezentowania idei zasięgu zmiennych w PHP posłużymy się przykładem. Oto on: <html> <head> <title> Zasieg </title> </head> <body> <?php $tekst = "Witaj Swiecie"; /* zmienna globalna */ function tlumacz($tekst) { $Tekst = "Hello World"; /* zmienna lokalna */ echo "zmienna tekst wew. funkcji :". $tekst. "<br>"; return $Tekst; tlumacz($tekst); echo $tekst; echo $Tekst; echo "<hr>"; function tlumacz2($tekst) { global $tekst; $Tekst = "Hello World"; /* zmienna lokalna */ echo "zmienna tekst wew. funkcji :". $tekst. "<br>"; return $Tekst; 14
15 tlumacz2(); echo $tekst; echo $Tekst; echo "<hr>"; function tlumacz3($tekst) { $Tekst = "Hello World"; /* zmienna lokalna */ echo "zmienna tekst wew. funkcji :". $GLOBALS["tekst"]. "<br>"; return $Tekst; tlumacz3(); echo $tekst; echo $Tekst; echo "<hr>"; function licznik() { static $liczba_odwiedzin = 0; return $liczba_odwiedzin += 1 ; echo licznik(). "<br>"; echo licznik(). "<br>"; echo licznik(). "<br>"; echo licznik(). "<br>"; echo licznik(). "<br>"; echo "<hr>";?> </body> </html> Wszystkie zmienne utworzone poza funkcjami są widoczne na całej stronie i dlatego zwiemy je globalnymi. Taki zasięg rozciąga się na pliki dołączane funkcjami include() i require(). Przykładem zmiennej globalnej jest $tekst. Jednakże w funkcjach zdefiniowanych przez użytkownika zmienne mają zasięg lokalny, dlatego też zostały nazwane lokalnymi. Przykładem zmiennej lokalnej w naszym przykładzie jest $Tekst. 15
16 Aby zmienne globalne były widoczne we wnętrzu funkcji, w PHP muszą być one jawnie określone jako globalne wewnątrz funkcji, w której mają być użyte, do czego używamy słowa kluczowego global. Przykładem takiej deklaracji jest funkcja tlumacz2(). Drugim sposobem uzyskania dostępu do zmiennych globalnych wewnątrz funkcji jest użycie specjalnej, zdefiniowanej przez PHP tablicy $GLOBALS. W naszym przykładzie ten sposób prezentuje funkcja tlumacz3(). $GLOBALS jest tablicą asocjacyjną, w której nazwa zmiennej jest kluczem, a zawartość zmiennej wartością komórki tablicy. Co się dzieje, jeżeli wielokrotnie wywołujemy tę samą funkcję? Zmienne lokalne są tworzone na początku funkcji i niszczone podczas jej zakończenia. Istnieją przypadki, w których chciałbyś, aby wartość zmiennej utrzymywała się pomiędzy kolejnymi wywołaniami funkcji (np. licznik wywołań strony). Zmienna taka nie istnieje poza funkcją, ale jeżeli kolejny raz wykonamy funkcję, wartość zmiennej jest taka sama, jak w poprzednim wywołaniu. Popatrz na funkcję licznik() z naszego przykładu. Użyto w niej tzw. zmiennej statycznej. Zmienna taka może mieć wyłącznie zasięg lokalny, ale nie traci swojej wartości, kiedy program opuści ten zasięg lokalny, w którym dana zmienna statyczna się znajduje. Powtórne wywołanie funkcji licznik() nadaje zmiennej $liczba_odwiedzin wartość, z którą zakończyło się poprzednie wywołanie. Gdyby nie słowo kluczowe static, ta funkcja byłaby bezużyteczna, gdyż przy każdym jej wywołaniu zmienna $liczba_odwiedzin otrzymywałaby wartość 0, w związku z czym funkcja stale wyświetlałaby "1". Dzięki mechanizmowi statyczności za każdym wywołaniem funkcji licznik(), zostanie wyświetlona wartość zmiennej $liczba_odwiedzin, zwiększona o jeden. Zmienne statyczne pozwalają też na wykorzystanie funkcji rekurencyjnych, czyli takich, które wywołują same siebie. Funkcje rekurencyjne należy pisać bardzo rozważnie, gdyż łatwo jest wywołać nieskończoną rekurencję. Musisz być pewny, że masz odpowiednie mechanizmy do zatrzymania rekurencji w odpowiednim momencie. Poniższa funkcja rekurencyjnie liczy do 10, używając zmiennej statycznej $licznik, aby wiedzieć, kiedy ma się zatrzymać: 16
17 function rekurencja() { static $licznik = 0; $licznik++; echo $licznik; if ($licznik < 10) { rekurencja(); $licznik--; 17
18 6. Operacje na plikach Uchwyt do pliku Pisząc różne programy, bardzo często musimy przechować do następnego uruchomienia dużą ilość danych. Można oczywiście skorzystać z bazy danych, co będzie opisane w dalszej części skryptu. Najprostszą metodą jest jednak wykorzystywanie w tym celu zwykłych plików dyskowych. Plik nie jest niczym więcej jak uporządkowaną sekwencją bajtów przechowywanych na dysku, dyskietce, dysku CD-ROM lub na innym medium służącym do przechowywania danych. Za pomocą dostępnych standardowo funkcji PHP, programista ma możliwość: otwierania i zamykania plików, czytania i zapisywania plików, usuwania i zmiany nazwy plików, przemieszczania się po pliku, otwierania i zamykania katalogu, odczytywania wpisów w katalogu, usuwania i zmiany nazwy katalogu. Autor programu zwykle doskonale wie, z jakiego pliku chciałby korzystać, musi jednak powiedzieć o tym interpreterowi PHP. Stosowne polecenie to fopen(), przyjmujące trzy parametry (w tym jeden opcjonalny). Pierwszy z nich to nazwa pliku do otwarcia, która może być podana w postaci nazwy pliku względnej (na przykład: "./dane.txt") lub bezwzględnej (na przykład: "c:/pliki/dane.txt"). Możesz również podać ścieżkę do pliku na innym komputerze, otwierając go poprzez HTTP lub FTP (" Drugi parametr reprezentuje tryb dostępu do pliku. Może być on ustawiony na jedną z poniższych wartości: 'r' otwórz tylko do odczytu; ustawia wskaźnik pliku na początku pliku; 'r+' otwórz do odczytu i zapisu; ustawia wskaźnik pliku na początku pliku; 'w' otwórz tylko do zapisu; ustawia wskaźnik pliku na początku pliku i obcina plik (zeruje) do 0 długości. Jeśli plik nie istnieje, próbuje go utworzyć; 'w+' otwórz do odczytu i zapisu; ustawia wskaźnik pliku na początku pliku i obcina plik (zeruje) do 0 długości. Jeśli plik nie istnieje, próbuje go utworzyć; 'a' otwórz tylko do zapisu; ustawia wskaźnik pliku na końcu pliku. Jeśli plik nie istnieje, próbuje go utworzyć; 18
19 'a+' otwórz do odczytu i zapisu; ustawia wskaźnik pliku na końcu pliku. Jeśli plik nie istnieje, próbuje go utworzyć. Możesz też użyć opcjonalnego trzeciego parametru i ustawić go na "1", jeśli chcesz, aby twój plik był poszukiwany także w include_path. Efektem działania funkcji fopen() jest zwrócenie tzw. uchwytu do pliku. Jest to rodzaj wskaźnika, ułatwiającego programowi korzystanie z danych zapisanych na dysku. W momencie wywołania polecenia fopen(), interpreter PHP odszukuje plik w zadanej lokalizacji i tworzy w pamięci programu specjalną strukturę danych, reprezentującą dane zawarte w pliku. Po utworzeniu uchwytu, każde korzystanie z pliku odwołuje się właśnie do tej struktury i nie wymaga ponownego przeszukiwania dysku. Oprócz odwoływania się do pliku, uchwyt może posłużyć do sprawdzania, czy udało się otwarcie pliku. Jeżeli otwarcie było udane, jest dodatnią liczbą całkowitą. Jeżeli nie udało się ma wartość zero. Działania na plikach i katalogach są zawsze narażone na wystąpienie błędu, więc musisz mieć to na uwadze. Dobrze jest mieć procedurę obsługi błędów, która jest wywołana po wystąpieniu błędu (na przykład: nie mamy wystarczających uprawnień do pliku lub plik po prostu nie istnieje) i elegancko obsłuży błąd, wypisując odpowiedni komunikat. Rozwiązanie taki uzyskamy w opisany poniżej sposób. Ponieważ PHP może traktować liczby całkowite jako wartości logiczne, załóżmy na potrzeby wyrażenia if() że wskaźnik pliku, który jest przecież liczbą, posiada wartość TRUE, gdy operacja się powiodła i FALSE, jeżeli się nie udała. Pozwoli to na sprawdzenie poprawności otwarcia w następujący sposób: $fp=fopen("dane.txt", "r"); if (!$fp) die(" Nie mogę otworzyć wskazanego pliku"); Funkcja die() powoduje natychmiastowe przerwanie działania programu, wyświetlając na ekranie komunikat podany jako parametr jej wywołania. Po zakończeniu pracy ze skryptem trzeba go zamknąć. Do tego celu służy funkcja fclose(). Jako parametr przyjmuje ona uchwyt do otwartego pliku: fclose($fp); Mimo że PHP powinien automatycznie zamknąć pliki po zakończeniu pracy skryptu, dobrą praktyką jest ich własnoręczne zamykanie natychmiast po wykorzystaniu, ponieważ 19
20 dzięki temu można szybciej udostępnić je dla innych procesów i skryptów lub nawet dla tego samego skryptu. Przyjrzyjmy się teraz funkcjom, które umożliwiają odczyt i zapis danych do otwartego pliku o uchwycie $fp. fread() Jest to funkcja służąca do odczytywania ciągu znaków z pliku. Posiada dwa argumenty: uchwyt do pliku i długość odczytywanego ciągu w bajtach. Inaczej mówiąc fread() odczytuje długość bajtów ze wskaźnika pliku $fp. Czytanie kończy się, gdy odczytano już długość bajtów lub osiągnięto koniec pliku, cokolwiek nastąpi pierwsze. Oto przykład pozwalający na odczyt całej zawartości pliku do łańcucha znakowego. $filename = fopen("dane.txt", "r"); $fd = fopen ($filename, "r"); $contents = fread ($fd, filesize($filename)); fclose ($fd); Zastosowano w nim nową funkcję filesize() pozwalającą na odczyt długości pliku. Oprócz funkcji fread() do odczytywania plików (ale tym razem znakowo) służą także: fgetc() odczytuje jeden znak i posiada tylko jeden argument uchwyt do pliku, fgets() odczytuje określoną liczbę znaków z pliku. Posiada dwa argumenty: uchwyt do pliku i liczbę znaków przeznaczonych do odczytu. fwrite() Do zapisu danych do pliku używamy funkcji fwrite(). Wymaga ona dwóch argumentów, uchwytu pliku $fp i ciągu znaków do zapisu. Istnieje też trzeci, opcjonalny argument. fwrite ( uchwyt, łańcuch [, długość]) fwrite() zapisuje treść łańcuch do pliku wskazanego przez uchwyt. Jeśli argument długość został podany, zapis zatrzymywany jest po zapisaniu liczby bajtów określonej tym argumentem lub jeśli łańcuch skończy się którekolwiek ze zdarzeń nastąpi szybciej. W efekcie swojego działania, funkcja zwróci liczbę zapisanych bajtów (lub zwróci 1 w przypadku wystąpienia błędu). Oto przykład użycia tej funkcji: 20
21 <?php $nazwapliku = 'test.txt'; $trochetresci = "Dodaj to do pliku\n"; Następna linia sprawdza, czy plik istnieje i jest zapisywalny. Zapamiętaj sobie nową funkcję is_writable(), to ona właśnie sprawdza atrybut zapisywalności. if (is_writable($nazwapliku)) { Następnie otwieramy $nazwapliku w trybie dopisywania. if (!$uchwyt = fopen($nazwapliku, 'a')) { echo "Nie mogę otworzyć pliku ($nazwapliku)"; exit; if (fwrite($uchwyt, $trochetresci) === FALSE) { echo "Nie mogę zapisać do pliku ($nazwapliku)"; exit; echo "Sukces, zapisano ($trochetresci) do pliku ($nazwapliku)"; fclose($uchwyt); else { echo "Plik $nazwapliku nie jest zapisywalny";?> Synonimem funkcji fwrite() jest fputs(). Obie funkcje działają identycznie. flock() Co jednak stanie się, jeżeli jednocześnie zostaną uruchomione dwie kopie skryptu i obie będą próbowały zmienić ten sam plik? Sytuacja taka, jak łatwo się domyślić, może mieć przykre konsekwencje. Aby rozwiązać ten problem, należy użyć blokowania plików. Służy do tego funkcja flock(): flock($fp, tryb); Pierwszy argument funkcji flock() to uchwyt do pliku. Argument tryb określa typ dostępu, jaki chcemy uzyskać. Może mieć następujące wartości: 21
22 1 dostęp do odczytu, 2 dostęp do zapisu, 3 zwolnienie blokady. Jeżeli chcemy uzyskać dostęp do zapisu, najpierw wszystkie inne blokady muszą być zwolnione. Do uzyskania dostępu do odczytu wystarczy, że plik nie będzie zablokowany do zapisu w ten sposób wiele skryptów może jednocześnie czytać z pliku, ale tylko jeden może do niego zapisywać. Dodatkowo w trakcie zapisu żaden inny skrypt nie może odczytywać z pliku dzięki temu nie natrafi na niekompletne dane. Jeżeli określony rodzaj dostępu nie może być w danej chwili uzyskany, wykonanie skryptu zostanie wstrzymane do czasu, gdy będzie to możliwe. Plik powinien być blokowany na jak najkrótszy czas, aby nie wstrzymywać niepotrzebnie innych operacji. Jeżeli chcemy tylko sprawdzić, czy plik jest zablokowany, do argumentu tryb należy dodać 4 wtedy funkcja zwróci wartość TRUE, jeżeli plik nie jest zablokowany, lub FALSE gdy jest. Oto przykład zastosowania operacji blokowania: $file1=fopen("jakis.plik", "r"); $file2=fopen("jakis.plik", "r"); otwiera dwa razy ten sam plik, flock($file1, 2); blokuje pierwszą kopię, if(flock($file2, 6)) funkcja flock zwróci FALSE, ponieważ plik jest już zablokowany. { echo("plik nie zablokowany"); else{ echo("plik zablokowany"); flock($file, 3); odblokowuje plik. 22
23 7. Praktyczny przykład elektroniczne głosowanie Pora pokazać użyteczny program, wykorzystujący większość poznanych do tej pory umiejętności. Treść programu będę przeplatał komentarzem. Linie zawierające wyłącznie znaczniki HTML pozostawię bez komentarza. Kod programu oraz pliki pomocnicze znajdziesz na płycie zawierającej materiały poświęcone naszemu kursowi. Jeżeli wszystko uruchomisz zgodnie ze wskazówkami, powinieneś uzyskać w oknie przeglądarki prosty system głosowania z wynikami w postaci graficznej, jak na rysunku: A oto treść programu: <link rel="stylesheet" href="vince.css"> <body bgcolor="#c0c0c0"> <table width="150" border="0" cellspacing="0" cellpadding="1" bgcolor="#ff9933" align=left> <tr> <td> <table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#660066"> <tr> <td><br><br> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td> <? 23
24 Rozpoczynamy kod PHP. if($vote == 1) Sprawdzenie, czy parametr przekazany podczas wywołania wynosił 1. Oznacza to głosowanie na tak (vote to nazwa pola typu radio-button na formularzu głosowania). Przy spełnieniu warunku zostaną wykonane poniższe instrukcje otoczone nawiasem klamrowym. { $fich="tak.txt"; $fp=fopen("$fich","r+"); Zdefiniowanie nazwy pliku przechowującego głosy na tak ("tak.txt") i otwarcie go w trybie odczyt/zapis. $oui=fgets($fp,10); Odczytanie 10 znaków z pliku tak.txt. Innymi słowy odczytanie liczby głosów na tak do zmiennej $oui. $oui++; zwiększenie liczby głosów na tak o jeden. fseek($fp,0); przesunięcie wskaźnika odczytu na początek. Wskaźnik odczytu przemieszcza się zawsze na koniec ostatnio odczytanego ciągu. Dzięki niemu każda następna operacja odczytu uzyska kolejne znaki. Wskaźnik ten definiuje także miejsce, od którego ma być rozpoczęty zapis do pliku. Po ostatnim odczycie liczby głosów, wskaźnik ten znajdował się za znakiem 10 (lub na końcu pliku, jeśli plik był krótszy). Powyższe polecenie ustawi wskaźnik na początku. Dzięki temu zapis nowej liczby głosów zamaże dotychczasowy wynik. Po takiej operacji plik będzie zawierał zawsze aktualną liczbę głosów. fputs($fp,$oui); fclose($fp); Zapisanie nowej liczby głosów do pliku tak.txt i zamknięcie go. 24
25 if ($vote == 2) Sprawdzenie, czy parametr przekazany podczas wywołania wynosił 2. Oznacza to głosowanie na nie (vote to nazwa pola typu radio-button na formularzu głosowania). Przy spełnieniu warunku zostaną wykonane poniższe instrukcje otoczone nawiasem klamrowym. { $fich="nie.txt"; $fp=fopen("$fich","r+"); Zdefiniowanie nazwy pliku przechowującego głosy na nie ("nie.txt") i otwarcie go w trybie odczyt/zapis. $non=fgets($fp,10); $non++; Odczytanie 10 znaków z pliku nie.txt. Innymi słowy odczytanie liczby głosów na nie do zmiennej $non, a następnie zwiększenie liczby głosów o jeden. fseek($fp,0); fputs($fp,$non); fclose($fp); Przesunięcie wskaźnika odczytu na początek pliku. Zapisanie nowej liczby głosów do pliku nie.txt i zamknięcie go. $fich="tak.txt"; $fp=fopen("$fich","r+"); $oui=fgets($fp,10); fclose($fp); $fich="nie.txt"; $fp=fopen("$fich","r+"); $non=fgets($fp,10); fclose($fp); 25
26 Powtórzenie operacji odczytu liczby głosów na tak i na nie z plików "tak.txt" i "nie.txt" do zmiennych $oui i $non. Odczyt tych wartości do zmiennych jest potrzebny w celu prawidłowego narysowania wykresu. Należy bowiem zwrócić uwagę, że powyższe instrukcje warunkowe uaktualniają w zależności od wywołania tylko jedną ze zmiennych $oui lub $non, a w przypadku wywołania skryptu bez parametrów (pierwsze wywołanie z danej lokalizacji) ani jedna z tych zmiennych nie będzie miała przypisanej wartości. Zauważmy też, że pliki są zamykane natychmiast po użyciu, co pozwala na ich natychmiastowe użycie przez innego głosującego. $result = (($oui*100)/($oui+$non)); $oui= $result; $non= $oui ; Przeliczenie liczby głosów na wartości procentowe (wyskalowanie wykresu).?> Chwilowe zakończenie kodu PHP, przejście do HTML. <table border="0" cellspacing=0 cellpadding=0 align="center"> <tr><td> <img src="images/graph_gh.gif" width="30" height="98"><img src="images/spacja.gif" width="15" height="10"><img src="images/tak.gif" width="10" height="<? echo $oui;?>"><img src="images/spacja.gif" width="15" height="10"><img src="images/nie.gif" width="10" height="<? echo $non;?>"></td></tr><tr><td><img src="images/graph_bs.gif" width="125" height="12" border=0></td></tr></table> Powyższy kod HTML rysuje wykres składający się z kilku gotowych obrazków. Zwróć uwagę, że w celu wyskalowania wysokości słupka, do kodu HTML wtrącono kod PHP height="<? echo $oui;?> podający aktualną wysokość słupka na podstawie zmiennej $oui. To samo uczyniono z wysokością drugiego słupka. Kod PHP można więc dowolnie zagłębiać w znacznikach HTML. <br> <form method="post" action="ankieta.php"> 26
27 Otwarcie formularza, który po zagłosowaniu wywołuje skrypt ankieta.php (czyli skrypt, który właśnie opisuję) z parametrami przekazanymi metodą POST. Dalsza część formularza HTML, niewymagająca komentarzy: <div align="center"> <font color="#ff9933"><b> <input type="radio" name="vote" value="1" > tak <input type="radio" name="vote" value="2"> nie </b></font> <br><br> <input type=image src="images/glosuj.gif" name="submit" value="envoyer"> </div> </form> </td></tr></table> Ponowny odczyt liczby głosów na tak i na nie, celem wykonania podpisu pod rysunkiem i obliczenia liczby głosujących: <? $fich="tak.txt"; $fp=fopen("$fich","r+"); $oui=fgets($fp,10); $pour = $oui ; fclose($fp); $fich="nie.txt"; $fp=fopen("$fich","r+"); $non=fgets($fp,10); $contre = $non ; fclose($fp); $result = (($oui*100)/($oui+$non)); $oui= $result; $non= $oui ; Zapewne zapytasz, po co ten odczyt? Przecież wykonywaliśmy go kilka linii temu. Faktycznie, ale podczas wykonywania tych linii ktoś inny (to przecież aplikacja internetowa) mógł zagłosować i zmienić wyniki. Na rysunku jeden głos nie sprawi wielkiej różnicy, ale liczby pod rysunkiem powinny być jak najbardziej aktualne. Stąd kolejne odczyty. 27
28 ?> <center> <font color="#ff9933"><b> TAK [<span class=copyrightvp><? print(intval($oui));?>%</span>] NIE [<span class=copyrightvp><? print(100- (intval($oui)));?>%</span>]<br> GLOSOWALO[<span class=copyrightvp><? print($pour + $contre);?></span>]<br><br> </b> </font> </center> </td></tr></table> </td></tr></table> <body> I to już koniec kodu. Niezbyt trudne, prawda? Oczywiście, aplikacja ta posiada wiele wad i niedociągnięć. Ma jednak też zalety: można ją bardzo szybko uruchomić, jest stosunkowo łatwa do zrozumienia. A jeżeli dostrzegasz jej wady, spróbuj je poprawić. Będzie to świetne ćwiczenie. 28
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()
Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,
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
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 obrębie skryptu. Wyrażenia include() i require() są niemal
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()
4. Pliki 4.1. Informacje ogólne o dostępie do plików w PHP Jak praktycznie każdy język programowania, PHP zapewnia dostęp do systemu plików znajdujących się na komputerze, na którym uruchamiany jest skrypt,
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
PHP: bloki kodu, tablice, obiekty i formularze
1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Podstawy technologii WWW
Podstawy technologii WWW Ćwiczenie 8 PHP, czyli poczatki nowej, dynamicznej znajomosci Na dzisiejszych zajęciach rozpoczniemy programowanie po stronie serwera w języku PHP. Po otrzymaniu żądania serwer
Zajęcia 10 obsługa formularzy w PHP
Zajęcia 10 obsługa formularzy w PHP Przekazywanie danych ze strony do skryptu PHP Dane ze strony WWW do skryptu PHP przekazujemy za pomocą formularzy. W tym celu musimy stworzyć formularz (znacznik ),
Wysyłanie pliku na serwer. Plik na serwerze.
Wysyłanie pliku na serwer Dzięki PHP możemy w łatwy i przyjemny sposób obsłużyć pliki uploadowane na serwer. Jednak, by prawidłowo wysłać plik, niezbędny będzie odpowiedni formularz HTML. Poniżej przedstawię
Umieszczanie kodu. kod skryptu
PHP Definicja PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania C/C++, lecz jest bardzo uproszczona
Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie
Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których
Języki programowania wysokiego poziomu. PHP cz.3. Formularze
Języki programowania wysokiego poziomu PHP cz.3. Formularze Formularze Sposób przesyłania danych formularza do serwera zależy od wybranej metody HTTP: Metoda GET
INFORMATYKA Studia Niestacjonarne Elektrotechnika
INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl
Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia
Dane - pobieranie, przekazywanie i przechowywanie dr Beata Kuźmińska-Sołśnia Definicja funkcji function nazwa (lista parametrów) { blok instrukcji Użycie instrukcji return wartość kończy działanie funkcji
Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki
Programowanie w Sieci Internet Blok 2 - PHP Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki Co dziś będziemy robić Podstawy podstaw, czyli małe wprowadzenie do PHP, Podstawy
Pliki. Operacje na plikach w Pascalu
Pliki. Operacje na plikach w Pascalu ścieżka zapisu, pliki elementowe, tekstowe, operacja plikowa, etapy, assign, zmienna plikowa, skojarzenie, tryby otwarcia, reset, rewrite, append, read, write, buforowanie
Wykład 5: PHP: praca z bazą danych MySQL
Wykład 5: PHP: praca z bazą danych MySQL Architektura WWW Podstawowa: dwuwarstwowa - klient (przeglądarka) i serwer WWW Rozszerzona: trzywarstwowa - klient (przeglądarka), serwer WWW, serwer bazy danych
Argumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody
Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,
Pracownia internetowa w każdej szkole (edycja Jesień 2007)
Instrukcja numer D2/08_01 Pracownia internetowa w każdej szkole (edycja Jesień 2007) Opiekun pracowni internetowej cz. 2 (D2) Określanie właściwości stron WWW (domyślne pliki startowe, katalogi wirtualne,
Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.
Zmienne powłoki Zmienne powłoki (shell variables) to tymczasowe zmienne, które mogą przechowywać wartości liczbowe lub ciągi znaków. Związane są z powłoką, Przypisania wartości do zmiennej następuje poprzez
Autor: Joanna Karwowska
Autor: Joanna Karwowska Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z dużej ilości danych zapisanych na serwerze jest współpraca z relacyjną bazą danych. 2 1. Utworzyć bazę danych.
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Rys.2.1. Drzewo modelu DOM [1]
1. CEL ĆWICZENIA Celem ćwiczenia jest przedstawienie możliwości wykorzystania języka JavaScript do tworzenia interaktywnych aplikacji działających po stronie klienta. 2. MATERIAŁ NAUCZANIA 2.1. DOM model
Należy ściągnąć oprogramowanie Apache na platformę
Programowanie Internetowe Język PHP - wprowadzenie 1. Instalacja Oracle+Apache+PHP Instalacja Apache, PHP, Oracle Programy i ich lokalizacja Oracle Database 10g Express Edition10.2 http://www.oracle.com/technology/products/database/
Programowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
wersja 1.0 ośrodek komputerowy uj cm ul. mikołaja kopernika 7e, Kraków tel
S Y S T E M B A D A Ń A N K I E T O W Y C H wersja 1.0 uj cm, 31-034 Kraków tel. 12 422 99 63 Opis konfiguracji Tworzenie ankiety rozpoczynamy ikoną znajdującą się w prawym górnym rogu ekranu. Ilustracja
Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do
Sesje i ciasteczka Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do śledzenia użytkownika podczas jednej sesji
Pliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]
1. CEL ĆWICZENIA Celem ćwiczenia jest przedstawienie możliwości wykorzystania języka JavaScript do tworzenia interaktywnych aplikacji działających po stronie klienta. 2. MATERIAŁ NAUCZANIA JavaScript tak
Być może jesteś doświadczonym programistą, biegle programujesz w Javie,
Kompendium PHP 01 Być może jesteś doświadczonym programistą, biegle programujesz w Javie, C++, Pythonie lub jakimś innym języku programowania, których jak myślę, powstało już tyle, że chyba nie ma osoby,
Ćwiczenie: JavaScript Cookies (3x45 minut)
Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Wykład 5: Klasy cz. 3
Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu
Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach
Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach Zasady tworzenia stron w PHP z jednym plikiem głównym Aplikacje oraz strony WWW bardzo często tworzy się tak, że do jednego dokumentu
Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12
Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12 Wersja 3.0 02-03-2017 Spis treści Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów
Aplikacje WWW - laboratorium
Aplikacje WWW - laboratorium Serwlety Celem ćwiczenia jest przygotowanie kilku prostych serwletów ilustrujących możliwości tej technologii. Poszczególne ćwiczenia prezentują sposób przygotowania środowiska,
Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi
Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi 1 Rozdział 1 Wprowadzenie do PHP i MySQL Opis: W tym rozdziale kursanci poznają szczegółową charakterystykę
Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka
Sesje, ciasteczka, wyjątki Nie sposób wyobrazić sobie bez nich takich podstawowych zastosowań, jak logowanie użytkowników czy funkcjonowanie koszyka na zakupy. Oprócz tego dowiesz się, czym są wyjątki,
Aplikacje internetowe - laboratorium
Aplikacje internetowe - laboratorium PHP Celem ćwiczenia jest przygotowanie prostej aplikacji internetowej opartej o język PHP. Aplikacja ilustruje takie mechanizmy jak: obsługa formularzy oraz obsługa
Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?
Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz
Ćwiczenie 1. Wprowadzenie do programu Octave
Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L Ćwiczenie 1. Wprowadzenie do programu Octave Mimo że program Octave został stworzony do
Instrukcja konfiguracji funkcji skanowania
Instrukcja konfiguracji funkcji skanowania WorkCentre M123/M128 WorkCentre Pro 123/128 701P42171_PL 2004. Wszystkie prawa zastrzeżone. Rozpowszechnianie bez zezwolenia przedstawionych materiałów i informacji
Pawel@Kasprowski.pl Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07
PHP i bazy danych Paweł Kasprowski pawel@kasprowski.pl Użycie baz danych Bazy danych używane są w 90% aplikacji PHP Najczęściej jest to MySQL Funkcje dotyczące baz danych używają języka SQL Przydaje się
Przewodnik użytkownika (instrukcja) AutoMagicTest
Przewodnik użytkownika (instrukcja) AutoMagicTest 0.1.21.137 1. Wprowadzenie Aplikacja AutoMagicTest to aplikacja wspierająca testerów w testowaniu i kontrolowaniu jakości stron poprzez ich analizę. Aplikacja
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)
Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty) // to jest pojedynczy komentarz (1-linijkowy) to jest wielolinijkowy komentarz Budowa "czystego" skryptu PHP (tak
Aplikacje WWW - laboratorium
Aplikacje WWW - laboratorium PHP. Celem ćwiczenia jest przygotowanie prostej aplikacji internetowej wykorzystującej technologię PHP. Aplikacja pokazuje takie aspekty, obsługa formularzy oraz zmiennych
Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science
Systemy internetowe Wykład 3 PHP PHP - cechy PHP (Hypertext Preprocessor) bardzo łatwy do opanowania, prosta składnia, obsługuje wymianę danych z różnymi systemami baz danych pozwala na dynamiczne generowanie
Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl
Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl wersja.2.9 data 2014-11-21 Opis usług: P24 KOD P24 KLUCZ P24 WAPA SEND SMS Strona 1 z 8 P24 KOD Przebieg transakcji Operacje po stronie Sprzedawcy
Szablon główny (plik guestbook.php) będzie miał postać:
Skrypt: Księga gości Skrypt generujący księgę gości będzie się składał z trzech części: szablonu głównego, który należy zapisać pod nazwą guestbook.php, formularza służącego do dodawania wpisów, który
Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski
Podstawy Pythona Krzysztof Gdawiec Instytut Informatyki Uniwersytet Śląski Słownik jest typem mutowalnym. Każdy element to para: klucz wartość. W celu stworzenia słownika pary klucz wartość umieszczamy
Pobieranie komunikatów GIF
Spis treści Wstęp... 2 1. Ustawienia harmonogramu zadań... 3 1.1. Tryby pracy AswPlan... 3 2. System KS-EWD... 4 2.1. Instalacja KS-EWD... 5 3. Inauguracja OSOZ... 6 3.1. Zdefiniowanie zadania pobierania
Tablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
Rozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
VinCent Administrator
VinCent Administrator Moduł Zarządzania podatnikami Krótka instrukcja obsługi ver. 1.01 Zielona Góra, grudzień 2005 1. Przeznaczenie programu Program VinCent Administrator przeznaczony jest dla administratorów
Zasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Celem tego projektu jest stworzenie
Prosty kalkulator Celem tego projektu jest stworzenie prostego kalkulatora, w którym użytkownik będzie podawał dwie liczby oraz działanie, które chce wykonać. Aplikacja będzie zwracała wynik tej operacji.
Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:
Skrypty powłoki Skrypty są zwykłymi plikami tekstowymi, w których są zapisane polecenia zrozumiałe dla powłoki. Zadaniem powłoki jest przetłumaczenie ich na polecenia systemu. Aby przygotować skrypt, należy:
Formy dialogowe w środowisku Gnome
Środowisko graficzne Gnome posiada wiele atrakcyjnych funkcji, które często nie są przez administratorów wykorzystywane. Jedną z nich jest dołączony zestaw form dialogowych o nazwie Zenity ( http://library.gnome.org/users/zenity/stable/
Włączanie/wyłączanie paska menu
Włączanie/wyłączanie paska menu Po zainstalowaniu przeglądarki Internet Eksplorer oraz Firefox domyślnie górny pasek menu jest wyłączony. Czasem warto go włączyć aby mieć szybszy dostęp do narzędzi. Po
Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak
LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH TABELE I FORMULARZE
LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH TABELE I FORMULARZE 1. TABELE 1.1. Definicja tabeli Definicja tabeli musi być umieszczona między znacznikami. W ich ramach umieszczane są definicje rzędów
SERWER AKTUALIZACJI UpServ
Wersja 1.12 upserv_pl 11/16 SERWER AKTUALIZACJI UpServ SATEL sp. z o.o. ul. Budowlanych 66 80-298 Gdańsk POLSKA tel. 58 320 94 00 serwis 58 320 94 30 dz. techn. 58 320 94 20; 604 166 075 www.satel.pl SATEL
Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać
MatLab część III 1 Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać komentarze poprzedzone znakiem % Skrypty
W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby
Część XI C++ W folderze nazwisko36 program za każdym razem sprawdza oba warunki co niepotrzebnie obciąża procesor. Ten problem można rozwiązać stosując instrukcje if...else Instrukcja if wykonuje polecenie
Bazy Danych i Usługi Sieciowe
Bazy Danych i Usługi Sieciowe Język PHP Paweł Witkowski Wydział Matematyki, Informatyki i Mechaniki Jesień 2011 P. Witkowski (Wydział Matematyki, Informatyki i Mechaniki) BDiUS w. VIII Jesień 2011 1 /
S P I S T R E Ś C I. Instrukcja obsługi
S P I S T R E Ś C I Instrukcja obsługi 1. Podstawowe informacje o programie.................................................................................... 2 2. Instalacja programu.....................................................................................................
Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych
1. Wstawianie skryptu na stroną: Laboratorium 1 Do umieszczenia skryptów na stronie służy znacznik: //dla HTML5 ...instrukcje skryptu //dla HTML4 ...instrukcje
Napisy w PHP. Drukowanie napisów instrukcją echo
Napisy w PHP. Drukowanie napisów instrukcją echo 1. Ćwiczenia do samodzielnego wykonania Wszystkie poniższe ćwiczenia należy samodzielnie wykonać wpisując w edytorze bez stosowania techniki kopiuj-wklej.
Programowanie w językach wysokiego poziomu
Programowanie w językach wysokiego poziomu zajęcia nr 2 Elektronika i Telekomunikacja, semestr III rok akademicki 2014/2015 Plan dzisiejszych zajęć Pliki tekstowe 1. Operacje na plikach - wprowadzenie
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
UNIFON podręcznik użytkownika
UNIFON podręcznik użytkownika Spis treści: Instrukcja obsługi programu Unifon...2 Instalacja aplikacji Unifon...3 Korzystanie z aplikacji Unifon...6 Test zakończony sukcesem...9 Test zakończony niepowodzeniem...14
Laboratorium 1 Wprowadzenie do PHP
Laboratorium 1 Wprowadzenie do PHP Ćwiczenie 1. Tworzenie i uruchamianie projektu PHP w Netbeans Tworzenie projektu Uruchom środowisko NetBeans. Stwórz nowy projekt typu PHP Application (File->New Project,
Programowanie CGI. Jolanta Bachan 2008-06-05 Informatyka
Jolanta Bachan Informatyka Sprawy organizacyjne Zaliczenie otrzymają osoby, które do 9. czerwca do godziny 0:00, czyli do 8. czerwca do godziny 24:00 prześlą mi: adres do strony internetowej z wbudowanym
Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.
1 Moduł OPC Moduł OPC pozwala na komunikację z serwerami OPC pracującymi w oparciu o model DA (Data Access). Dzięki niemu można odczytać stan obiektów OPC (zmiennych zdefiniowanych w programie PLC), a
Dodawanie operacji dodatkowych w WAPRO Mag.
Dodawanie operacji dodatkowych w WAPRO Mag. obowiązuje od wersji 8.21.0 Opracował i wykonał: Grzegorz Lenarczyk Asseco Business Solutions SA Oddział w Warszawie Warszawa, ul. Branickiego 13 02-972 Warszawa
Trochę o plikach wsadowych (Windows)
Trochę o plikach wsadowych (Windows) Zmienne środowiskowe Zmienną środowiskową można ustawić na stałe w systemie (Panel sterowania->system- >Zaawansowane ustawienia systemu->zmienne środowiskowe) lub też
SSK - Techniki Internetowe
SSK - Techniki Internetowe Ćwiczenie 2. Obsługa formularzy. Operatory, instrukcje warunkowe oraz instrukcje pętli w PHP. Obsługa formularzy Skryptu PHP moŝna uŝyć do obsługi formularza HTML. Aby tego dokonać,
Dlaczego PHP? - zalety
Dlaczego PHP? - zalety (+) bezpieczeństwo kodu - PHP wykonuje się po stronie serwera ( niezależność od przeglądarki) (+) bezpieczeństwo danych - wykorzystanie ssl i HTTPS (+) PHP jako moduł serwera WWW
INSTRUKCJA obsługi certyfikatów
INSTRUKCJA obsługi certyfikatów dla użytkownika bankowości internetowej Pocztowy24 z wybraną metodą autoryzacji Certyfikat Spis treści 1. Wstęp... 3 1.1 Wymagania techniczne... 3 2. Certyfikat jako jedna
2. Łańcuchy tekstowe w PHP
2. Łańcuchy tekstowe w PHP 2.1 Apostrofy i cudzysłowy Łańcuch tekstowy w języku PHP to ciąg znaków ograniczony apostrofami (') lub cudzysłowami ("). Te znaki ograniczające nie powinny być traktowane wymiennie,
Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].
ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym
S t r o n a 1 Bożena Ignatowska Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym Wprowadzenie W artykule zostaną omówione zagadnienia związane z wykorzystaniem funkcji tekstowych w arkuszu
1 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 1 1/7 Język C Instrukcja laboratoryjna Temat: Programowanie w powłoce bash (shell scripting) 1 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do programowania w powłoce Skrypt powłoki
Dokument opisuje sposób postępowania prowadzący do wysłania deklaracji VAT, PIT lub CIT drogą elektroniczną za pomocą funkcji systemu ADA modułu FK.
FK - EDeklaracje Dokument opisuje sposób postępowania prowadzący do wysłania deklaracji VAT, PIT lub CIT drogą elektroniczną za pomocą funkcji systemu ADA modułu FK. W założeniu przyjęto, iż użytkownik
Wprowadzenie do projektu QualitySpy
Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować
2 INSTALACJA OPROGRAMOWANIA. 3 3 GŁÓWNE OKNO PROGRAMU 3 4 MODUŁ OBSŁUGI ARCHIWUM 7
LUBUSKIE ZAKŁADY APARATÓW ELEKTRYCZNYCH LUMEL S.A. W ZIELONEJ GÓRZE PROGRAM DO KONFIGURACJI KONCENTRATORA DANYCH TYPU PD22 PD22Wiz.exe INSTRUKCJA OBSŁUGI Zielona Góra 2007 2 SPIS TREŚCI: 1 WSTĘP. 3 2 INSTALACJA
Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski
Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje
Przekazywanie danych. Dane zewnętrzne mogą pochodzić z róŝnych źródeł:
Przekazywanie danych Dane zewnętrzne mogą pochodzić z róŝnych źródeł: - ze środowiska systemu - z parametrów adresu (przekazywane metodą GET) - z formularza przekazywane metodą GET - z formularza przekazywane
Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak
Systemy operacyjne System operacyjny Linux - wstęp Anna Wojak 1 1 Wstęp Linux jest systemem z rodziny Unix. Pierwsza wersja systemu została opracowana w 1969 roku przez K.Thompsona i D.Ritchie Jest to
IIIIIIIIIIIIIIIMMIMMIII
IIIIIIIIIIIIIIIMMIMMIII O programie Program Itelix itender Manager przeznaczony jest do zarządzania zapytaniami ofertowymi przesyłanymi za pomocą poczty elektronicznej przez firmy korzystające z systemu
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()