Podstawy programowania (wspólne dla JavaScript i PHP) Uwagi wstępne Aby móc dalej poznawać JavaScript i PHP trzeba dokładnie przeczytać ten rozdział. PoniŜsze przykłady ilustrują zagadnienia, ale próby wykonania ich na komputerze są bezcelowe, gdyŝ po pierwsze nie zawierają elementów osadzających charakterystycznych dla konkretnego języka programowania (patrz wstawianie na stronę Javascript i PHP), po drugie w skryptach brak jest poleceń wyświetlających dane na ekranie (patrz punkty tekst w częściach o JavaScript i PHP). Komentarze Komentarz to wstawiany w skrypcie kawałek tekstu, który nie jest interpretowany. Komentarze są przydatne zwłaszcza przy pisaniu dłuŝszych skryptów, w których nie widać, co który fragment kodu robi. Komentarze w skryptach są oznaczane: /* treść komentarza */ lub //linia komentarza W drugim przypadku komentarz zakończony jest znakiem końca wiersza ( Enter ). Zmienne Zmienna ma nazwę, wartość i typ. Typ zmiennej wynika z jej wartości. Są zmienne typu tekstowego (wartościami są ciągi liter/znaków), kilka rodzajów zmiennych liczbowych, zmienne logiczne (wartości w tym typie to prawda i fałsz). Nazwą zmiennej moŝe być prawie dowolny ciąg znaków lub jeden znak. W przypadku PHP nazwa musi być poprzedzona $ (np. $nazwa_zmiennej ). Nazwami zmiennych nie mogą być słowa będące składnią danego języka programowania (jeśli do nazywania zmiennych będziesz uŝywał polskich słów bez polskich znaków nie musisz się tym w ogóle przejmować). Zmiennej przypisuje się wartości (czytaj dalej o operatorze przypisania). Mogą to być liczby: moja_zmienna=5; /* zmienna o nazwie moja_zmienna ma teraz wartość równą pięć */ (w przypadku PHP to samo wyraŝenie będzie miało postać: $nazwa_zmiennej=5;); Wartościami mogą być teksty (pojedyncze litery, wyrazy lub zdania): nazwa_zmiennej= wyraz ; (w PHP pamiętaj o $ przed nazwą zmiennej). Aby odróŝnić kiedy wartość jest liczbą lub zmienną, a kiedy tekstem (ciągiem tekstowym) te ostatnie bierze się w cudzysłowy lub apostrofy. x= 555 ; /* w tym przypadku 555 jest tekstem! Pamiętaj o $ w PHP! */ y= 555 ; /* w tym przypadku 555 teŝ jest tekstem! Pamiętaj o $ w PHP! */ z=555; /* w tym przypadku 555 jest liczbą! Pamiętaj o $ w PHP! */ $x=$zm; /* w tym przypadku $zm jest zmienną! */ $x= $zm ; /* w tym przypadku $zm jest tekstem! */ A co, jak chcę zmiennej przypisać tekst z cudzysłowem lub apostrofem?!! Ano to: $y= 555 ; /* w tym przypadku wartością jest tekst z cudzysłowem 555! */ y= 555 ; /* w tym przypadku wartością jest 555! Pamiętaj o $ w PHP! */ Albo to: y= \ ; /* w tym przypadku wartością jest! Pamiętaj o $ w PHP! */ y= \ ; /* w tym przypadku wartością jest! Pamiętaj o $ w PHP! */ WyraŜenia, operator przypisania i operatory arytmetyczne KaŜda instrukcja jest zakończona średnikiem (po kaŝdym poleceniu trzeba postawić ;,w przeciwnym razie skrypt nie zostanie prawidłowo wykonany)! W programowaniu znak = nie jest znakiem równości, tylko operatorem przypisania, czyli sprawia, Ŝe zmienna stojąca po jego lewej stronie przyjmuje wartość z prawej strony: a=4; /* teraz zmienna a ma wartość 4, choć wcześniej mogła być równa np. 10 */ Matematycznemu równa się odpowiada == (czytaj równy ). Dzięki operatorowi przypisania moŝna dokonywać na zmiennych rozmaitych operacji:
a=a+5; /* dodawanie (pamiętaj o $ w PHP, czyli $a=$a+5 ) */ a=b-a; /* odejmowanie (pamiętaj o $ w PHP) */ a=a*5; /* mnoŝenie (pamiętaj o $ w PHP) */ a=b/5; /* dzielenie (pamiętaj o $ w PHP) */ a=a%5; /* reszta z dzielenia a przez 5 (pamiętaj o $ w PHP) */ //kolejność działań jak w matematyce, moŝna uŝywać nawiasów W JavaScript dodawać moŝna takŝe teksty, czyli moŝna zrobić: a= Ala ma ; b= kota ; c=a+b; //c wynosi teraz Ala ma kota. // ZauwaŜ, Ŝe nazw zmiennych nie ujmuje się w apostrofy ani cudzysłowy!!! lub: a= Ala + ma ; c=a+ kota + w nosie ; //c wynosi teraz Ala ma kota w nosie. // ZauwaŜ, Ŝe nazw zmiennych nie ujmuje się w apostrofy ani cudzysłowy!!! W PHP teksty łączy się kropką: $a= Ala. ma ; $c=$a. kota ; //c wynosi teraz Ala ma kota. // ZauwaŜ, Ŝe nazw zmiennych nie ujmuje się w apostrofy ani cudzysłowy!!! Instrukcje warunkowe [if( ){ elseif( ){ else{ ] Instrukcje warunkowe działają wedle schematu: if(warunek_1){instrukcje_1;elseif(warunek_2){instrukcje_2;else{instrukcje_3; Znaczy to mniej więcej tyle: Jeśli warunek_1 jest spełniony wykonaj instrukcje_1; jeśli warunek_1 nie jest spełniony, a warunek_2 jest spełniony wykonaj instrukcje_2; jeśli warunki_1 i _2 nie są spełnione wykonaj instrukcje_3; Fragment elseif( ){ i else{ są opcjonalne, czyli moŝna napisać: if(warunek_1){instrukcje_1; Przykład instrukcji warunkowej: if(a==1){x= a wynosi 1 ;elseif(a==2){x= a wynosi 2 ;else{x= a większe od 2 ; Operatory porównania Operatory porównania są niezbędne do korzystania z instrukcji warunkowych (jeśli coś to zrób coś). Zwracają one wartość logiczną true lub false. Przykład Nazwa Wynik $a == $b Równy $a === $b Identyczny $a!= $b Nie równe $a!== $b Nie identyczny $a < $b Mniejsze $a > $b Większe $a <= $b $a >= $b Przykład: Mniejsze lub równe Większe lub równe if(a < b){x= a jest mniejsze niŝ b ; Operatory logiczne Prawda jeśli $a jest równe $b (pamiętaj, Ŝe w Javascript nie trzeba uŝywać $ ). Prawda jeśli $a jest równe $b i są tego samego typu (tylko PHP). Prawda jeśli $a nie jest równe $b (pamiętaj, Ŝe w Javascript nie trzeba uŝywać $ ). Prawda jeśli $a nie jest równe $b lub nie są tego samego typu (tylko PHP). Prawda jeśli $a jest mniejsze niŝ $b (pamiętaj, Ŝe w JavaScript nie trzeba uŝywać $ ). Prawda jeśli $a jest większe niŝ $b (pamiętaj, Ŝe w Javascript nie trzeba uŝywać $ ). Prawda jeśli $a jest mniejsze lub równe $b (pamiętaj, Ŝe w JavaScript nie trzeba uŝywać $ ). Prawda jeśli $a jest większe lub równe $b (pamiętaj, Ŝe w JavaScript nie trzeba uŝywać $ ). Operatory logiczne słuŝą do budowania bardziej skomplikowanych instrukcji warunkowych - do łączenia kilku warunków w jednej instrukcji.
Przykład Nazwa Znaczenie && AND i (to i tamto) OR Lub (to lub tamto)! a NOT Prawda, jeśli a nie jest prawdą (pamiętaj o $ w PHP) Przykład: if(a==1 && b==1){x= a i b jest równe 1 ; Przykład ten moŝna takŝe zapisać uŝywając true i false : if((a==1 && b==1)==true){x= a i b jest równe 1 ; Pętla for Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą przychodzi pętla for. Ogólny zapis wygląda tak: for( inicjalizacja zmiennych ; sprawdzenie warunku ; modyfikacja zmiennyc h) { blok instrukcji ; Pętla będzie wykonywana dopóki warunek jest prawdziwy. Przykład pętli, która wykona blok instrukcji 10 razy: for( $x = 1; $x <= 10; $x=$x+1 ){ blok instrukcji; //pamietaj, Ŝe w JavaScript nie musisz uŝywać $ Pętla while Pętla while jest wykorzystywana w sytuacjach, kiedy niezbędne jest wykonywanie jakiejś operacji dopóki spełniany jest warunek. Pętla while ma następującą składnię: while( warunek ){ instrukcje; Przykład pętli, która wykona blok instrukcji 10 razy: x=1; while( x<=10 ){ instrukcje; x=x+1; Pętla do...while Odmianą pętli while jest pętla do...while. Od pętli while róŝni się ona tym, Ŝe polecenia zawarte w pętli będą przynajmniej raz wykonane, poniewaŝ warunek umieszczony jest na końcu za instrukcjami i sprawdzany jest dopiero po ich wykonaniu: do{ instrukcje; while( warunek ); Nie omówiono instrukcji swich poniewaŝ jej działanie pokrywa się z if. Przerywanie wykonywania pętli Pierwszym sposobem jest uŝycie instrukcji continue : for($x = 1; $x<=100; $x=$x+1) { if($x % 2!= 0){ continue; $y=$x; /* $y są tylko parzyste */ Gdy zmienna $x jest nieparzysta (patrz warunek if ) uruchamiana jest instrukcja continue, co powoduje zignorowanie dalszych instrukcji i przejście do następnego cyklu pętli (w JS moŝna nie pisać $ ). Inną instrukcją zatrzymującą działanie pętli jest break. Polecenie to dodatkowo powoduje całkowite wyjście z pętli (nie są wykonywane następne cykle): for($x = 1; $x<=100; $x=$x+1) { if($x > 10){ break; $y=$x; /* maksymalna wartość $y to 10 */
Instrukcje continue i break działają takŝe w przypadku innych pętli. Funkcje Funkcja jest to kawałek kodu, którego działanie moŝna wywołać w dowolnym innym miejscu skryptu. Są dwa rodzaje funkcji: 1. Funkcje będące składnią danego języka programowania (np. funkcje dokument.write w JS i echo w PHP - czytaj dalsze rozdziały). 2. Funkcje definiowane przez programistę. Funkcje definiowane przez programistę najczęściej stosuje się aby wielokrotnie nie przepisywać tego samego kodu. Wykonanie funkcji wywołuje się w następujący sposób: nazwa_funkcji(); Aby funkcję moŝna było wywołać trzeba ją zadeklarować. Robi się to tak: function nazwa_funkcji() {instrukcje; /* te instrukcje nie zostaną wykonane zanim funkcja nie będzie wywołana */ Przykład zastosowania funkcji (kolejność zapisania w skrypcie deklaracji i wywołania funkcji jest dowolna, czyli nie ma problemu, gdy wywołanie funkcji występuje przed jej zadeklarowaniem i na odwrót): zadanie(); /* wywołanie funkcji o nazwie zadanie */ function zadanie() /* deklaracja funkcji o nazwie zadanie */ {instrukcje; /* ciąg dalszy deklaracjii funkcji; instrukcje są wykonywane po wywołaniu funkcji */ Wykonanie funkcji moŝna przerwać za pomocą polecenia return; : moja_funkcja(); /* wywołanie funkcji*/ //poniŝej jest deklaracja funkcji function moja_funkcja() { if($zmienna= =0){return; /* polecenie return; powoduje wyjście z funkcji*/ instrukcje; /* w razie uruchomienia polecenia return; te instrukcje nie zostaną wykonane */ W PHP zmienne w uŝyte w funkcjach nie działają poza nimi: function funkcja() {$x=7; funkcja(); /* wywołanie funkcji */ if($x= =7){instrukcje; /* instrukcje nie zostaną wykonane, bo zmienna $x działa tylko lokalnie w funkcji */ oraz $x=10; function funkcja() { $x=$x+1; /* powyŝsze działanie nie zostanie prawidłowo wykonane, gdyŝ lokalna zmienna $x będąca wewnątrz funkcji nie przejmuje wartości od zmiennej $x globalnej */ funkcja();/* wywołanie funkcji */ W JavaScript zmienne występujące w funkcjach działają poza nimi, ale zaleca się przekazywanie wartości do funkcji z uŝyciem argumentów funkcji tak jak w PHP (patrz niŝej). Funkcję moŝna wykonać na konkretnych wartościach podając je jako argumenty funkcji: $wartosc=2; /* przykładowa wartość */ funkcja($wartosc); /* w wywołaniu funkcji przekazujemy $wartość */ function funkcja($argument) { $kwadrat=$argument*$argument; /* za $argument jest podstawiana $wartosc */ Do funkcji moŝna przekazać dowolną liczbę wartości: funkcja($wartosc_1, $wartosc_2, $wartosc_3); function funkcja($argument_1,$argument_2,$argument_3,) { $suma=$argument_1+$argument_2+ argument_3; Za pomocą wspomnianego wyŝej polecenia return moŝna oprócz przerywania wykonania funkcji powodować, Ŝe funkcja zwraca określoną wartość: $wartosc_1=2; $wartosc_2=3; function funkcja($argument_1,$argument_2) {
$suma=$argument_1+$argument_2; return($suma); $wynik_funkcji=funkcja($wartosc_1, $wartosc_2); /* za $wynik_funkcji podstawiana jest $suma */ To samo polecenie return moŝna jednocześnie wykorzystać do przerywania wykonania funkcji i do zwracania wartości: //poniŝej wywołanie funkcji z uŝyciem if() if(moja_funkcja()= =true){instrukcje jak true ; else{instrukcje jak false ; function moja_funkcja() { if($zmienna= =0){return(false); /* polecenie return(false); powoduje wyjście z funkcji i zwrócenie wartości false */ instrukcje; /* w razie uruchomienia polecenia return(false); te instrukcje nie zostaną wykonane */ return(true); /* jeśli ta funkcja nie zostanie wcześniej przerwana zwraca wartośc true */ Tablice Omówione wcześniej zmienne przechowują pojedyncze wartości (są to tzw. zmienne skalarne). Tablice to zmienne przechowujące zbiory wartości. Przykładem tablicy moŝe być szkolna lista obecności, która jest zbiorem wartości jakimi są nazwiska uczniów. Nazwiska w takiej tablicy moŝna wpisać na dwa sposoby: 1. Wpisanie wielu wartości w jednym poleceniu: $lista=array( Abramczyk, Alechnowicz, Biegas, Brański, Gasparski, Kraus, Pustoła, Wiśniewski ); 2. Wpisanie/dopisanie/zamiana poszczególnych wartości tablicy w kolejnych liniach kodu: $lista=array(); /* określenie, Ŝe zmienna $lista ma być tablicą */ $lista[0]= Abramczyk ; $lista[1]= Alechnowicz ; $lista[2]= Biegas ; $lista[3]= Brański ; $lista[4]= Gasparski ; $lista[5]= Kraus ; $lista[6]= Pustoła ; $lista[7]= Wiśniewski ; Dostęp do wartości tablicy jest następujący: //PoniŜej odczytano wartość komórki $lista o numerze określanym przez zmienną $numer $wartosc=$lista[$numer]; /* zmienna $numer określa odczytywaną komórkę tablicy */ // Komórki tablicy są numerowane począwszy od zera. Omawiane wyŝej tablice są to tablice numeryczne, czyli dostęp do poszczególnych wartości jest moŝliwy po podaniu w nawiasie kwadratowym numeru właściwej komórki tablicy. Obok tablic numerycznych są tablice asocjacyjne, czyli takie, w których komórki są nazwane i dostęp do poszczególnych wartości moŝliwy jest po podaniu właściwych nazw komórek. Tablice asocjacyjne tworzy się w następujący sposób: $lista=array(); /* określenie, Ŝe zmienna $lista ma być tablicą */ // PoniŜej tworzone są komórki tablicy. $lista['bzyku']= 'Abramczyk'; /* Nazwa nowej komórki to Bzyku ; wartość to Abramczyk */ $lista['gaspar']= 'Gasparski'; $lista['hełmofon']= 'Kraus'; $lista['marecki']= 'Wiśniewski'; // PoniŜej odczytano wartość komórki tablicy $lista o nazwie Gaspar. $wartość=$lista['gaspar'];
"Podstawy programowania" są częścią ksiąŝki Marka Huberta Wiśniewskiego "Kurs tworzenia stron WWW". Całość publikacji moŝna znaleźć na stronie www.pierwszy.net (patrz reklamy). Pełna wersja zawiera: ZANIM ZACZNIESZ...BŁĄD! NIE GRAFIKA...BŁĄD! NIE BARDZO WAśNE UWAGI... BŁĄD! NIE Typy plików graficznych...błąd! Nie zdefiniowano zakładki. Optymalizacja...Błąd! Nie zdefiniowano zakładki. Wysokość i szerokość obrazków na stronie...błąd! Nie zdefiniowano zakładki. Graficzne elementy powtarzalne (między innymi desenie i efekty wypełnienia)...błąd! Nie zdefiniowano zakładki. PROJEKTOWANIE STRONY WWW... BŁĄD! NIE JĘZYK HTML I STYLE CSS.BŁĄD! NIE WAśNE UWAGI... BŁĄD! NIE WIZUALNE EDYTORY HTML (WYSIWYG)...BŁĄD! NIE ZDEFINIOWANO ZAKŁADKI. OBSŁUGA WYSIWYGA NA PRZYKŁADZIE NVU...BŁĄD! NIE ZDEFINIOWANO ZAKŁADKI. Ustawianie ogólnych właściwości strony...błąd! Nie zdefiniowano zakładki. Link (= hiperłącze = odnośnik)...błąd! Nie zdefiniowano zakładki. Wstawianie grafiki...błąd! Nie zdefiniowano zakładki. Formularz...Błąd! Nie zdefiniowano zakładki. KURS HTML... BŁĄD! NIE PODSTAWY... BŁĄD! NIE O ZAPISIE ZNACZNIKÓW HTML... BŁĄD! NIE PROLOG (<!DOCTYPE HTML PUBLIC ) BŁĄD! NIE NAGŁÓWEK (<HEAD> </HEAD>)... BŁĄD! NIE CIAŁO DOKUMENTU... BŁĄD! NIE O kolorach...błąd! Nie zdefiniowano zakładki. <body> </body>...błąd! Nie zdefiniowano zakładki. Edycja i formatowanie tekstu...błąd! Nie zdefiniowano zakładki. Pozioma linia... Błąd! Nie zdefiniowano zakładki. Tabele... Błąd! Nie zdefiniowano zakładki. ŚcieŜki dostępu (URL)... Błąd! Nie zdefiniowano zakładki. Linki... Błąd! Nie zdefiniowano zakładki. Obrazki... Błąd! Nie zdefiniowano zakładki. Filmy... Błąd! Nie zdefiniowano zakładki. Flash... Błąd! Nie zdefiniowano zakładki. Ramki... Błąd! Nie zdefiniowano zakładki. Formularze... Błąd! Nie zdefiniowano zakładki. Wysyłanie danych za pomocą linków... Błąd! Nie zdefiniowano zakładki. Parametr id... Błąd! Nie zdefiniowano zakładki. Komentarze... Błąd! Nie zdefiniowano zakładki. Parametr title... Błąd! Nie zdefiniowano zakładki. WYKAZ ZNACZNIKÓW...BŁĄD! NIE WYKAZ ZNAKÓW SPECJALNYCH...BŁĄD! NIE XHTML...BŁĄD! NIE Główne wytyczne XHTML... Błąd! Nie zdefiniowano zakładki. KURS CSS...BŁĄD! NIE Umieszczanie stylów na stronie WWW... Błąd! Nie zdefiniowano zakładki. ZaleŜności między selektorami... Błąd! Nie zdefiniowano zakładki. Warstwy... Błąd! Nie zdefiniowano zakładki. Wykaz najczęściej uŝywanych parametrów CSS... Błąd! Nie zdefiniowano zakładki. EDYTORY KODU...BŁĄD! NIE JAK UKŁADAĆ ELEMENTY NA STRONIE (W TABELI, W RAMKACH LUB NA WARSTWACH)...BŁĄD! NIE O STANDARDACH W3C I TESTOWANIU STRON INTERNETOWYCH... BŁĄD! NIE PUBLIKACJA STRONY W INTERNECIE.BŁĄD! NIE Serwery WWW... Błąd! Nie zdefiniowano zakładki. Wysyłanie strony internetowej na serwer... Błąd! Nie zdefiniowano zakładki. Alias lub domena, czyli fajniejszy adres strony... Błąd! Nie zdefiniowano zakładki. PODSTAWY PROGRAMOWANIA (WSPÓLNE DLA JAVASCRIPT I PHP)... BŁĄD! NIE Uwagi wstępne... Błąd! Nie zdefiniowano zakładki. Komentarze... Błąd! Nie zdefiniowano zakładki. Zmienne... Błąd! Nie zdefiniowano zakładki. WyraŜenia, operator przypisania i operatory arytmetyczne...błąd! Nie zdefiniowano zakładki. Instrukcje warunkowe [if( ){ elseif( ){ else{ ]. Błąd! Nie zdefiniowano zakładki. Operatory porównania... Błąd! Nie zdefiniowano zakładki.
Operatory logiczne...błąd! Nie zdefiniowano zakładki. Pętla for...błąd! Nie zdefiniowano zakładki. Pętla while...błąd! Nie zdefiniowano zakładki. Pętla do...while...błąd! Nie zdefiniowano zakładki. Przerywanie wykonywania pętli...błąd! Nie zdefiniowano zakładki. Funkcje...Błąd! Nie zdefiniowano zakładki. Tablice...Błąd! Nie zdefiniowano zakładki. JAVASCRIPT...BŁĄD! NIE WSTAWIANIE SKRYPTÓW JAVASCRIPT NA STRONĘ...BŁĄD! NIE GOTOWCE... BŁĄD! NIE KURS JAVASCRIPT... BŁĄD! NIE Wstęp...Błąd! Nie zdefiniowano zakładki. Tekst...Błąd! Nie zdefiniowano zakładki. Komunikacja między obiektami...błąd! Nie zdefiniowano zakładki. Zdarzenia...Błąd! Nie zdefiniowano zakładki. Właściwości i metody obiektów...błąd! Nie zdefiniowano zakładki. Obiekt document...błąd! Nie zdefiniowano zakładki. Data i czas...błąd! Nie zdefiniowano zakładki. Obiekt link...błąd! Nie zdefiniowano zakładki. Obiekt obrazek...błąd! Nie zdefiniowano zakładki. Obiekt historia...błąd! Nie zdefiniowano zakładki. Obiekt navigator (przeglądarka)...błąd! Nie zdefiniowano zakładki. Obiekt formularz i elementy formularza...błąd! Nie zdefiniowano zakładki. Elementy dialogowe...błąd! Nie zdefiniowano zakładki. Obiekt window...błąd! Nie zdefiniowano zakładki. Manipulowanie warstwami...błąd! Nie zdefiniowano zakładki. Tekst... Błąd! Nie zdefiniowano zakładki. Data i czas... Błąd! Nie zdefiniowano zakładki. Obsługa formularzy... Błąd! Nie zdefiniowano zakładki. Odczyt i zapis danych z/w pliku... Błąd! Nie zdefiniowano zakładki. Prawa dostępu do pliku (waŝne)... Błąd! Nie zdefiniowano zakładki. Cookie (ciasteczka)... Błąd! Nie zdefiniowano zakładki. Wysyłanie e-maili (funkcja mail(); )... Błąd! Nie zdefiniowano zakładki. Odbieranie plików od uŝytkownika... Błąd! Nie zdefiniowano zakładki. Zmienne informacyjne generowane przez serwer... Błąd! Nie zdefiniowano zakładki. Sesje... Błąd! Nie zdefiniowano zakładki. Sprawdzanie poprawności wykonania (waŝne)... Błąd! Nie zdefiniowano zakładki. Bardzo waŝna uwaga... Błąd! Nie zdefiniowano zakładki. GOTOWCE...BŁĄD! NIE CZEGO POWINIENEŚ SIĘ JESZCZE NAUCZYĆ... BŁĄD! NIE DODATEK 1: PROMOCJA STRONY WWW W INTERNECIE.BŁĄD! NIE BOKSY REKLAMOWE...BŁĄD! NIE POZYCJONOWANIE...BŁĄD! NIE ZAŁOśENIA...BŁĄD! NIE FRAZY KLUCZOWE...BŁĄD! NIE PHP...BŁĄD! NIE WAśNE UWAGI... BŁĄD! NIE INSTALOWANIE APACHE I PHP W SYSTEMIE WINDOWS...BŁĄD! NIE INSTALACJA APACHE... BŁĄD! NIE INSTALACJA PHP... BŁĄD! NIE WSTAWIANIE I URUCHAMIANIE SKRYPTÓW PHP...BŁĄD! NIE KURS PHP... BŁĄD! NIE