Komentarze, zmienne, warunki

Bez większego owijania przechodzimy do programowania. Jeśli jeszcze nie masz środowiska do programowania w PHP zainstaluj sobie xampp i netbeans co opisałem już jakiś czas temu Tutaj oraz Tutaj

Po pierwsze kod PHP musi być osadzony w specjalnych znacznikach, tak jak poniżej. Zawsze będą takie same, dlatego też w przykładach będę je pomijał. Jeśli cały plik zawiera tylko kod PHP, nie potrzebujemy używać znacznika zamykającego ?> czyli w większości przypadków bardziej zaawansowanego programowania niż napisanie małej funkcjonalności na przykład listującej elementy tablicy.

<?php 
    //Twój komentarz lub kod
?>

W powyższym przykładzie oprócz podstawowych znaczników, w których osadzamy kod PHP możemy zobaczyć dwa ukośniki i napis „Twój komentarz lub kod” za pomocą podwójnych ukośników dodajemy komentarze do kodu w jednej linii.

Ogólnie staramy się pisać kod tak aby nie trzeba było używać komentarzy (działanie programu było jasne z nazw zmiennych i funkcji). Czasami jednak jakaś funkcja jest na tyle specyficzna że wymaga pewnego krótkiego komentarza. Komentarze są także bardzo użyteczne podczas debugowania (wykrywania błędów), wówczas często komentujemy kawałek kodu aby sprawdzić czy to właśnie on powoduje błąd.

Oprócz możliwości komentowania jednej linijki możemy zakomentować ich kilka używając nieco innej składni.

<?php 
    /* 
        Twój komentarz lub linia zakomentowanego kodu
        Druga linia
        trzecia linia kodu
    */
?>

Warto zapamiętać ten sposób komentowania ponieważ działa w wielu językach programowania.

Wyświetlanie

Najłatwiejszym programem jaki można napisać w PHP jest wyświetlenie napisu „Hello world” (w większości języków programowania zaczyna się od programu typu „Witaj świecie”).

Kod przedstawia się nastepująco:

echo "Hello world";

Słowo kluczowe echo mówi programowi że ma coś wyświetlić na ekranie. Następnie jest „Hello world” należy tutaj zwrócić uwagę na podwójne cudzysłowy. W ten sposób informujemy program że jest to jakiś ciąg znaków a nie komenda do wykonania. W pojedyńczych cudzysłowach też będzie działać, jednak staramy się określać słowa i zdania w podwójnych cudzysłowach, zaś pojedyńcze znaki w pojedyńczych cudzysłowach.

Średnik na końcu stawiamy ZAWSZE, jest to prawdopodobnie najczęstszy problem początkujączych programistów poza literówkami. Jeśli nie postawimy średnika na końcu komendy otrzymamy błąd i program nie zadziała.

Działania matematyczne i zmienne

Najłatwiejszym programem, który cokolwiek robi jest najprostszy z możliwych kalkulator, który dodaje dwie liczby.

echo 2 + 1;

Niestety program w którym wartości są wpisane „na sztywno” jest w zasadzie bezużyteczny, ponieważ można by policzyć wynik na kalkulatorze i go wpisać. W programowaniu prawie zawsze wykorzystujemy ZMIENNE, do których możemy przypisywać różne wartości. Zazwyczaj wartości, które przypisujemy do zmiennych pobieramy z innych miejsc jak na przykład baza danych czy formularz przeglądarki. Ogólnie czym więcej wartości jest w programie na sztywno tym prawdopodobnie gorszy program, dane zazwyczaj przechowujemy w bazach dancyh lub w plikach.

Jeśli przypiszemy liczby do zmiennych to możemy dodać zmienne i otrzymamy taki sam wynik.

$a = 2;
$b = 1;
echo $a + $b;

Zrealizowanie tego kodu da nam niezbyt atrakcyjny wynik ponieważ domyślnie będzie to liczba 3 na białym tle, aczkolwiek liczba zawsze będzie prawidłowa. Gdy tworzymy program, który coś wyświetla zazwyczaj to „coś” opisujemy w jakiś sposób. Tutaj często przydaje się łączenie ciągów znaków zwanch STRING W ten sposób możemy dodać słowo „wynik” przed naszym wynikiem.

$a = 2;
$b = 1;
echo "Wynik " . ($a + $b);

Patrząc na powyższy kod należy zapamiętać kilka ważnych i podstawowych rzeczy:

  • String zawsze bierzemy w cudzysłów – każdy ciąg znaków, który chcemy wyświetlić należy wziąć w cudzysłowy, w ten sposób informujemy komputer że jest to tekst do przetworzenia a nie na przykład jakaś komenda
  • Stirngi łączymy kropką
  • Działania przy wyświetlaniu bierzemy w nawiasy – warto to robić ponieważ w PHP zarówno łączenie ciągów znaków jak i zapis ułamków odbywa się przy pomocy kropki i coś mogło by pójść nie tak.
  • Na końcu każdej komendy zawsze stawiamy średnik – i to jest najważniejsza zasada dla początkujących (a często i dla średniozaawansowanych). Bez tego wystąpią błędy interpretacji tego kodu i nie zadziała.

