PHP proqram nümunəsi

İndi isə PHP dilində ənənəvi “Hello, world!” proqramına baxaq:

<?php
echo "Hello, world!";
?>

PHP-skript öz təbiətinə görə adi CGI-skriptlərdən müəyyən qədər fərqlidir. Yuxarıda göstərilən proqramı başqa üsulla yazmaq olar. İndi yazacağımız nümunə bu fərqi izah edəcək. PHP sintaksisi ilə heç vaxt qarşılaşmayanlar üçün bu daha maraqlı görsənəcək.

<body>
Hello, world!
</body>

Bəli, burda həqiqətən də heç bir PHP operatoru yoxdur və “proqram” faylının daxili statik mətndən ibarətdir. Belə çıxır ki, adi HTML mətni də PHP tərəfindən normal emal olunur? Bəli, bu belədir. Ancaq gəlin, daha mürəkkəb nümunəyə baxaq:

<!DOCTYPE html>
<html lang='az'>
    <head>
        <title>Sadə PHP skript</title>
        <meta charset='utf-8'>
    </head>
<body>
    <p>
        <?php 
        //bu günkü tarixi "gün.ay il" formatında hesablayaq
        $date = date("d.m y"); 
        //bu andakı saatı hesablayaq
        $time = date("h:i:s");
        # onları çap edək
        echo "Tarix: $date il<br />\n";
        echo "Saat: $time<br />\n"; 
        # Rəqəmləri çap edək
        echo "İlk 5 natural ədədlərin kvadrat və kubları:<br />\n"; 
        echo "<ul>\n";
        for ($i = 1; $i <= 5; $i++) { 
            echo "<li>$i kvadratı = " . ($i * $i); 
            echo ", $i kubu = " . ($i * $i * $i) . "</li>\n"; 
        }
        ?>
        </ul>
    </p>
</body>
</html> 

Çox güman ki, hər hansı bir dilin sintaksisini nümunələrə baxaraq diaqram və ya sxemlərə nisbətən daha rahat “hiss etmək” olar. İrəlidə biz də bu prinsipə əsalanacağıq. Yazılmış proqramı başa düşməyə çalışaq.

Skriptin əvvəlinə diqqət yetirsək görərik ki, burda çaşdırıcı nüans var. <html>, <body> HTML teqləri burda nə iş görür? Bu həqiqətən skriptdirmi? Bax elə bu məsələdə PHP dilinin əsas üstünlüyü gizlənir: göründüyü kimi, PHP-skript adi HTML-sənəddən heç fərqlənməyə bilər.

Davam edək. Yəqin fikir verdiniz ki, skriptlər <?php teqi ilə başlayıb  ?> teqi ilə bitir. Beləliklə bu iki teq daxilindəki yazılar proqram kimi interpretasiya edilir və HTML-sənəddə görsənmir. Proqrama nəyisə çap etmək lazım gəldikdə isə echo operatorundan istifadə edilməlidir. İrəlidə onun necə işlədiyinə ətraflı baxacağıq. Beləliklə, aydın olur ki, PHP elə qurulub ki, <?php?> proqram bloklarından kənarda olan bütün yazılar olduğu kimi brauzerə ötürülür, yəni echo operatorunun nəticəsi kimi başa düşülür.

Yəqin ki, // işarəsindən sonrakı yazıların kommentariya olduğunu başa düşmüsünüz. Kommentariyalar proqramın gedişatına heç bir təsir göstərmir. Bir sətirlik kommentariyaları həmçinin, nümunədən göründüyü kimi, # işarəsi ilə də ayırmaq olar. Kommentariyalar çox sətirlik də ola bilər:

/*
kommentariya
... kommentariyanın növbəti sətri
*/

Davam edək. Növbəti sətir:

$date = date("d.m y"); 

Bu sətrin gördüyü işi izah edək. $date adlı dəyişənə date() funksiyasının qaytardığı dəyər mənimsədilir. Nəzərinizdə saxlayın ki, PHP-də mütləq şəkildə bütün dəyişənlər $ işarəsi ilə başlayır, çünki interpretasiya üçün bu daha rahatdır. Beləliklə görürük ki, PHP-də birinci olaraq dəyişənləri əvvəlcədən elan etməyə ehtiyac yoxdur (məsələn, Pascal və C dilindən fərqli olaraq), ikincisi isə onların tipi (yazı, işarə, tam ədəd və s.) heç yerdə göstərilmir. İnterpretator nəyin harda hansı tipdə olduğuna özü qərar verir. date() funksiyası haqqında qeyd etmək lazımdır ki, ona nəticənin formatını müəyyən edən bir parametr ötürülür. Bizim halımızda bunun nəticəsi məsələn, 07.11 2017 kimi olacaq.

Bütün operatorların sonunda C dilində olduğu kimi nöqtəli vergül dayanmalıdır (;). Diqqət yetirin ki, Pascal-dakı kimi yox, məhz C dilindəki kimi. Başqa sözlə, siz if-else konstruksiyasında else-dən əvvəl mütləq nöqtəli vergül yazmalı, funksiyanın başlığından sonra isə yazmamalısınız.

Növbəti sətirdə yenidən kommentariya, sonra isə əvvəlkinə bənzər digər operatoru görürük. O, $time dəyişəninə date() funksiyasını yenidən çağıraraq “saat:dəqiqə:saniyə” formatında cari saatı mənimsədir. Gələcəkdə bu faydalı funksiyanın bütün imkanları ətraflı təsfir ediləcək.

Növbəti sətirdə kommentariya, sonra isə yazı sətirlərini, tarix və saatı çap edən echo operatorları gəlir. Onlardan birinə baxaq:

echo "Tarix: $date il<br />\n";

Diqqət yetirin! İstənilən dəyişənin $ işarəsi ilə başlaması onu interpretatorun yazının istənilən yerində $date əvəzinə yerləşdirməsinə imkan verir (istənilən yazının, yəni bu yazının echo-un parametri olması vacib deyil). Əslində echo konstruksiyasının parametrlərinin sayı məhtud olmadığından bu sətiri belə də yazmaq olar:

echo "Tarix:", $date, "il<br />\n";

və ya yazıları birləşdirmək üçün . əməlindən istifadə etməklə belə yaza bilərik:

echo "Tarix:" . $date . "il<br />\n";

Yeri gəlmişkən, yazıların konkatenasiyası üçün niyə məsələn + işarəsi yox məhz nöqtə – . istifadə edilməsi sualına sadə bir misalla cavab vermək olar:

$a = "100";
$b = "200";
echo $a + $b; // nəticə "300" 
echo $a . $b; // nəticə "100200" 

Görünür ki, + məhz rəqəmlərlə, . isə yazı ilə işləyən operator kimi istifadə edilir. Operatorların tətbiqində nyüansları növbəti mövzularda aydınlaşdırcağıq.

Dəyişənlərin yazı daxilinə birbaşa “daxil edilməsinə” aid növbəti nümunə:

$path = "/home/site/public_html"; $name = "script"; $ext = "php";
$fullPath = "$path/$name.$ext";

Belə yazılış aşağıdakı kimi yazılışdan daha “gözəl” görsənir:

$path = "/home/site/public_html"; $name = "script"; $ext = "php";
$fullPath = $path . "/" . $name . "." . $ext;

Perl terminləri ilə desək, cüt dırnaq – "" işarələri arasında yazılmış yazı daxilindəki dəyişənlər interpretasiya edilir, yəni genişlənir. PHP-də yazıları təsfir etməyin başqa üsulu da var. Bu apastrof işarələri – '' arasındakı yazılardır. Bu işarələrin daxilində dəyişənlər interpretasiya edilmir.

Beləliklə demək olar ki, skriptimizin əsas hissəsinə – ilk 5 natural ədədin kvadrat və kubunu tapan “unikal” alqoritmə çatdıq. Həmin hissə aşağıdakı kimidir:

for ($i = l; $i <= 5; $i++) { 
   echo "<li>$i kvadratı = " . ($i * $i); 
   echo ", $i kubu = " . ($i * $i * $i) . "</li>\n"; 
}

Birinci sətirdə for dövr operatoru müəyyən edilib. $i sayğacdır, ona başlanğıc olaraq 1 mənimsədilib və altıya çatana qədər hər addımda vahid qədər artır, inkrementasiya edir. Sonra kvadrat və kubu çap edən blok gəlir. Biz bilərkdən bu nümunədə çap etmək əməlini bir sətirdə yox iki sətirdə yazmışıq. Burda məqsəd PHP-də də C və bənzər dillərdəki kimi bir neçə operatoru fiqurlu mötərizə daxilində qruplaşdırıb yuxarıdakı kimi bir mürəkkəb operator – tərkib operator şəklinə gətirmək mümkün olduğunu göstərməkdir.

Nəhayət, bütün bunlardan sonra PHP-in bağlayan ?> teqi, sonra səhifəni sona yetirən adi HTML-teqlər gəlir.

Yazdığımız skriptin işləməsi nəticəsində aşağıdakı kimi HTML-kod əmələ gələcək:

<!DOCTYPE html>
<html lang='az'>
<head>
    <title>Sadə PHP skript</title>
    <meta charset='utf-8'>