Pobieranie informacji od użytkownika

Aby odebrać jakąkolwiek informację od użytkownika, nalezy udostępnić mu możliwość jej wpisania. Do tego służą formularze w HTML. Aby napisać w jakimkolwiek stopniu funkcjonalny kalkulator potrzebujemy formularz z polami:

<form method="POST">
    <input type="number" name="a" value="" />
    <select name="action">
        <option value="+">+</option>
        <option value="-">-</option>
    </select>
    <input type="number" name="b" value="" />
    <input type="submit" value="Licz" />
</form>

W powyższym kodzie na początku otwieramy formularz, tutaj trzeba zwrócić uwagę na określenie metody przesyłania danych method=”POST”, na codzień wykorzystujemy dwie metody przesyłania danych POST oraz GET, w formularzach domyślnie dane są przesyłane metodą „GET”, oznacza to że dane które przesłaliśmy będą widoczne w linku, który będzie wyglądał np:

https://domena.pl?pole1=wartość pola jeden&pole1=wartość tego pola

Po wysłaniu formularza metodą GET na końcu po znaku zapytania zostanie doklejona nazwa pola, następnie po znaku = jego wartość wpisana przez użytkownika i po znaku & kolejna wartość.

Kolejne pola to pole na wpisanie liczby (typ number), lista rozwijana (pole typu select), kolejne pole na wpisanie liczby oraz przycisk umożliwiający wysłanie formularza.

Należy zwrócić uwagę że kluczowym tagiem dla nas z punktu widzenia PHP jest „name”. Dane z formularza najczęściej pobieramy po nazwie.

<?php 
    $a = $_POST['a'];
    $b = $_POST['b'];
    echo "Wynik " . ($a + $b);

Zmienne z formularza pobieramy za pomocą $_POST[’b’]. Niestety jeśli skopiujemy kod formularz i powyższy odebrania danych a następnie odświeżymy przeglądarkę powitają nas błędy.

Dzieje się tak ponieważ jeszcze nie wysłaliśmy formularza i indeksy z naszymi polami nie istnieją. Po wpisaniu liczb w pola i wysłaniu, błędy znikną a w ich miejsce pojawi się wynik działania programu.

Do naszego kalkulatora brakuje jeszcze wyboru działania oraz sprawdzenia czy formularz został wysłany i do tego celu wykorzystamy sobie instrukcję warunkową „IF” oraz funkcję isset.

if(isset($_POST['a']) && isset($_POST['b'])){
    $a = $_POST['a'];
    $b = $_POST['b'];
    $action = $_POST['action'];
    if($action == '+'){
        $result = $a + $b;
    } else {
        $result = $a - $b;
    }
    echo "Wynik " . $result;
}

W powyższym kodzie najpierw sprawdzamy czy istnieją zmienne $_POST[’a’] oraz $_POST[’b’] za pomocą funkcji isset oraz instrukcji warunkowej if, następnie pobieramy liczby oraz znak działania, później wykorzystując instrukcję warunkową „if” określamy czy użytkownik wybrał z listy rozwijanej dodawanie czy odejmowanie. Jeśli użytkownik wybrał dodawanie przypisujemy do zmiennej $result wynik dodawania, a jeżeli nie odejmowania. Na koniec wyświetlamy wynik.

Filtry

W prawdzie program działa nie generując zbytnio błędów w przeglądarce po odświeżeniu i wysłaniu poprawnych liczb, jednak nie jest to zbyt dobry program ponieważ jak na przykład zapomnimy wpisać jedną z liczb to wyślemy wartość pustą, która nie jest liczbą i przy próbie dodawania wygeneruje to błąd. Dodatkowo warto zauważyć że na przykład edytor kodu netBeans podkreśla na żółto $_POST[’a’], po najechaniu dowiemy się że powinniśmy użyć jakiegoś filtra przy pobieraniu danych od użytkownika.

Poprawimy teraż niezbyt dobry kod na lepszy wykorzystując filtry.

$a = filter_input(INPUT_POST, 'a', FILTER_VALIDATE_FLOAT);
$b = filter_input(INPUT_POST, 'b', FILTER_VALIDATE_FLOAT);
$action = filter_input(INPUT_POST, 'action');
if($a !== FALSE && $b !== FALSE){
    if($action == '+'){
        $result = $a + $b;
    } else {
        $result = $a - $b;
    }
    echo "Wynik " . $result;
}