</head>
<body>
<p>
    Tarix: 07.11 17 il<br />
    Saat: 12:23:27<br />
    İlk 5 natural ədədlərin kvadrat və kubları:<br />
    <ul>
        <li>1 kvadratı = 1, 1 kubu = 1</li>
        <li>2 kvadratı = 4, 2 kubu = 8</li>
        <li>3 kvadratı = 9, 3 kubu = 27</li>
        <li>4 kvadratı = 16, 4 kubu = 64</li>
        <li>5 kvadratı = 25, 5 kubu = 125</li>
    </ul>
</p>
</body>
</html>

Gördüyünüz kimi, skript yazılmış hissələrin nəticələri mətnin <?php?> işarələrindən kənarda olan hissələri ilə birləşdirilib. PHP-in əsas gücü məhz buna, kodun mətnin daxilinə asanlıqla daxil edilməsinə əsaslanıb.

Skripti ayıran <?..?><?php...?> teqləri eyni hüquqa malikdir. Ancaq nəzərə almaq lazımdır ki “qısaldılmış” <?..?> teqlərinin işləməsi üçün PHP-in php.ini konfiqurasiya faylında short_open_tag  opsiyası qoşulmuş olmalıdır (susmaya görə qoşulmamış olur).  Qısaldılmış teqlər köhnəlmiş hesab edilir və onlardan istifadə etmək məsləhət görülmür.

HTML forma nədir və nə üçün lazımdır

Beləliklə gördük ki, brauzerlə skript arasında məlumat mübadiləsinin ən məşhur metodları GETPOST-dur. Ancaq bir məsələ var ki, parametrlər sətrini əllə formalaşdırmaq, onları URL-kodlaşdırmaya çevirmək çox cansıxıcıdır.  Gəlin bu məsələdə HTML dilinin işi necə asanlaşdırdığını araşdıraq.

Əvvəlcə GET metoduna baxaq. Sadə istifadəçinin ?, &, % … işarələri və s. ilə parametrləri URL-də əllə yığmaq istədiyini təsəvvür edin. Bu hətta proqramçılar üçün də çox narahat ola bilər. Xoşbəxtlikdən bu məsələnin həlli üçün HTML dilinin bütün brauzerlər tərəfindən başa düşülən rahat imkanları var.

Fərz edək ki, bizim serverdə əsas kataloqda script.php skriptimiz var və qəbul edək ki, bu skript iki parametr – nameborn parametrlərini qəbul edir və brauzerdə  http://site.com/script.php adresinə keçəndə skript aşağıdakı HTML-səhifəni hazırlayıb çap etməlidir:

<!DOCTYPE html>
<html lang="az">
<body>
Salam, name! Mən bilirəm ki, siz born tarixində anadan olmusunuz!
</body>
</html>

Aydındır ki səhifənin generasiyası zamanı name və born skriptə ötürülən uyğun qiymətlərlə əvəz ediməlidir.

Parametrlərin əllə ötürlməsi

Gəlin parametrləri birbaşa URL-də parametrlər sətrində daxil edək. Beləliklə, brauzerdə
http://site.com/script.php?name=Anar&born=09-03-1986
skriptini işə salsaq bizə lazım olan nəticədə səhifəni əldə etmiş olarıq:

<!DOCTYPE html><html lang="az"><body>
Salam, Anar! Mən bilirəm ki, siz 09-03-1986 tarixində anadan olmusunuz!
</body></html>

Diqqət yetirin ki, parametrləri ampersand (&) işarəsi ilə ayırırıq və həmçinin bərabərdir işarəsi (=) istifadə edirik. Bunun niyə belə olduğu aşağıda izah ediləcək.

Formadan istifadə edilməsi

İsitfadəçinin adını və anadan olma tarixini rahat daxil etməsi üçün nə etmək olar? Görünür ki, brauzerdə Windows-un dialoq pəncərəsinə bənzər qrafik interfeys hazırlamaq lazımdır. Bunun üçün bizə dialoqun elementləri ilə – məlumatı daxil etmək üçün xanalar və klik etdikdə serverdəki skripti işə salacaq düymə – button – ibarət HTML-səhifə lazımdır. Səhifə adını index.html qoyaq. Səhifənin HTML kodu aşağıdakı kimi olacaq:

<!DOCTYPE html>
<html lang="az">
    <head>
       <title>Forma səhifəsi</title>
       <meta charset="utf-8">
    </head>
    <body>
       <form action="script.php" method="GET">
          Adınızı daxil edin:
          <input type="text" name="name" value="Naməlum"><br>
          Anadan olma tarixini daxil edin:
          <input type="text" name="born" value="Naməlum"><br>
          <input type="submit" name="Göndər">
       </form>
    </body>
</html>

HTML-səhifəni serverə yükləyib brauzerdə açsaq aşağıdakı şəkildəki kimi səhifə açıldığını görərik:

HTML formadan istifadə

Artıq, name xanasına öz adınızı, tarix yerinə anadan olma tarixinizi yazıb Göndər düyməsinə klik etsəniz brauzer <form> teqinin action atributunda qeyd edilmiş URL-dəki skriptə – http://site.com/script.php skriptinə müraciət edəcək.

Forma <input> teqlərinə daxil edilmiş bütün parametrləri ? işarəsindən sonra bir-birindən ampersandla (&) ayıraraq skriptin ötürəcək. Xanaların adları qiymətlərindən bərabər (=) işarəsi ilə ayrılacaq. Artıq mövzunun əvvəlində niyə bu simvollardan istifadə etdiyimizi yəqin ki başa düşürsünüz.

Beləliklə brauzerin skripti işə salmaq üçün formalaşdırdığı URL aşağıdakı kimi olacaq (qəbul edilmişdir ki, formanı 23.05.1986 təvəllüdlü Tural adlı istifadəçi doldurub):
http://site.com/script.php?name=Tural&born=23-05-1989

POST metodu və formalar

İndi elə etmək lazımdır ki, məlumatlar GET-lə yox POST-la göndərilsin. Bunun üçün method=”GET”  yerinə method=”POST” yazmaq lazımdır. Digər heç bir dəyişkliyə ehtiyac yoxdur.

Qeyd etmək lazımdır ki, <form> teqində method atributu qeyd edilməyibsə, susmaya görə GET metodunun nəzərdə tutulduğu qəbul edilir.

Beləliklə artıq, istifadəçini skriptin adı, onun parametrləri və s. kimi informasiyalarla yormağa ehtiyac qalmır. Onun işi yalnız formanın xanaları, radio və ya checkbutton, link-keçidlər və s. ilə olacaq.

Yuxarıda göstərilən misallarda əslində sadəlik baxımından hər şey elə də ürəkaçan görsənmir. Belə ki, skript bir dənədir, ümumi fayllar isə iki ədəddir (forma yerləşmiş fayl və skript faylı). Bu məsələnin praktikada çox yerdə istifadə edilən sadə həll üsulu var. Skript əvvəlcə işə salınanda ona parametrlərin ötürülüb ötürülmədiyini yoxlayır. Əgər parametrlər yoxdursa skript istifadəçiyə forma yerləşdirilmiş HTML-səhifəni, parametrlər göndərilibsə gördüyü işin nəticəsini qaytarır. Bu həm də ona görə rahatdır ki, bu üsulla istifadəçidən məlumatları məsələn, adını mütləq daxil etməsini təkidlə istəmək olar. Yəni əgər istifadəçi məlumatı daxil etməyi unudarsa ona adı daxil etmək üçün olan xanının qarşısında “Zəhmət olmasa, adınızı daxil edin.” yazısı ilə elə həmən forma qaytarılacaq.

Ümumiyyətlə HTML dili ilə, xüsusi ilə də formalarla əlaqəli bütün teq – elemetnlərə nəzər salmağınız, hansının nə xüsusiyyətə malik olduğunu araşdırmağınız düzgün olar. Növbəti mövzuda HTML dilinin dərinliklərinə demək olar ki, çox az yer veriləcək və daha çox PHP skript dilində proqramlaşdırmaya aid mövzulara toxunulacaq.

HTML səhifə

HTML səhifə – İnternetdə ünvanlı, Veb-serverə müraciətlə əldə edilmiş, World Wide Web servisinin brauzerdə təsfir edilə bilinən yazı (mətn) məlumat vahididir. Buna çox hallarda Veb səhifə də deyilir. Bəzən, səhifə ayrıca HTML fayl kimi də ola bilir, ancaq son vaxtlar bu kimi səhifələrin sayı getdikcə azalır. Çox vaxt HTML səhifələr “iş zamanı” hər hansı proqram tərəfindən dinamik olaraq generasiya edilir və həmən andaca istifadəçiyə ötürülür. HTML səhifə adi mənada HTML fayl kimi olmaya da bilər. Buna istifadəçi özü mətn yerləşdirə bilən rəy, kommentariya sistemini misal göstərmək olar.

Adətən, sadə HTML faylın oxunması ilə əldə edilən səhifələr statik veb səhifələr adlanır. Proqramın işə salınması ilə əldə edilən səhifələr isə dinamik veb səhifələr adlanır.

HTML dili (Hypertext Markup Language) səhifəyə digər səhifələrə link – keçidlər yerləşdirməyə imkan verir. İstifadəçi bu linklərin uyğun sahəsinə mausla klik edərək bu və ya digər sənədə keçid etmiş olur.