Najwięcej dzieje się w pierwszej linijce. Tak jak w poprzednim przykładzie do zmiennej $a przypisujemy wartość przesłaną przez użytkownika w polu „a”. Z tym że teraz wykorzystujemy funkcję filter_input. Funkcja ta przyjmuje trzy argumenty:

  • Metoda – czyli jakiego przesłania formularza oczekujemy. Mamy tutaj do wyboru Jedna z INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION. Najczęściej będziemy wykorzystywać INPUT_POST lub INPUT_GET.
  • Nazwa pola – poznany wcześniej atrybut „name” wykorzystywany w formularzu.
  • Typ filtra – jako trzeci argument określamy filter jaki chcemy wykorzystać. W przykładzie powyżej wykorzystaliśmy dwa rodzaje filtrów FILTER_VALIDATE_FLOAT oraz FILTER_DEFAULT ale jest ich znacznie więcej oraz można pisać własne o czym szerzej kilka lekcji dalej.

FILTER_VALIDATE_FLOAT sprawdza czy użytkownik przesyła liczbę zmienno przecinkową. Tutaj przechodzą liczby całkowite i ułamki jeśli dane przesłane są poprawne to funkcja filter_input zwraca przekonwertowaną liczbę dziesiętną. Jeśli dane nie są prawidłowe otrzymamy FALSE. Przy pobraniu działania trzy linijki niżej nie wpisaliśmy żadnego filtra, więc został użyty FILTER_DEFAULT co jest równoważne z brakiem filtrowania.

Dalej sprawdzamy czy zostały wprowadzone poprawne dane. Za pomocą wykrzyknika i dwóch znaków równości !== sprawdzamy czy coś nie jest identyczne, czyli czy zmienna $a nie zawiera FALSE. Gdybyśmy na przykład użyli jednego znaku równości zamiast dwóch najprawdopodobniej nie bylibyśmy w stanie dodać czegokolwiek do zera.

Instrukcja warunkowa SWITCH

Możemy nieco rozbudować kalkulator o kolejne działania tak jak mnożenie i dzielenie. Wówczas uzyskamy cztery możliwości, w takich sytuacjach instrukcja warunkowa „if” nie jest już najlepszym rozwiązaniem, a zamiast niej warto wykorzystać „switch”, która sprawdza kilka warunków.

Aby wykonać wyżej opisany przykład należy zacząć od rozbudowy formularz HTML w następujący sposób:

<form method="POST">
<input type="number" name="a" value="" />
<select name="action">
    <option value="+">+</option>
    <option value="-">-</option>
    <option value="*">*</option>
    <option value="/">/</option>
</select>
<input type="number" name="b" value="" />
<input type="submit" value="Licz" />
</form>

Po dodaniu dwóch opcji listy rozwijanej możemy zastosować kod PHP

$a = filter_input(INPUT_POST, 'a', FILTER_VALIDATE_FLOAT);
$b = filter_input(INPUT_POST, 'b', FILTER_VALIDATE_FLOAT);
$action = filter_input(INPUT_POST, 'action');
switch($action){
    case '+':
        $result = $a + $b;
        break;
    case '-':
        $result = $a - $b;
        break;
    case '*':
        $result = $a * $b;
        break;
    case '/':
        $result = $a / $b;
        break;
    default:
        $result = 0;
}
echo "Wynik " . $result;

Na początku tak jak wcześniej pobieramy dane z formularza. Otwieramy instrukcję switch przekazując w nawiasach okrągłych zmienną, którą sprawdzamy. Następnie otwieramy klamrami blok kodu. Pierwszy case to sprawdzenie pierwszego przypadku, tutaj sprawdzamy czy jest to znak plus. Jeśli nie jest to znak plus to przechodzimy do następnego przypadku, jeśli jest to znak plusa to do zmiennej $result zapisujemy wynik dodawania, a następnie przerywamy sprawdzanie kolejnych przypadków słowem kluczowym break.

Na końcu mamy wartość domyślną, określaną słowem default, gdzie jeśli nie zostanie spełniony żaden warunek (na przykład formularz nie zostanie przesłany), jako wynik zostanie zapisane zero.

I to by było na tyle, z powyższego kodu powinniśmy otrzymać kalkulator, który potrafi wykonywać podstawowe działania arytmetyczne.

Zadania

Tyle wiedzy na raz. Ja zazwyczaj zapominam z podobną prędkością jak czytam. Z tego powodu warto sobie przerobić kilka przykładowych zadań

Zadanie 1

Napisz program zawierający dwie zmienne przechwujące liczby, następnie wyświetl trzy wniki: pole kwadratu gdzie bok to zmienna $a, pole prostokąta gdzie boki to zmienne $a i $b oraz pole trójkąta gdzie zminna $a to długość podstawy a $b to wysokość.

Zadanie 2

Napisz program z formularzem z jednym polem, w które jeśli wpiszesz imię i wyślesz program wyświetli napis „Witaj, TWOJE_IMIĘ”

Zadanie 3

Napisz program gdzie użytkownik poda liczbę i wybierze liczbę od 1 – 4 z listy rozwijanej. Po wysłaniu formularza otrzyma wybraną z listy rozwijanej potęgę wprowadzonej liczby. (wykorzystaj do tego Switch)