Упатство:Први чекори во PHP: Разлика помеѓу преработките

Од Сподели wiki
Прејди на прегледникот Прејди на пребарувањето
Нема опис на уредувањето
 
с (84 ревизии: initial)
 
(Не се прикажани 83 меѓувремени преработки од 7 корисници)
Ред 22: Ред 22:
Пред да почнеме со пишување, неколку едноставни правила. Секоја линија во PHP код, мора да завршува со точка-запирка. Ако парсерот на PHP јазикот не пронајде точка-запирка, ќе продолжи да го парсира кодот се додека не наиде на една. Тогаш се јавува грешка. Наредбите со повеќе редови како условните наредби, мора да содржат { и }. Дуплите коси црти значат дека после нив следува коментар до крајот на линијата
Пред да почнеме со пишување, неколку едноставни правила. Секоја линија во PHP код, мора да завршува со точка-запирка. Ако парсерот на PHP јазикот не пронајде точка-запирка, ќе продолжи да го парсира кодот се додека не наиде на една. Тогаш се јавува грешка. Наредбите со повеќе редови како условните наредби, мора да содржат { и }. Дуплите коси црти значат дека после нив следува коментар до крајот на линијата
PHP страните, обично содржат HTML тагови и PHP код. PHP блок секогаш почнува со <?php и завршува со ?>. Блокот може да биде секаде низ документот. Овој код печати текст во web прелистувачот. Има две основни команди за печатење текст во прелистувачот: echo и print. Во овој пример е користена командатa echo.
PHP страните, обично содржат HTML тагови и PHP код. PHP блок секогаш почнува со <?php и завршува со ?>. Блокот може да биде секаде низ документот. Овој код печати текст во web прелистувачот. Има две основни команди за печатење текст во прелистувачот: echo и print. Во овој пример е користена командатa echo.
<?php
 
echo “Everyone, smile!!!; //ova e delot sto se pecati
    <?php
?>
        echo "Everyone, smile!!!"; //ova e delot sto se pecati
Запаметете дека секогаш овие датотеки се снимаат со екстензија .php – ова е важно зошто тоа му кажува на серверот како да ги третира датотеките кои ги вклучува и да го повика соодветниот интерпретер. Снимајте ја оваа датотека со некое едноставно име, на пр. “first.php” и ставете ја во root локацијата на web серверот. Откако ќе ја копирате, побарајте ја оваа адреса од web прелистувач. Во полето за адреса внесете http://localhost/first.php.  
    ?>
 
Запаметете дека секогаш овие датотеки се снимаат со екстензија .php – ова е важно зошто тоа му кажува на серверот како да ги третира датотеките кои ги вклучува и да го повика соодветниот интерпретер. Снимајте ја оваа датотека со некое едноставно име, на пр. "first.php" и ставете ја во root локацијата на web серверот. Откако ќе ја копирате, побарајте ја оваа адреса од web прелистувач. Во полето за адреса внесете http://localhost/first.php.  
Ако се функционира како што треба, во прелистувачот ќе се отвори страна со текст Everybody smile!!!. Ако не е инсталиран php или ако серверот не ја препознае екстензијата, ќе го видите кодот на скриптата.
Ако се функционира како што треба, во прелистувачот ќе се отвори страна со текст Everybody smile!!!. Ако не е инсталиран php или ако серверот не ја препознае екстензијата, ќе го видите кодот на скриптата.
Првата скрипта е само PHP код. Него можете да го вклучите во HTML на овој начин:
Првата скрипта е само PHP код. Него можете да го вклучите во HTML на овој начин:
<html>
 
<head>
    <html>
<title>Prva PHP skripta</title>
    <head>
</head>
    <title>Prva PHP skripta</title>
<body>
    </head>
<?php echo "<b>Everybody smile!!!</b>"; ?> // ova e delot sto se pecati
    <body>
</body>
        <?php echo "<b>Everybody smile!!!</b>"; ?> // ova e delot sto se pecati
</html>
    </body>
    </html>
 
Излезот и од двете скрипти ќе биде сличен, со разлика што во втората ќе постои наслов и текстот ќе биде bold.  
Излезот и од двете скрипти ќе биде сличен, со разлика што во втората ќе постои наслов и текстот ќе биде bold.  
Напомена: Ако го погледнете изворниот код на страната преку web прелистувачот, ќе видите дека цел PHP код е скриен и се што постои е HTML. Целиот PHP код е обработен пред да дојде до корисничко ниво.  
Напомена: Ако го погледнете изворниот код на страната преку web прелистувачот, ќе видите дека цел PHP код е скриен и се што постои е HTML. Целиот PHP код е обработен пред да дојде до корисничко ниво.  
Ред 41: Ред 45:
==PHP променливи==
==PHP променливи==
Променливите чуваат некоја вредност од одреден тип податоци. Може да чуваат броеви, текст, вредности за точно или неточно, објекти, ресурси или да бидат null (без податоци). Во PHP, сите променливи почнуваат со $ и вредност може да се додаде со операторот =. Знакот $ не е технички дел на променливата, но потребен за PHP парсерот да може да го препознае како променлива.
Променливите чуваат некоја вредност од одреден тип податоци. Може да чуваат броеви, текст, вредности за точно или неточно, објекти, ресурси или да бидат null (без податоци). Во PHP, сите променливи почнуваат со $ и вредност може да се додаде со операторот =. Знакот $ не е технички дел на променливата, но потребен за PHP парсерот да може да го препознае како променлива.
Друга важна работа во PHP е тоа што сите наредби мора да завршуваат со „;. Во PHP нема потреба да се најави типот на променливата, туку тој го препознава според вредноста што и е дадена на таа променлива.  
Друга важна работа во PHP е тоа што сите наредби мора да завршуваат со „;". Во PHP нема потреба да се најави типот на променливата, туку тој го препознава според вредноста што и е дадена на таа променлива.  
Еве мал код за правење променлива и давање вредност:
Еве мал код за правење променлива и давање вредност:
<?php
 
$tekst = “Бла бла бла :) ;
    <?php
$broj = 14;
        $tekst = "Бла бла бла :) ";
echo $tekst;
        $broj = 14;
echo $broj;
        echo $tekst;
?>
        echo $broj;
    ?>
 
Излезот од оваа скрипта е: Бла бла бла :) 14
Излезот од оваа скрипта е: Бла бла бла :) 14


==Разлики во голема и мала буква==
===Разлики во голема и мала буква===
Една работа што може да предизвика многу проблеми и да одземе часови барање грешка е разликата што ја прави PHP меѓу голема и мала буква. Еве пример:
Една работа што може да предизвика многу проблеми и да одземе часови барање грешка е разликата што ја прави PHP меѓу голема и мала буква. Еве пример:
<?php
$promenliva = “Прва променлива”;
  <?php
$Promenliva = “Втора променлива”;
        $promenliva = "Прва променлива";
echo $promenliva - $Promenliva”;`
        $Promenliva = "Втора променлива";
?>
        echo "$promenliva - $Promenliva";`
    ?>
 
Излезот од ова е: Прва променлива - Втора променлива
Излезот од ова е: Прва променлива - Втора променлива


==Правила за променливи==
===Правила за променливи===
1. PHP променивите мора да почнуваат со буква или со долна црта „_“.
1. PHP променивите мора да почнуваат со буква или со долна црта „_".
2. Тие мора да бидат составени само од алфа-нумерички карактери и долни црти
2. Тие мора да бидат составени само од алфа-нумерички карактери и долни црти
3. Променливите со повеќе од еден збор се поделуваат со долна црта
3. Променливите со повеќе од еден збор се поделуваат со долна црта
Ред 68: Ред 76:
Друга важна работа да се напомене е дека нема лимит на големината на променливите.
Друга важна работа да се напомене е дека нема лимит на големината на променливите.


==Резервирани променливи==
===Резервирани променливи===
Покрај обичните променливите кои ги креира самиот програмер, постојат променливи кои се вградени во јазикот. Тие се запамтени како низи и до нив може да се пристапи со индекс на позицијата како име за променливите. Еве некои од овие резервирани променливи:  
Покрај обичните променливите кои ги креира самиот програмер, постојат променливи кои се вградени во јазикот. Тие се запамтени како низи и до нив може да се пристапи со индекс на позицијата како име за променливите. Еве некои од овие резервирани променливи:  
$_SERVER – содржи информации за серверот и HTTP конекцијата.  
$_SERVER – содржи информации за серверот и HTTP конекцијата.  
Ред 78: Ред 86:


Еве пример за присапување до овие променливи:
Еве пример за присапување до овие променливи:
<?php
    <?php
$novaPromenliva = $_COOKIE[“moetoPrvoKolace”];
        $novaPromenliva = $_COOKIE["moetoPrvoKolace"];
echo $novaPromenliva;
        echo $novaPromenliva;
?>
    ?>


==PHP константи==
==PHP константи==
Константите исто како променливите се користат за чување податоци. Главна разлика меѓу нив е тоа што вредностите на константите не може да се менуваат. Тие може да бидат математички константи, шифри, патеки до датотеки... Со користење на константи Вие ја „заклучувате“ одредена вредност, со што таа е заштитена од промени. Не мора да барате низ целата програма за да ја промените нејзината вредност, туку само ја менувате на почетокот од програмата.  
Константите исто како променливите се користат за чување податоци. Главна разлика меѓу нив е тоа што вредностите на константите не може да се менуваат. Тие може да бидат математички константи, шифри, патеки до датотеки... Со користење на константи Вие ја „заклучувате" одредена вредност, со што таа е заштитена од промени. Не мора да барате низ целата програма за да ја промените нејзината вредност, туку само ја менувате на почетокот од програмата.  
Еве еден пример:
Еве еден пример:
<?php
    <?php
define(“PASSWORD”, “admin”);
        define("PASSWORD", "admin");
echo (PASSWORD); //ke ja prikaze vrednosta na promenlivata PASSWORD “admin”
        echo (PASSWORD); //ke ja prikaze vrednosta na promenlivata PASSWORD "admin"
echo constant(“PASSWORD”); //isto ke otpecati “admin”
        echo constant("PASSWORD"); //isto ke otpecati "admin"
echo “PASSWORD”; //ke prikaze “PASSWORD”
        echo "PASSWORD"; //ke prikaze "PASSWORD"
?>
    ?>
PHP обезбедува неколку вградени константи за програмерите. Пр. “_FILE_” го дава името на датотеката од која моментално интерпретерот чита. “_LINE_” ја враќа линијата во таа датотека. Овие константи се корисни за генерирање текстуални пораки со грешки. За верзијата на интерпретерот податоци може да се најдат во “PHP_VERSION” константата.  
PHP обезбедува неколку вградени константи за програмерите. Пр. "_FILE_" го дава името на датотеката од која моментално интерпретерот чита. "_LINE_" ја враќа линијата во таа датотека. Овие константи се корисни за генерирање текстуални пораки со грешки. За верзијата на интерпретерот податоци може да се најдат во "PHP_VERSION" константата.  


==PHP низи==
==PHP низи==
Ред 100: Ред 108:
==Индексни низи==
==Индексни низи==
Пр.  
Пр.  
<?php
    <?php
$sedum = 7;
        $sedum = 7;
$imeNaNiza = array(“ova e element”, 5, $sedum);
        $imeNaNiza = array("ova e element", 5, $sedum);
echo $imeNaNiza[0]; //ova ke otpecati: ova e element
        echo $imeNaNiza[0]; //ova ke otpecati: ova e element
echo $imeNaNiza[1]; //ova: 5
        echo $imeNaNiza[1]; //ova: 5
echo $imeNaNiza[2]; //ova: 7
        echo $imeNaNiza[2]; //ova: 7
?>
    ?>
Како што можете да видите елементите во низата може да бидат било кој тип податок, како и променливи. Дозволено е во една низа, некој елемент да биде повторно низа. Ако сакате да проверете дали една променлива е низа може да се користи функцијата is_array(). Забележувате дека индексните низи почнуваат со индекс 0.  
Како што можете да видите елементите во низата може да бидат било кој тип податок, како и променливи. Дозволено е во една низа, некој елемент да биде повторно низа. Ако сакате да проверете дали една променлива е низа може да се користи функцијата is_array(). Забележувате дека индексните низи почнуваат со индекс 0.  


==Aсоцијативни низи==
==Aсоцијативни низи==
Асоцијативните низи користат клучеви за пристап до своите елементи. Пр.
Асоцијативните низи користат клучеви за пристап до своите елементи. Пр.
<?php
    <?php
$prva_niza = array (“kluc1” => “prviot element”, “kluc2” => “vtoriot element”);
        $prva_niza = array ("kluc1" => "prviot element", "kluc2" => "vtoriot element");
$vtora_niza = array(
        $vtora_niza = array(
“kluc3” => “prv element vo vtorata niza”,
                    "kluc3" => "prv element vo vtorata niza",
“kluc4” => “vtor element vo vtorata niza”
                    "kluc4" => "vtor element vo vtorata niza"
);
            );
echo $prva_niza[‘kluc1’]; //”prviot element”
        echo $prva_niza['kluc1']; //"prviot element"
echo $prva_niza[‘kluc2’]; //”vtoriot element”
        echo $prva_niza['kluc2']; //"vtoriot element"
echo $vtora_niza[‘kluc3’]; //“prv element vo vtorata niza”
        echo $vtora_niza['kluc3']; //"prv element vo vtorata niza"
echo $vtora_niza[‘kluc4’]; //“vtor element vo vtorata niza”
        echo $vtora_niza['kluc4']; //"vtor element vo vtorata niza"
?>
    ?>


Уште еден пример за користење асоцијативни низи:
Уште еден пример за користење асоцијативни низи:
<?php
    <?php
$cokolado = array (
        $cokolado = array (
“nestle” => “50”,
            "nestle" => "50",
“milka” => “60”,
            "milka" => "60",
“kandi” => “10”
            "kandi" => "10"
);
        );
echo “nestle kosta $cokolado[‘nestle’], milka kosta $cokolado[‘milka’], a kandi mnjam mnjam $cokolado[‘kandi’].;
        echo "nestle kosta $cokolado['nestle'], milka kosta $cokolado['milka'], a kandi mnjam mnjam $cokolado['kandi'].";
?>
    ?>
Бидејќи индексите во асоцијативните низи не се броеви, ние не можеме да користиме едноставни бројачи во циклус за едноставно минување низ целата низа. Затоа со нив може да користите foreach за да итерирате низ целата низа. Еве како ќе ги прочитаме сите податоци и ќе ги внесеме во табела:
Бидејќи индексите во асоцијативните низи не се броеви, ние не можеме да користиме едноставни бројачи во циклус за едноставно минување низ целата низа. Затоа со нив може да користите foreach за да итерирате низ целата низа. Еве како ќе ги прочитаме сите податоци и ќе ги внесеме во табела:


<?php
    <?php
$cokolado = array (
        $cokolado = array (
“nestle” => “50”,
            "nestle" => "50",
“milka” => “60”,
            "milka" => "60",
“kandi” => “10”
            "kandi" => "10"
);
        );
//za pecatenje naslov na tabelata
        //za pecatenje naslov na tabelata
echo <table border=’1’ cellpadding = ‘5’>;
            <nowiki>echo "<table border='1' cellpadding = '5'>";
echo <tr><th>Cokolado</th><tr>;
                    echo "<tr><th>Cokolado</th><tr>";</nowiki>
//ova e toa sto ke pomine niz celata niza, zemajki go $Cokolado kako kluc i $Cena kako vrednost
        //ova e toa sto ke pomine niz celata niza, zemajki go $Cokolado kako kluc i $Cena kako vrednost
foreach($cokolado as $Cokolado => $Cena)
        foreach($cokolado as $Cokolado => $Cena)
{
        {
echo <tr><td>$Cokolado </td><td>$Cena</td></tr>;
              <nowiki> echo "<tr><td>$Cokolado </td><td>$Cena</td></tr>";</nowiki>
}
        }
echo </table>
        echo </table>
?>
    ?>


==Како да подредите низа==
==Како да подредите низа==
Ред 156: Ред 164:
Сортирање нумерички индексирани низи
Сортирање нумерички индексирани низи
Постои низа со текстуални променливи (string)  
Постои низа со текстуални променливи (string)  
<?php
    <?php
$flowers = array(“rose”, “daisy”, “orchid”, “tulip”, “chamomile”);
        $flowers = array("rose", "daisy", "orchid", "tulip", "chamomile");
sort($flowers);
        sort($flowers);
for ($i = 0; $i < 4; $i++) // da se otpecatat elementite
        for ($i = 0; $i < 4; $i++) // da se otpecatat elementite
echo $flowers[$i].<br />;
            <nowiki>echo $flowers[$i]."<br />"</nowiki>;
?>
    ?>
Во овој случај елементите ќе бидат потредени во алфабетски редослед. Излезот би бил:
Во овој случај елементите ќе бидат потредени во алфабетски редослед. Излезот би бил:
camomile
camomile
Ред 168: Ред 176:
rose
rose
tulip
tulip
Можете да ги сортирате низите и во нумерички редослед. Ако имате низа која пр. ги содржи цените на цвеќињата, може да се сортираат во растечки редослед. Пр.:
Можете да ги сортирате низите и во нумерички редослед. Ако имате низа која пр. ги содржи цените на цвеќињата, може да се сортираат во растечки редослед. Пр.:
<?php
    <?php
$prices = array(1.25, 0.75 , 1.15, 1.00, 0.50);
        $prices = array(1.25, 0.75 , 1.15, 1.00, 0.50);
sort($prices);
        sort($prices);
for($i = 0; $i <= 4; $i++)
        for($i = 0; $i <= 4; $i++)
echo $prices[$i].<br />;
            <nowiki>echo $prices[$i]."<br />";</nowiki>
?>
        ?>
Излезот е следен:
Излезот е следен:
0.75
0.75
Ред 181: Ред 190:
1.25
1.25


Да спомнеме дека во сортирањето на низите, важно е дали буквите се пишувани со голема или мала буква. Така, “A” е помало од “Z”, a “Z” е помало од “a”.
Да спомнеме дека во сортирањето на низите, важно е дали буквите се пишувани со голема или мала буква. Така, "A" е помало од "Z", a "Z" е помало од "a".


Сортирање асоцијативни низи
===Сортирање асоцијативни низи===
Ако користите асоцијативни низи, не може да се користи sort() за да се подредат. Ако користите sort() на асоцијативна низа, таа се подредува по нумеричките вредности на нејзиниот индекс. Затоа се користи asort() функцијата, за клучевите и вредностите да останат поврзани заедно.
Ако користите асоцијативни низи, не може да се користи sort() за да се подредат. Ако користите sort() на асоцијативна низа, таа се подредува по нумеричките вредности на нејзиниот индекс. Затоа се користи asort() функцијата, за клучевите и вредностите да останат поврзани заедно.
Следниот код креира асоцијативна низа која содржи вредности за три цвеќиња и нивните цени. Потоа ги подредува во растечки редослед, според цената.
Следниот код креира асоцијативна низа која содржи вредности за три цвеќиња и нивните цени. Потоа ги подредува во растечки редослед, според цената.
<?php
    <nowiki><?php
$shop = array (“rose” => “5.00”,
        $shop = array ("rose" => "5.00",
“daisy” => “4.00”,
                "daisy" => "4.00",
“orchid” => “2.00”,
"orchid" => "2.00",</nowiki>
);
);
asort($shop);
        asort($shop);
foreach($shop as $key => $value)
        foreach($shop as $key => $value)
echo $key.costs .$value.dollars<br />;
            <nowiki>echo $key." costs ".$value." dollars<br />";</nowiki>
?>
    ?></nowiki>
Овој код ќе отпечати:
Овој код ќе отпечати:
orchid costs 2.00 dollars
orchid costs 2.00 dollars
Ред 203: Ред 212:
Ако, на пр., сакате да ги сортирате според клучевите, се користи функцијата ksort().
Ако, на пр., сакате да ги сортирате според клучевите, се користи функцијата ksort().
Следниов код ќе даде подредена низа според клучевите:
Следниов код ќе даде подредена низа според клучевите:
<?php
    <?php
$shop = array (“rose” => “5.00”,
        $shop = array ("rose" => "5.00",
“daisy” => “4.00”,
            <nowiki>"daisy" => "4.00",</nowiki>
“ orchid” => “2.00”
" orchid" => "2.00"
);
);
ksort($shop);
        ksort($shop);
foreach($shop as $key => $value)
        foreach($shop as $key => $value)
echo $key.costs .$value.dollars<br />;
            <nowiki>echo $key." costs ".$value." dollars<br />";</nowiki>
?>
    ?>
Излезот:
Излезот:
daisy costs 4.00 dollars
daisy costs 4.00 dollars
Ред 233: Ред 242:


Да зачувате вредности во мулти-димензионална низа, се користи нешто како овој код:
Да зачувате вредности во мулти-димензионална низа, се користи нешто како овој код:
<?php
    <?php
$shop = array (“rose”, 1.25, 15),
        $shop = array ("rose", 1.25, 15),
  array (“daisy”, 0.75, 25),
            array ("daisy", 0.75, 25),
  array (“orchid”, 1.15, 7)
            array ("orchid", 1.15, 7)
);
        );
?>
    ?>
Овој код покажува дека променливата $shop, сега содржи три низи. За да добиете вредности од едно-димензионална низа, треба да го кажете името на низата и индексот. Истото е потребно и за дво-димензионалните низи, со една разлика: секој елемент има два индекси, ред и колона.
Овој код покажува дека променливата $shop, сега содржи три низи. За да добиете вредности од едно-димензионална низа, треба да го кажете името на низата и индексот. Истото е потребно и за дво-димензионалните низи, со една разлика: секој елемент има два индекси, ред и колона.
За да ги прикажете елементите од оваа низа, може да користите for внатре во for, вгнездени циклуси.
За да ги прикажете елементите од оваа низа, може да користите for внатре во for, вгнездени циклуси.
<?php
    <nowiki><?php
echo <h1>Pristap do sekoj element</h1>;
        echo "<h1>Pristap do sekoj element</h1>";
echo $shop[0][0].costs .$shop[0][1].and you get .$shop[0][2].<br />;
        echo $shop[0][0]." costs ".$shop[0][1]." and you get ".$shop[0][2]."<br />";
echo $shop[1][0].costs .$shop[1][1].and you get .$shop[1][2].<br />;
        echo $shop[1][0]." costs ".$shop[1][1]." and you get ".$shop[1][2]."<br />";
echo $shop[2][0].costs .$shop[2][1].and you get .$shop[2][2].<br />;
        echo $shop[2][0]." costs ".$shop[2][1]." and you get ".$shop[2][2]."<br />";
echo <ol>;
        echo "<ol>";
for ($row = 0; $row < 3; $row++)
        for ($row = 0; $row < 3; $row++)
{
        {
echo <ul>;
        echo "<ul>";
for ($col = 0; $col < 3; $col++)
        for ($col = 0; $col < 3; $col++)
{
        {
echo <li>.$shop[$row][$col].</li>;
        echo "<li>".$shop[$row][$col]."</li>";
}
        }
echo </ul>;
        echo "</ul>";
echo </li>;
        echo "</li>";
}
        }
echo </ol>;
        echo "</ol>";
?>
    ?></nowiki>


Наместо користење на индексите за број на колона, може да се користат нивните имиња. За ова се користат асоцијативни низи. Следниот код, ќе ја направи истата низа, користејќи имиња за колоните.
Наместо користење на индексите за број на колона, може да се користат нивните имиња. За ова се користат асоцијативни низи. Следниот код, ќе ја направи истата низа, користејќи имиња за колоните.
<?php  
    <?php  
$shop = array( array( Title => "rose",
        $shop = array( array( Title => "rose",
                       Price => 1.25,
                       Price => 1.25,
                       Number => 15  
                       Number => 15  
Ред 275: Ред 284:
                     )
                     )
             );
             );
?>
    ?>
Полесно е да се работи со овие низи, во случај да треба да добиете една вредност од неа. Потребниот податок лесно се пронаоѓа ако го побарате со точното име на ред и колона. Меѓутоа се губи можноста да се поминува целата низа со едноставен for.
Полесно е да се работи со овие низи, во случај да треба да добиете една вредност од неа. Потребниот податок лесно се пронаоѓа ако го побарате со точното име на ред и колона. Меѓутоа се губи можноста да се поминува целата низа со едноставен for.
Еве еден начин на кој може да се помине целата низа:
Еве еден начин на кој може да се помине целата низа:
<?php  
    <nowiki><?php  
echo "<h1>Manual access to each element from associative array</h1>";
        echo "<h1>Manual access to each element from associative array</h1>";
        for ($row = 0; $row < 3; $row++)
        {
            echo $shop[$row]["Title"]." costs ".$shop[$row]["Price"]." and you get ".$shop[$row]["Number"];
            echo "<br />";
        }


for ($row = 0; $row < 3; $row++)
        echo "<h1>Using foreach loop to display elements</h1>";
{
        echo "<ol>";
    echo $shop[$row]["Title"]." costs ".$shop[$row]["Price"]." and you get ".$shop[$row]["Number"];
        for ($row = 0; $row < 3; $row++)
    echo "<br />";
        {
}
            echo "<li><b>The row number $row</b>";
 
            echo "<ul>";
echo "<h1>Using foreach loop to display elements</h1>";
            foreach($shop[$row] as $key => $value)
 
            {
echo "<ol>";
                echo "<li>".$value."</li>";
for ($row = 0; $row < 3; $row++)
            }
{
            echo "</ul>";
    echo "<li><b>The row number $row</b>";
            echo "</li>";
    echo "<ul>";
        }
 
        echo "</ol>";
    foreach($shop[$row] as $key => $value)
    ?></nowiki>
    {
        echo "<li>".$value."</li>";
    }
 
    echo "</ul>";
    echo "</li>";
}
echo "</ol>";
?>


===Три-димензионални низи===
===Три-димензионални низи===
Не мора да бидете ограничени на две-димензионални низи. И тие низи што се внатре може да содржат други низи. Три-димензионалните низи се карактеризираат со висина, ширина и длабочина. Ако можете да замислите две-димензионална низа како табела, пробајте да замислите повеќе такви табели една позади друга. Секој елемент би бил претставен со ниво, ред и колона.  
Не мора да бидете ограничени на две-димензионални низи. И тие низи што се внатре може да содржат други низи. Три-димензионалните низи се карактеризираат со висина, ширина и длабочина. Ако можете да замислите две-димензионална низа како табела, пробајте да замислите повеќе такви табели една позади друга. Секој елемент би бил претставен со ниво, ред и колона.  
Ако ги класифицираме цвеќињата во една продавница по категории, тогаш податоците за нив ќе треба да ги чуваме во три-димензионална низа. Еве како може тоа да се изврши:
Ако ги класифицираме цвеќињата во една продавница по категории, тогаш податоците за нив ќе треба да ги чуваме во три-димензионална низа. Еве како може тоа да се изврши:
$shop = array(array(array("rose", 1.25, 15),
    $shop = array(array(array("rose", 1.25, 15),
                     array("daisy", 0.75, 25),
                     array("daisy", 0.75, 25),
                     array("orchid", 1.15, 7)  
                     array("orchid", 1.15, 7)  
Ред 322: Ред 327:
                   )
                   )
             );
             );
?>
    ?>
Оваа низа има само нумерички индекси, па може да се користат вгнездени for циклуси за да се прикажат сите податоци:
Оваа низа има само нумерички индекси, па може да се користат вгнездени for циклуси за да се прикажат сите податоци:
<?php
    <nowiki><?php
echo "<ul>";
        echo "<ul>";
for ( $layer = 0; $layer < 3; $layer++ )
        for ( $layer = 0; $layer < 3; $layer++ )
{
    echo "<li>The layer number $layer";
    echo "<ul>";
 
    for ( $row = 0; $row < 3; $row++ )
    {
      echo "<li>The row number $row";
      echo "<ul>";
   
        for ( $col = 0; $col < 3; $col++ )
         {
         {
             echo "<li>".$shop[$layer][$row][$col]."</li>";
             echo "<li>The layer number $layer";
         }  
            echo "<ul>";
            for ( $row = 0; $row < 3; $row++ )
            {
              echo "<li>The row number $row";
              echo "<ul>";
              for ( $col = 0; $col < 3; $col++ )
              {
                  echo "<li>".$shop[$layer][$row][$col]."</li>";
              }
              echo "</ul>";
              echo "</li>";
            }
            echo "</ul>";
            echo "</li>";
         }  
         echo "</ul>";
         echo "</ul>";
        echo "</li>";
     ?></nowiki>
     }
    echo "</ul>";
    echo "</li>";
echo "</ul>";
?>
Овој начин на креирање низи, овозможува креирање на четири и пет-димензионални низи. Синтаксичките правила не го ограничуваат бројот на димензии.
Овој начин на креирање низи, овозможува креирање на четири и пет-димензионални низи. Синтаксичките правила не го ограничуваат бројот на димензии.


Ред 354: Ред 357:
===if…else===
===if…else===
На пример треба да се провери дали една променлива има вредност точно или неточно, дали некоја текстуална променлива го содржи одреден текст, дали објектот е празен или полн... Условот може да биде што и да е, што и да поставиме. Синтаксата на if структурата е:
На пример треба да се провери дали една променлива има вредност точно или неточно, дали некоја текстуална променлива го содржи одреден текст, дали објектот е празен или полн... Условот може да биде што и да е, што и да поставиме. Синтаксата на if структурата е:
if (услов) {
    if (услов) {
наредби1
    наредби1
} else {
    } else {
наредби2
    наредби2
}
    }


Пр.
Пр.
<?php
    <nowiki><?php
$rezultat = 70;
        $rezultat = 70;
if ($rezultat >= 57) {
        if ($rezultat >= 57) {
echo “Uslovot pomina kako token <br />;
            echo "Uslovot pomina kako token <br />";
}
        }
else {
        else {
echo “Uslovot ne pomina <br />;
          echo "Uslovot ne pomina <br />";
}
        }
?>
    ?></nowiki>
Следниот пример ќе покаже работа со elseif. Тоа се користи во сличаи кога треба за повеќе вредности да се прикажат различни резултати.
Следниот пример ќе покаже работа со elseif. Тоа се користи во сличаи кога треба за повеќе вредности да се прикажат различни резултати.
<?php
    <?php
$rezultat = 70;
        $rezultat = 70;
if ($rezultat >= 75) {
        if ($rezultat >= 75) {
echo “izlez 1”;
            echo "izlez 1";
}
        }
elseif ($rezultat >= 60) {
        elseif ($rezultat >= 60) {
echo “izlez 2”;
            echo "izlez 2";
}
        }
elseif($rezultat >= 45) {
        elseif($rezultat >= 45) {
echo “izlez 3”;
          echo "izlez 3";
}
        }
else {
        else {
echo “izlez 4”;
        echo "izlez 4";
}
        }
?>
    ?>
===Командата switch===
===Командата switch===
Оваа команда работи исто како if. Со неа се овозможува проверка за повеќе вредности што кај if e понепрегледно и побавно. Синтаксата за switch:
Оваа команда работи исто како if. Со неа се овозможува проверка за повеќе вредности што кај if e понепрегледно и побавно. Синтаксата за switch:
switch (израз) {
    switch (израз) {
  case случај 1:
      case случај 1:
      наредби_1
          наредби_1
      [break;]
          [break;]
  case случај_2:
      case случај_2:
      наредби_2
          наредби_2
      [break;]
          [break;]
  ...
      ...
  default:
      default:
    наредби_n
        наредби_n
    [break;]
        [break;]
}
    }


Програмата прво бара случај што се поклопува и потоа му ја предава контролата нему. Ги извршува наредбите што се дадени и излегува од switch. Ако не се пронајде случај кој се поклопува програмата бара default и ако постои ги извршува тие наредби. Ако не најде ни default програмата продолжува со работа без приказ од switch. break се користи за да се прекине автоматско поминување на следниот случај. Кога ќе се извршат наредбите од пронајдениот случај, програмата да продолжи со работа надвор од switch.  
Програмата прво бара случај што се поклопува и потоа му ја предава контролата нему. Ги извршува наредбите што се дадени и излегува од switch. Ако не се пронајде случај кој се поклопува програмата бара default и ако постои ги извршува тие наредби. Ако не најде ни default програмата продолжува со работа без приказ од switch. break се користи за да се прекине автоматско поминување на следниот случај. Кога ќе се извршат наредбите од пронајдениот случај, програмата да продолжи со работа надвор од switch.  
Пр.:
Пр.:
$flower = "rose";
    $flower = "rose";


switch ($cokolado)
    switch ($cokolado)
{
    {
  case "milka" :  
        case "milka" :  
    echo $cokolado." costs 60den.";
        echo $cokolado." costs 60den.";
    break;
        break;
  case "nestle" :  
        case "nestle" :  
    echo $cokolado." costs 50den.";
        echo $cokolado." costs 50den.";
    break;
        break;
  case "kandi" :  
        case "kandi" :  
    echo $cokolado." costs 10den";
        echo $cokolado." costs 10den";
    break;
        break;
  default :  
        default :  
    echo "Nema takvo cokolado vo prodavnicata :(";
        echo "Nema takvo cokolado vo prodavnicata :(";
    break;
        break;
}
    }


Може да се прават проверки со математички операции како поголемо, помало или еднакво:
Може да се прават проверки со математички операции како поголемо, помало или еднакво:
<?php
    <?php
$broj = 5;
        $broj = 5;
 
        switch ($broj) {
switch ($broj) {
        case 0:
  case 0:
            echo "Nula ne e validen slucaj.";
    echo "Nula ne e validen slucaj.";
            break;
    break;
        case $ broj < 0:
  case $ broj < 0:
            echo "Negativni broevi ne se dozvoleni.";
    echo "Negativni broevi ne se dozvoleni.";
            break;
    break;
        default:
  default:
            echo "Vnesen e pozitiven broj.";
    echo "Vnesen e pozitiven broj.";
        break;
    break;
        }
}
    ?>
?>
Откако ќе пронајде услов кој се исполнува PHP престанува со барање друг случај.  
Откако ќе пронајде услов кој се исполнува PHP престанува со барање друг случај.  


Ред 443: Ред 445:
===while===
===while===
Наредбата while извршува еден блок наредби, ако и додека еден услов е точен. Ако условот станува неточен, контролата се префрла на наредбата што следува после неа. Синтаксата е ваква:
Наредбата while извршува еден блок наредби, ако и додека еден услов е точен. Ако условот станува неточен, контролата се префрла на наредбата што следува после неа. Синтаксата е ваква:
while (condition)  
    while (condition)  
{
    {
  naredbi;
        naredbi;
}
    }
Блокот наредби кој е внатре во while циклусот секогаш е затворен со { и }. Овие загради му кажуваат на PHP кои наредби да ги повторува.  
Блокот наредби кој е внатре во while циклусот секогаш е затворен со { и }. Овие загради му кажуваат на PHP кои наредби да ги повторува.  
while се користи за работење со листи каде што не се знае точниот број на елементи во неа:
while се користи за работење со листи каде што не се знае точниот број на елементи во неа:
while (seuste ima redovi vo bazata)
    while (seuste ima redovi vo bazata)
{
    {
citaj od eden red;
    citaj od eden red;
pomini na sledniot red;
pomini na sledniot red;
}
    }
Следниот пример извршува циклус каде што почетната вредност е 0. Овој циклус ќе се повторува се додека i е помала или еднаква на 10, а ќе се зголемува на секој скок:
Следниот пример извршува циклус каде што почетната вредност е 0. Овој циклус ќе се повторува се додека i е помала или еднаква на 10, а ќе се зголемува на секој скок:
<?php
    <?php
$i = 0;
        $i = 0;
while ($i <= 10)
        while ($i <= 10)
{
        {
echo “Brojot e: .$i.<be/ >;
            echo "Brojot e: ".$i."<be/ >";
$i++;
        $i++;
}
        }
?>
    ?>
Сега да погледнеме покорисен пример. Еве како се прави паѓачко мени за денови, месеци и години. Овој код може да се искористи во форма за регистрација:
Сега да погледнеме покорисен пример. Еве како се прави паѓачко мени за денови, месеци и години. Овој код може да се искористи во форма за регистрација:
<?php
    <?php
 
        $month_array = array( "January", "February", "March", "April", "May", "June",
$month_array = array( "January", "February", "March", "April", "May", "June",
                       "July", "August", "September", "October", "November", "December");
                       "July", "August", "September", "October", "November", "December");
 
        echo "<select name=\"day\">";
echo "<select name=\"day\">";
        $i = 1;
$i = 1;
        while ( $i <= 31 ) {
while ( $i <= 31 ) {
            echo "<option value=".$i.">".$i."</option>";
  echo "<option value=".$i.">".$i."</option>";
          $i++;
  $i++;
        }
}
        echo "</select>";
echo "</select>";
        echo "<select name=\"month\">";
 
        $i = 0;
echo "<select name=\"month\">";
        while ( $i <= 11 ) {
$i = 0;
            echo "<option value=".$i.">".$month_array[$i]."</option>";     
while ( $i <= 11 ) {
        $i++;
  echo "<option value=".$i.">".$month_array[$i]."</option>";     
        }
  $i++;
        echo "</select>";
}
        echo "<select name=\"year\">";
echo "</select>";
        $i = 1900;
 
        while ( $i <= 2007 ) {     
echo "<select name=\"year\">";
          echo "<option value=".$i.">".$i."</option>";     
$i = 1900;
          $i++;
while ( $i <= 2007 ) {     
        }
  echo "<option value=".$i.">".$i."</option>";     
        echo "</select>";
  $i++;
    ?>
}
echo "</select>";
?>
Бидете сигурни дека условот во некој случај ќе стане неточен. Инаку, циклусот нема никогаш да заврши.
Бидете сигурни дека условот во некој случај ќе стане неточен. Инаку, циклусот нема никогаш да заврши.
do...while
===do...while===
Наредбите do...while се слични на while, само што условот се проверува на крајот од секое извршување на наредбите во него. Тоа значи дека do...while секако ќе се изврши барем еднаш.  Еве ја синтаксата:
Наредбите do...while се слични на while, само што условот се проверува на крајот од секое извршување на наредбите во него. Тоа значи дека do...while секако ќе се изврши барем еднаш.  Еве ја синтаксата:
do
    do
{
    {
naredbi;
        naredbi;
}
    }
while (condition);
    while (condition);
Следниот код, ќе ја зголемува вредноста на i за еден се додека таа е помала или еднаква на 10:
Следниот код, ќе ја зголемува вредноста на i за еден се додека таа е помала или еднаква на 10:
<?php
    <nowiki><?php
$i = 0;
        $i = 0;
do {
        do {
echo “Brojot e .$i.<br/>;
        echo "Brojot e ".$i."<br/>";
$i++;
    $i++;
}
        }
while ($i <= 10);
        while ($i <= 10);
?>
    ?></nowiki>
===for===
===for===
Наредбата for се користи кога точно знаете колку пати сакате некоји наредби да се извршат. Затоа за for се вели дека е конечен циклус. Синтаксата е поразлична од претходните:
Наредбата for се користи кога точно знаете колку пати сакате некоји наредби да се извршат. Затоа за for се вели дека е конечен циклус. Синтаксата е поразлична од претходните:
for (inicijalizacija; uslov; skok)
    for (inicijalizacija; uslov; skok)
{
    {
naredbi;
        naredbi;
}
    }
Трите изрази што ги добива for се разделени со ;. Ова се случува кога се извршува for:
Трите изрази што ги добива for се разделени со ;. Ова се случува кога се извршува for:
1.Се иницијализираат бројачи, кои ќе се менуваат според скокот.
1.Се иницијализираат бројачи, кои ќе се менуваат според скокот.
Ред 523: Ред 521:


Еве еден едноставен пример:
Еве еден едноставен пример:
<?php  
    <nowiki><?php  
for ($i = 0; $i <= 10; $i++)
        for ($i = 0; $i <= 10; $i++)
{
        {
echo “Brojot e .$i.<br/>;
            echo "Brojot e ".$i." <br/>";
}
        }
?>
    ?></nowiki>


Пр. со вгнездени циклуси:
Пр. со вгнездени циклуси:
<?php
    <nowiki><?php
echo "<h1>Multiplication table</h1>";
        echo "<h1>Multiplication table</h1>";
echo "<table border=2 width=50%";  
        echo "<table border=2 width=50%";  


for ($i = 1; $i <= 9; $i++ ) {  //nadvoresen ciklus
        for ($i = 1; $i <= 9; $i++ ) {  //nadvoresen ciklus
  echo "<tr>";
            echo "<tr>";
  echo "<td>".$i."</td>";
            echo "<td>".$i."</td>";
    
    
  for ( $j = 2; $j <= 9; $j++ ) { // vnatresen ciklus
        for ( $j = 2; $j <= 9; $j++ ) { // vnatresen ciklus
        echo "<td>".$i * $j."</td>";
            echo "<td>".$i * $j."</td>";
    }
        }
 
  echo "</tr>";
}
 
echo "</table>";
?>


        echo "</tr>";
        }
        echo "</table>";
    ?></nowiki>


Еве уште еден пример што користи две променливи. Една за да ги собира сите броеви од 1 до 10, а друга да ги собира само истите.
Еве уште еден пример што користи две променливи. Една за да ги собира сите броеви од 1 до 10, а друга да ги собира само истите.
<?php
    <nowiki><?php
$total = 0;
        $total = 0;
$even = 0;
        $even = 0;
for ($x = 1, $y = 1; $x <=10; $x++, $y++)
        for ($x = 1, $y = 1; $x <=10; $x++, $y++)
{
        {
if (($y % 2) == 0)
            if (($y % 2) == 0)
{
            {
$even = $even + $y;
                $even = $even + $y;
}
            }
$total = $total + $x;
            $total = $total + $x;
}
        }
echo “Celiot zbir e .$total.<br/>;
        echo "Celiot zbir e ".$total."<br/>";
echo “Zbirot na ednakvite e .$even;
        echo "Zbirot na ednakvite e ".$even;
?>
    ?></nowiki>
===foreach===
===foreach===
foreach е варијација на for и помага да се итерира низ елементи од една низа. Има две различни варијанти на foreach циклусот:
foreach е варијација на for и помага да се итерира низ елементи од една низа. Има две различни варијанти на foreach циклусот:
foreach (array as value)
    foreach (array as value)
{
    {
naredbi;
        naredbi;
}
    }
и
и
foreach (array as key => value)
    foreach (array as key => value)
{
    {
naredbi;
        naredbi;
}
    }
Пример, печатење вредности од една низа:
Пример, печатење вредности од една низа:
<?php
    <nowiki><?php
$email = array('john.smith@server.com', 'alex@server.com' );
        $email = array('john.smith@server.com', 'alex@server.com' );
foreach ($email as value)
        foreach ($email as value)
{
        {
echo “Sending mail to .$value.<br/>;
            echo "Sending mail to ".$value."<br/>";
}
        }
    ?></nowiki>
PHP ги извршува наредбите кои му се дадени на foreach онолку пати колку што има вредности во низата. Елементите се пронаоѓаат според нивниот внатрешен редослед. Циклусот продолжува се додека не се поминат сите елементи и не дојде до крај на низата.
PHP ги извршува наредбите кои му се дадени на foreach онолку пати колку што има вредности во низата. Елементите се пронаоѓаат според нивниот внатрешен редослед. Циклусот продолжува се додека не се поминат сите елементи и не дојде до крај на низата.
Другиот вид на foreach наредби се користи со асоцијативни низи:
Другиот вид на foreach наредби се користи со асоцијативни низи:
<?php
    <nowiki><?php
$person = array('name' => 'Andrew', 'age' => 21, 'address' => '77, Lincoln st.');
        $person = array('name' => 'Andrew', 'age' => 21, 'address' => '77, Lincoln st.');
foreach ($person as $key => $value)
        foreach ($person as $key => $value)
{
        {
echo $key.is .$value.<br/>;
            echo $key." is ".$value."<br/>";
}
        }
?>
    ?></nowiki>
Во овој случај, клучот за дава на променливата $key, а вредноста на променливата $value.
Во овој случај, клучот за дава на променливата $key, а вредноста на променливата $value.
За време на извршувањето на foreach циклусот, тој не работи со вистинската низа, туку со копија од неа. За време на секој циклус, може да се манипулира со $value, но вистинската вредност останува иста.  
За време на извршувањето на foreach циклусот, тој не работи со вистинската низа, туку со копија од неа. За време на секој циклус, може да се манипулира со $value, но вистинската вредност останува иста.  
Ред 598: Ред 595:
break, го прекинува тековниот while или for циклус и продолжува со извршување на кодот после нив. Дури може да се даде вредност после break, со која ќе се каже колку нивоа да бидат прескокнати.  
break, го прекинува тековниот while или for циклус и продолжува со извршување на кодот после нив. Дури може да се даде вредност после break, со која ќе се каже колку нивоа да бидат прескокнати.  
Еве пример за користење на break:
Еве пример за користење на break:
<?php
    <nowiki><?php
echo "<p><b>Example of using the Break statement:</b></p>";
        echo "<p><b>Example of using the Break statement:</b></p>";


for ($i=0; $i<=10; $i++) {  
        for ($i=0; $i<=10; $i++) {  
  if ($i==3){break;}  
            if ($i==3){break;}  
  echo "The number is ".$i;
            echo "The number is ".$i;
  echo "<br />";  
            echo "<br />";  
}
        }


echo "<p><b>One more example of using the Break statement:</b><p>";
        echo "<p><b>One more example of using the Break statement:</b><p>";


$i = 0;
        $i = 0;
$j = 0;
        $j = 0;


while ($i < 10) {
        while ($i < 10) {
  while ($j < 10) {
            while ($j < 10) {
    if ($j == 5) {break 2;} // breaks out of two while loops
                if ($j == 5) {
    $j++;
                    break 2;
  }
                } // breaks out of two while loops
  $i++;
                $j++;
}
            }
            $i++;
        }


echo "The first number is ".$i."<br />";
        echo "The first number is ".$i."<br />";
echo "The second number is ".$j."<br />";
        echo "The second number is ".$j."<br />";
?>
    ?></nowiki>
Наредбата continue го прекинува извршувањето на блокот наредби и продолжува со извршување со следниот скок:
Наредбата continue го прекинува извршувањето на блокот наредби и продолжува со извршување со следниот скок:
<?php
    <nowiki><?php
echo "<p><b>Example of using the Continue statement:</b><p>";
        echo "<p><b>Example of using the Continue statement:</b><p>";


for ($i=0; $i<=10; $i++) {  
        for ($i=0; $i<=10; $i++) {  
  if (i==3){continue;}  
            if (i==3){continue;}  
  echo "The number is ".$i;  
            echo "The number is ".$i;  
  echo "<br />";  
            echo "<br />";  
}  
        }  
?>
    ?></nowiki>
==Функции==
==Функции==
Функција е блок наредби, кои може да бидат повикани од кој и да е дел од скриптата откако таа ќе биде декларирана. Кодот запишан во функција се игнорира, се додека таа функција не се повика. Со ова се добива на брзина, се намалуваат грешките и се зголемува прегледноста затоа што не се користат долги, комплицирани кодови.  
Функција е блок наредби, кои може да бидат повикани од кој и да е дел од скриптата откако таа ќе биде декларирана. Кодот запишан во функција се игнорира, се додека таа функција не се повика. Со ова се добива на брзина, се намалуваат грешките и се зголемува прегледноста затоа што не се користат долги, комплицирани кодови.  
За да се декларира функција, потребна е оваа синтакса:
За да се декларира функција, потребна е оваа синтакса:
<?php
    <?php
function ime_na_funkcija(param_1, ... , param_n)
        function ime_na_funkcija(param_1, ... , param_n)
{
        {
naredbi;
            naredbi;
return povratna_vrednost;
            return povratna_vrednost;
}
        }
?>
    ?>
Во функциите може да се додаваат и други вредности како променливи, така што тие ќе бидат локални променливи.  
Во функциите може да се додаваат и други вредности како променливи, така што тие ќе бидат локални променливи.  
===Креирање едноставна функција===
===Креирање едноставна функција===
Првата функција, ќе отпечати “php rulez” пет пати, но таа нема да прими параметри. Втората ќе добие параметри. Параметарот е податок кој е потребен за функцијата да се изврши. Пр:
Првата функција, ќе отпечати "php rulez" пет пати, но таа нема да прими параметри. Втората ќе добие параметри. Параметарот е податок кој е потребен за функцијата да се изврши. Пр:
<?php
<nowiki>    <?php
function first()
        function first()
{
        {
for($i = 0; $i !=5; $i++)
        for($i = 0; $i !=5; $i++)
echo <p>php rulez!</p>;
            echo "<p>php rulez!</p>";
}
        }
function second($num, $msg)
        function second($num, $msg)
{
        {
for($i = 0; $i != $num; $i++)
            for($i = 0; $i != $num; $i++)
echo <p>. $msg .</p>;
                echo "<p>". $msg ."</p>";
}
        }
echo “Ova e pred da se povikaat funkciite.<br>;
        echo "Ova e pred da se povikaat funkciite.<br>";
echo “Izlezot od prvata funkcija e:
        echo "Izlezot od prvata funkcija e: "
first();
        first();
echo “Ova e izlezot od vtorata funkcija:
        echo "Ova e izlezot od vtorata funkcija: "
second(5, “bla bla bla”);
        second(5, "bla bla bla");
echo “Ova e posle dvete funkcii<br>;
        echo "Ova e posle dvete funkcii<br>";
?>
    ?></nowiki>
Следниот пример, креира функција која може да пресмета аритметичка средина и да го даде резултатот:
Следниот пример, креира функција која може да пресмета аритметичка средина и да го даде резултатот:
<?php
<nowiki>    <?php
function ar_sr($a, $b)
        function ar_sr($a, $b)
{
        {
$result = ($a + $b) / 2;
            $result = ($a + $b) / 2;
return $result;
            return $result;
}
        }
echo ar_sr(4, 6), <br>;
        echo ar_sr(4, 6), "<br>";
echo ar_sr(2314, 12412), <br>;
        echo ar_sr(2314, 12412), "<br>";
?>
    ?>
</nowiki>
===Домен на променливите и време на живот===
===Домен на променливите и време на живот===
Важно е да се напомне дека ако дефинирате променливи внатре во функциите, таа променлива е достапна само внатре во функцијата. Таа не може да се користи во другиот дел од кодот или во друга функција. Доменот на променливите во функцијата е локален.  
Важно е да се напомне дека ако дефинирате променливи внатре во функциите, таа променлива е достапна само внатре во функцијата. Таа не може да се користи во другиот дел од кодот или во друга функција. Доменот на променливите во функцијата е локален.  
Функцијата што треба да користи променлива која е дефинирана надвор од неа, мора да ја повика со клучниот збор global:
Функцијата што треба да користи променлива која е дефинирана надвор од неа, мора да ја повика со клучниот збор global:
<?php
    <nowiki><?php
function AddingNumbers()
        function AddingNumbers()
{
        {
global $sum = 2 + 2;
            global $sum = 2 + 2;
}
        }
$sum = 0;
        $sum = 0;
AddingNumbers();
        AddingNumbers();
echo “2 + 2 = .$sum;
        echo "2 + 2 = ".$sum;
?>
    ?></nowiki>
Додека доменот на променливата дефинирана во функцијата е локален, променливата во главниот код е глобална. Зборчето global му кажува на PHP да бара променлива надвор од функцијата.  
Додека доменот на променливата дефинирана во функцијата е локален, променливата во главниот код е глобална. Зборчето global му кажува на PHP да бара променлива надвор од функцијата.  
Променлива која е дефинирана во програмскиот код, е жива се додека скриптата се извршува. Кога таа ќе заврши, престанува да постои. Променлива која е во функција, постои се додека се извршува функцијата.
Променлива која е дефинирана во програмскиот код, е жива се додека скриптата се извршува. Кога таа ќе заврши, престанува да постои. Променлива која е во функција, постои се додека се извршува функцијата.
Ред 694: Ред 694:
Пред да почнете да ги обработувате информациите добиени од корисникот, треба да креирате HTML форма од која тие податоци ќе ги соберете. Има два методи кои се користат за праќање податоци: GET и POST. Овие два методи се дефинирани во HTML елементите, како нивни атрибути. Исто така ќе мора да дадете и адреса на датотеката која ќе ги обработува овие информации.  
Пред да почнете да ги обработувате информациите добиени од корисникот, треба да креирате HTML форма од која тие податоци ќе ги соберете. Има два методи кои се користат за праќање податоци: GET и POST. Овие два методи се дефинирани во HTML елементите, како нивни атрибути. Исто така ќе мора да дадете и адреса на датотеката која ќе ги обработува овие информации.  
Еве една HTML форма која ќе испраќа податоци, користејќи го POST методот. Информациите пратени од формата со овој метод се невидливи за другите и не е ограничена количината на податоци кои се праќаат. Името на оваа датотека нека биде form.html.
Еве една HTML форма која ќе испраќа податоци, користејќи го POST методот. Информациите пратени од формата со овој метод се невидливи за другите и не е ограничена количината на податоци кои се праќаат. Името на оваа датотека нека биде form.html.
<html>  
    <nowiki><html>  
<head>  
    <head>  
  <title>Process the HTML form data with the POST method</title>  
        <title>Process the HTML form data with the POST method</title>  
</head>  
    </head>  
<body>  
    <body>  
  <form name="myform" action="process.php" method="POST">
      <form name="myform" action="process.php" method="POST">
    <input type="hidden" name="check_submit" value="1" />
        <input type="hidden" name="check_submit" value="1" />
    Name: <input type="text" name="Name" /><br />
        Name: <input type="text" name="Name" /><br />
    Password: <input type="password" name="Password" maxlength="10" /><br />
        Password: <input type="password" name="Password" maxlength="10" /><br />
    Select something from the list: <select name="Seasons">
        Select something from the list: <select name="Seasons">
      <option value="Spring" selected="selected">Spring</option>
          <option value="Spring" selected="selected">Spring</option>
      <option value="Summer">Summer</option>
          <option value="Summer">Summer</option>
      <option value="Autumn">Autumn</option>
          <option value="Autumn">Autumn</option>
      <option value="Winter">Winter</option>
          <option value="Winter">Winter</option>
    </select><br /><br />
        </select><br /><br />
    Choose one:  
        Choose one:  
      <input type="radio" name="Country" value="USA" /> USA
          <input type="radio" name="Country" value="USA" /> USA
      <input type="radio" name="Country" value="Canada" /> Canada
          <input type="radio" name="Country" value="Canada" /> Canada
      <input type="radio" name="Country" value="Other" /> Other
          <input type="radio" name="Country" value="Other" /> Other
    <br />
        <br />
    Choose the colors:  
        Choose the colors:  
      <input type="checkbox" name="Colors[]" value="green" checked="checked" /> Green
          <input type="checkbox" name="Colors[]" value="green" checked="checked" /> Green
      <input type="checkbox" name="Colors[]" value="yellow" /> Yellow
          <input type="checkbox" name="Colors[]" value="yellow" /> Yellow
      <input type="checkbox" name="Colors[]" value="red" /> Red
          <input type="checkbox" name="Colors[]" value="red" /> Red
      <input type="checkbox" name="Colors[]" value="gray" /> Gray
          <input type="checkbox" name="Colors[]" value="gray" /> Gray
    <br /><br />
        <br /><br />
    Comments:<br />  
        Comments:<br />  
    <textarea name="Comments" rows="10" cols="60">Enter your comments here</textarea><br />
        <textarea name="Comments" rows="10" cols="60">Enter your comments here</textarea><br />
    <input type="submit" />
        <input type="submit" />
  </form>
      </form>
</body>
    </body>
</head>
    </head>
</html>
    </html></nowiki>


Примерот вклучува повеќе елементи: поле за внес на податоци, поле за избор од неколку можности, поле за текст и копче за испраќање на формата. Кога корисникот го притиснува копчето, податоците се праќаат до process.php датотеката.
Примерот вклучува повеќе елементи: поле за внес на податоци, поле за избор од неколку можности, поле за текст и копче за испраќање на формата. Кога корисникот го притиснува копчето, податоците се праќаат до process.php датотеката.
Ред 734: Ред 734:
Следно, треба да се направи PHP датотеката која ќе ја обработи формата. Кога ќе се изврши формата со кликнување на копчето (submit), тогаш автоматски се генерираат две суперглобални променливи: $_GET и $_POST, со сите податоци пратени co GET и POST соодветно. Така, контролата наречена Name, која беше пратена со POST, ќе биде зачувана како $_POST['Name'].
Следно, треба да се направи PHP датотеката која ќе ја обработи формата. Кога ќе се изврши формата со кликнување на копчето (submit), тогаш автоматски се генерираат две суперглобални променливи: $_GET и $_POST, со сите податоци пратени co GET и POST соодветно. Така, контролата наречена Name, која беше пратена со POST, ќе биде зачувана како $_POST['Name'].
Снимете го овој код во датотека process.php во истиот директориум како и form.html:
Снимете го овој код во датотека process.php во истиот директориум како и form.html:
<?php
    <nowiki><?php
//Check whether the form has been submitted
    //Check whether the form has been submitted
if (array_key_exists('check_submit', $_POST)) {
    if (array_key_exists('check_submit', $_POST)) {
  //Converts the new line characters (\n) in the text area into HTML line breaks (the <br /> tag)
      //Converts the new line characters (\n) in the text area into HTML line breaks (the <br /> tag)
  $_POST['Comments'] = nl2br($_POST['Comments']);  
      $_POST['Comments'] = nl2br($_POST['Comments']);  
  //Check whether a $_GET['Languages'] is set
      //Check whether a $_GET['Languages'] is set
  if ( isset($_POST['Colors']) ) {  
      if ( isset($_POST['Colors']) ) {  
    $_POST['Colors'] = implode(', ', $_POST['Colors']); //Converts an array into a single string
        $_POST['Colors'] = implode(', ', $_POST['Colors']); //Converts an array into a single string
   }
      }    
 
   
  //Let's now print out the received values in the browser
      //Let's now print out the received values in the browser
  echo "Your name: {$_POST['Name']}<br />";
      echo "Your name: {$_POST['Name']}<br />";
  echo "Your password: {$_POST['Password']}<br />";
      echo "Your password: {$_POST['Password']}<br />";
  echo "Your favourite season: {$_POST['Seasons']}<br /><br />";
      echo "Your favourite season: {$_POST['Seasons']}<br /><br />";
  echo "Your comments:<br />{$_POST['Comments']}<br /><br />";
      echo "Your comments:<br />{$_POST['Comments']}<br /><br />";
  echo "You are from: {$_POST['Country']}<br />";
      echo "You are from: {$_POST['Country']}<br />";
  echo "Colors you chose: {$_POST['Colors']}<br />";
      echo "Colors you chose: {$_POST['Colors']}<br />";
} else {
    } else {
    echo "You can't see this page without submitting the form.";
        echo "You can't see this page without submitting the form.";
}
    }
?>
    ?></nowiki>
Во првиот ред, се проверува дали е страната со податоци испратена и оваа скрипта да не се изврши сама. Следно, се конвертираат новите редови во HTML <br/>. Потоа се проверува дали низата полна, а ако е се користи функцијата implode() да се конвертира $_POST['Colors'] низата во една текстуална променлива. Последно, се печатат податоците во прелистувачот.  
Во првиот ред, се проверува дали е страната со податоци испратена и оваа скрипта да не се изврши сама. Следно, се конвертираат новите редови во HTML <br/>. Потоа се проверува дали низата полна, а ако е се користи функцијата implode() да се конвертира $_POST['Colors'] низата во една текстуална променлива. Последно, се печатат податоците во прелистувачот.  
===GET и POST===
===GET и POST===
Ред 775: Ред 775:
[domain] – Домејнот за кој колачето е валидно. Ако не е специфицирано, тогаш оваа вредност е домејнот на оној кој што го креирал колачето.
[domain] – Домејнот за кој колачето е валидно. Ако не е специфицирано, тогаш оваа вредност е домејнот на оној кој што го креирал колачето.
[security] – Кажува дали колачето ќе биде пратено преку HTTPS. Вредноста 1 кажува дека ќе биде пратено преку сигурна врска, но дека може да не е сигурно. Колачето е обична текстуална датотека, па не е секогаш сигурно. Вредноста 0 значи дека ќе биде пратено низ стандарда HTTP постапка.
[security] – Кажува дали колачето ќе биде пратено преку HTTPS. Вредноста 1 кажува дека ќе биде пратено преку сигурна врска, но дека може да не е сигурно. Колачето е обична текстуална датотека, па не е секогаш сигурно. Вредноста 0 значи дека ќе биде пратено низ стандарда HTTP постапка.
Во овој пример, ќе се креира колаче со име “MyCookie” и ќе му се даде вредност “PHP tutorial”. Исто така, се даваат информации дека колачето ќе престане да важи после 1 час и дека тоа важи за сите страни во директориумот tutorials.
Во овој пример, ќе се креира колаче со име "MyCookie" и ќе му се даде вредност "PHP tutorial". Исто така, се даваат информации дека колачето ќе престане да важи после 1 час и дека тоа важи за сите страни во директориумот tutorials.
<?php
    <nowiki><?php
setcookie("myCookie", "PHP Tutorial", time()+3600, "/tutorials");
        setcookie("myCookie", "PHP Tutorial", time()+3600, "/tutorials");
?>
    ?></nowiki>
Поради начинот на кој работат колачињата со HTTP, важно е да се праќаат сите колачиња пред било каков излез на екран. Ова значи дека ќе се повикаат сите функции пред да се отпечатат или прикажат резултати. Ако не, тогаш PHP ќе соопшти и колачињата нема да бидат испратени.  
Поради начинот на кој работат колачињата со HTTP, важно е да се праќаат сите колачиња пред било каков излез на екран. Ова значи дека ќе се повикаат сите функции пред да се отпечатат или прикажат резултати. Ако не, тогаш PHP ќе соопшти и колачињата нема да бидат испратени.  
===Како да се добијат податоци од колаче?===
===Како да се добијат податоци од колаче?===
Откако е направено колачето, податоците од него треба да се извлечат. Како што е претходно кажано, имињата на колачињата се снимени во суперглобалната низа $_COOKIE. Во овој случај, ќе се повика претходното колаче кое го креиравте:
Откако е направено колачето, податоците од него треба да се извлечат. Како што е претходно кажано, имињата на колачињата се снимени во суперглобалната низа $_COOKIE. Во овој случај, ќе се повика претходното колаче кое го креиравте:
<?php
    <nowiki><?php
echo "The cookie value is ".$_COOKIE['myCookie'];
        echo "The cookie value is ".$_COOKIE['myCookie'];
?>
    ?></nowiki>
Излезот од ова е: “The cookie value is PHP Tutorial”.
Излезот од ова е: "The cookie value is PHP Tutorial".
===Како да се избрише колаче?===
===Како да се избрише колаче?===
По правило, колачињата се бришат кога ќе се затвори прелистувачот. Тоа може да се измени со тоа што ќе се даде вредност, време, за колку тоа колаче да се избрише. За да се осигурате дека тоа време, не е поминато време (време во минатото), се користи функцијата time() која ќе го даде моменталното време.  
По правило, колачињата се бришат кога ќе се затвори прелистувачот. Тоа може да се измени со тоа што ќе се даде вредност, време, за колку тоа колаче да се избрише. За да се осигурате дека тоа време, не е поминато време (време во минатото), се користи функцијата time() која ќе го даде моменталното време.  
Ред 793: Ред 793:
===Креирање сигурносни слики===
===Креирање сигурносни слики===
Еве ја функцијата која креира сигурносна слика (captcha). Следно ќе биде детално разгледан секој чекор во генерирањето слика.
Еве ја функцијата која креира сигурносна слика (captcha). Следно ќе биде детално разгледан секој чекор во генерирањето слика.
<?php
    <nowiki><?php
create_image();
        create_image();
exit;
        exit;


function create_image()
        function create_image()
{
        {
$md5 = md5(rand(0,999));
            $md5 = md5(rand(0,999));
$pass = substr($md5, 10, 5);
            $pass = substr($md5, 10, 5);
$width = 100;
            $width = 100;
$height = 20;
            $height = 20;
$image = ImageCreate($width, $height);
            $image = ImageCreate($width, $height);
$white = ImageColorAllocate($image, 255, 255, 255);
            $white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
            $black = ImageColorAllocate($image, 0, 0, 0);
$grey = ImageColorAllocate($image, 204, 204, 204);
            $grey = ImageColorAllocate($image, 204, 204, 204);
ImageFill($image, 0, 0, $black);
            ImageFill($image, 0, 0, $black);
ImageString($image, 3, 30, 3, $pass, $white);
            ImageString($image, 3, 30, 3, $pass, $white);
ImageRectangle($image, 0, 0, $width-1, $height – 1, $grey);
            ImageRectangle($image, 0, 0, $width-1, $height – 1, $grey);
imageline($image, 0, $height/2, $width, $height/2, $grey);
            imageline($image, 0, $height/2, $width, $height/2, $grey);
             imageline($image, $width/2, 0, $width/2, $height, $grey);
             imageline($image, $width/2, 0, $width/2, $height, $grey);
header(“Content-Type: image/jpeg”);
            header("Content-Type: image/jpeg");
ImageJpeg($image);
            ImageJpeg($image);
ImageDestroy($image);
            ImageDestroy($image);
}
        }
?>
    ?></nowiki>
За да се креира нова слика или да се измени постоечка, треба да се направи идентификатор за неа. Во претходниот пример, креиравме празен простор со повикување на функцијата ImageCreate() и со давање на параметрите $width и $height. Друг начин ова да се направи е со повикување слика од постоечка датотека. Во зависност од форматот на сликата, може да се користат следниве функции: ImageCreateFromPNG(), ImageCreateFromGIF(), ImageCreateFromJPEG(). Параметарот на секоја од овие функции е името на датотеката.
За да се креира нова слика или да се измени постоечка, треба да се направи идентификатор за неа. Во претходниот пример, креиравме празен простор со повикување на функцијата ImageCreate() и со давање на параметрите $width и $height. Друг начин ова да се направи е со повикување слика од постоечка датотека. Во зависност од форматот на сликата, може да се користат следниве функции: ImageCreateFromPNG(), ImageCreateFromGIF(), ImageCreateFromJPEG(). Параметарот на секоја од овие функции е името на датотеката.
Потоа треба да ги изберете боите кои ќе се користат при цртањето. За ова се користи функцијата ImageColorAllocate() и идентификатори за црвена, зелена и сина боја.
Потоа треба да ги изберете боите кои ќе се користат при цртањето. За ова се користи функцијата ImageColorAllocate() и идентификатори за црвена, зелена и сина боја.
Ред 823: Ред 823:
===Креирање график===
===Креирање график===
Во следиот пример, ќе биде направен график користејќи податоци од MySQL база на податоци. Прво ќе биде дадено како да се направи базата и податоците во неа, а потоа пристапот до нив со PHP.
Во следиот пример, ќе биде направен график користејќи податоци од MySQL база на податоци. Прво ќе биде дадено како да се направи базата и податоците во неа, а потоа пристапот до нив со PHP.
CREATE DATABASE `poll`;
    <nowiki>CREATE DATABASE `poll`;
USE poll;
    USE poll;
 
   
CREATE TABLE `results` (  
    CREATE TABLE `results` (  
  book_type VARCHAR(50),  
      book_type VARCHAR(50),  
  num_votes INT
      num_votes INT
);
    );
 
   
INSERT INTO `results` values   
    INSERT INTO `results` values   
    ('Classic', 15),  
        ('Classic', 15),  
    ('Fantasy', 7),  
        ('Fantasy', 7),  
    ('Humor', 32),  
        ('Humor', 32),  
    ('Mystery', 12),  
        ('Mystery', 12),  
    ('Poetry', 25);
        ('Poetry', 25);</nowiki>
Скриптата за правење график е прилично долга, па ќе биде поделена на два дела и дискутирана поединечно. Првата скрипта се врзува за базата и ги зема податоците кои ќе бидат прикажани.
Скриптата за правење график е прилично долга, па ќе биде поделена на два дела и дискутирана поединечно. Првата скрипта се врзува за базата и ги зема податоците кои ќе бидат прикажани.
<?php
    <nowiki><?php
$dbhandle = mysql_connect(“localhost”, “root”, “”)
        $dbhandle = mysql_connect("localhost", "root", "")
or die(“Unable to connect to mysql”);
            or die("Unable to connect to mysql");
$selected = mysql_select_db(“poll”, $dbhandle)
        $selected = mysql_select_db("poll", $dbhandle)
or die(“Cannot select examples”);
            or die("Cannot select examples");
$result = mysql_query(“SELECT * FROM results”);
        $result = mysql_query("SELECT * FROM results");
$num_poller = mysql_num_rows($result);
        $num_poller = mysql_num_rows($result);
$total_votes = 0;
        $total_votes = 0;
while($row = mysql_fetch_array($result)){
        while($row = mysql_fetch_array($result)){
$total_votes += $row{'num_votes'};
            $total_votes += $row{'num_votes'};
}
        }
mysql_data_seek($result, 0);
        mysql_data_seek($result, 0);
mysql_close($dbhandle);
        mysql_close($dbhandle);</nowiki>
Во вториот дел на скриптата ќе биде пресметано се што е потребно за графикот. Тогаш ќе се спреми примарната слика и излезот со податоците. Резултатите од секој тип се добиени од базата, процентите се пресметани и столбовите и текстот под нив се прикажани.  
Во вториот дел на скриптата ќе биде пресметано се што е потребно за графикот. Тогаш ќе се спреми примарната слика и излезот со податоците. Резултатите од секој тип се добиени од базата, процентите се пресметани и столбовите и текстот под нив се прикажани.  
Во оваа скрипта ќе се користат TrueType фонтови. Прво треба да се даде адресата на која се наоѓаат фонтовите. За ова постои системска променива GDFONTPATH. Потоа се кажува името на фонтот. TrueType фонтовите се обработуваат со ImageTTFText().  
Во оваа скрипта ќе се користат TrueType фонтови. Прво треба да се даде адресата на која се наоѓаат фонтовите. За ова постои системска променива GDFONTPATH. Потоа се кажува името на фонтот. TrueType фонтовите се обработуваат со ImageTTFText().  
Еве ја и скриптата. Таа користи функции кои веќе се објаснети во цртањето сигурносна слика:
Еве ја и скриптата. Таа користи функции кои веќе се објаснети во цртањето сигурносна слика:
putenv('GDFONTPATH='pateka_do_font');
    <nowiki>putenv('GDFONTPATH='pateka_do_font');
$font = 'arial';
    $font = 'arial';
$y = 50;
    $y = 50;
$width = 700; //Image width in pixels
    $width = 700; //Image width in pixels
$bar_height = 20; //Bars height
    $bar_height = 20; //Bars height
$height = $num_poller * $bar_height * 1.5 + 70; //Calculating image height  
    $height = $num_poller * $bar_height * 1.5 + 70; //Calculating image height  
$bar_unit = ($width - 400) / 100; //Distance on the bar chart standing for 1 unit
    $bar_unit = ($width - 400) / 100; //Distance on the bar chart standing for 1 unit
 
   
//Create the image resource  
    //Create the image resource  
$image = ImageCreate($width, $height);  
    $image = ImageCreate($width, $height);  
 
   
//We are making four colors, white, black, blue and red  
    //We are making four colors, white, black, blue and red  
$white = ImageColorAllocate($image, 255, 255, 255);  
    $white = ImageColorAllocate($image, 255, 255, 255);  
$black = ImageColorAllocate($image, 0, 0, 0);  
    $black = ImageColorAllocate($image, 0, 0, 0);  
$red = ImageColorAllocate($image, 255, 0, 0);  
    $red = ImageColorAllocate($image, 255, 0, 0);  
$blue = imagecolorallocate($image,0,0,255);  
    $blue = imagecolorallocate($image,0,0,255);  
 
   
//Create image background  
    //Create image background  
ImageFill($image,$width,$height,$white);  
    ImageFill($image,$width,$height,$white);  
//Draw background shape  
    //Draw background shape  
ImageRectangle($image, 0, 0, $width-1, $height-1, $black);  
    ImageRectangle($image, 0, 0, $width-1, $height-1, $black);  
//Output header  
    //Output header  
ImageTTFText($image, 16, 0, $width/3 + 50, $y - 20, $black, $font, 'Poll Results');  
    ImageTTFText($image, 16, 0, $width/3 + 50, $y - 20, $black, $font, 'Poll Results');  
 
   
while ($row = mysql_fetch_object($result)) {  
    while ($row = mysql_fetch_object($result)) {  
if ($total_votes > 0)  
        if ($total_votes > 0)  
  $percent = intval(round(($row->num_votes/$total_votes)*100));  
            $percent = intval(round(($row->num_votes/$total_votes)*100));  
else  
        else  
     $percent = 0;  
        $percent = 0;
      
        //Output header for a particular value
        ImageTTFText($image,12,0,10, $y+($bar_height/2), $black, $font, $row->book_type);
        //Output percentage for a particular value
        ImageTTFText($image, 12, 0, 170, $y + ($bar_height/2),$red,$font,$percent.'%');
   
        $bar_length = $percent * $bar_unit;
   
        //Draw a shape that corresponds to 100%
        ImageRectangle($image, $bar_length+221, $y-2, (220+(100*$bar_unit)), $y+$bar_height, $black);
        //Output a bar for a particular value
        ImageFilledRectangle($image,220,$y-2,220+$bar_length, $y+$bar_height, $blue);
        //Output the number of votes
        ImageTTFText($image, 12, 0, 250+100*$bar_unit, $y+($bar_height/2), $black, $font, $row->num_votes.' votes cast.');  
   
        //Going down to the next bar
        $y = $y + ($bar_height * 1.5);
       
    }


//Output header for a particular value
    //Tell the browser what kind of file is come in  
ImageTTFText($image,12,0,10, $y+($bar_height/2), $black, $font, $row->book_type);
    header("Content-Type: image/jpeg");  
//Output percentage for a particular value
   
ImageTTFText($image, 12, 0, 170, $y + ($bar_height/2),$red,$font,$percent.'%');
    //Output the newly created image in jpeg format  
 
    ImageJpeg($image);  
$bar_length = $percent * $bar_unit;
   
 
    //Free up resources  
//Draw a shape that corresponds to 100%
    ImageDestroy($image);  
ImageRectangle($image, $bar_length+221, $y-2, (220+(100*$bar_unit)), $y+$bar_height, $black);
    ?></nowiki>
//Output a bar for a particular value
ImageFilledRectangle($image,220,$y-2,220+$bar_length, $y+$bar_height, $blue);
//Output the number of votes
ImageTTFText($image, 12, 0, 250+100*$bar_unit, $y+($bar_height/2), $black, $font, $row->num_votes.' votes cast.');
 
//Going down to the next bar
$y = $y + ($bar_height * 1.5);
 
}
 
//Tell the browser what kind of file is come in  
header("Content-Type: image/jpeg");  
 
//Output the newly created image in jpeg format  
ImageJpeg($image);  
 
//Free up resources  
ImageDestroy($image);  
?>
===Користење динамички генерирани слики на други страници===
===Користење динамички генерирани слики на други страници===
Бидејќи заглавјето (header), се испраќа само еднаш до серверот и тоа е единствениот начин да му се каже на прелистувачот што да очекува, не е лесно да се стават автоматски генерирани слики. Има три начини да се направи тоа:
Бидејќи заглавјето (header), се испраќа само еднаш до серверот и тоа е единствениот начин да му се каже на прелистувачот што да очекува, не е лесно да се стават автоматски генерирани слики. Има три начини да се направи тоа:
Ред 917: Ред 917:
2.Ќе ја снимите сликата како некоја датотека ќе се обраќате кон неа со <img>
2.Ќе ја снимите сликата како некоја датотека ќе се обраќате кон неа со <img>
3.Ќе ставите скрипта која сама ќе генерира слика во <img>
3.Ќе ставите скрипта која сама ќе генерира слика во <img>
<img height=”120” alt=”Dynamically generated image” src=”generate_image.php” width=”200”>
    <nowiki><img height="120" alt="Dynamically generated image" src="generate_image.php" width="200"></nowiki>


==Безбедно качување датотеки на сервер==
==Безбедно качување датотеки на сервер==
Ред 924: Ред 924:
===HTML форма===
===HTML форма===
Пред да го користите PHP за управување со датотеките, треба да се направи HTML формата која ќе даде интерфејс за корисникот, да ја пронајде и качи својата датотека.
Пред да го користите PHP за управување со датотеките, треба да се направи HTML формата која ќе даде интерфејс за корисникот, да ја пронајде и качи својата датотека.
<html>  
    <nowiki><html>  
<body>
    <body>
  <form enctype="multipart/form-data" action="upload.php" method="post">
      <form enctype="multipart/form-data" action="upload.php" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
        <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
    Choose a file to upload: <input name="uploaded_file" type="file" />
        Choose a file to upload: <input name="uploaded_file" type="file" />
    <input type="submit" value="Upload" />
        <input type="submit" value="Upload" />
  </form>  
      </form>  
</body>  
    </body>  
</html>
    </html>
Има неколку правила што треба да ги знаете за кога правите HTML форма. Прво, бидете сигурни дека го користите POST методот. Второ, на формата и е потребен enctype=”multipart/form-data” атрибутот. Без ова качувањето на датотеки нема да работи.
    </nowiki>
Има неколку правила што треба да ги знаете за кога правите HTML форма. Прво, бидете сигурни дека го користите POST методот. Второ, на формата и е потребен enctype="multipart/form-data" атрибутот. Без ова качувањето на датотеки нема да работи.
Друго нешто што треба да се спомне е скриеното поле во формата, наречено MAX_FILE_SIZE. Некои прелистувачи ја гледаат оваа променлива и нема да дозволат качување на датотеки поголеми од овој број (во бајти). За оваа променлива треба да внесете број ист како што е внесено во php.ini датотеката, за најголемо качување на датотеки. Во php.ini е внесено upload_max_filesize = 2MB. Но, сепак не можете да бидете сигурни дека скриптата нема да биде нападната со поголем број податоци. На пр., напаѓач може да внесе во скриптата повеќе датотеки со максимална големина, со цел да се сруши серверот. Затоа, наместете го post_max_size во php.ini на максималната големина што сакате да ја добие Вашиот web сервер (мора да биде поголема од upload_max_filesize). Основната вредност е 10МВ. Ова ја контролира максималната големина на сите POST податоци, во еден обид. Исто така осигурајте се дека file_uploads во php.ini е наместен на On.
Друго нешто што треба да се спомне е скриеното поле во формата, наречено MAX_FILE_SIZE. Некои прелистувачи ја гледаат оваа променлива и нема да дозволат качување на датотеки поголеми од овој број (во бајти). За оваа променлива треба да внесете број ист како што е внесено во php.ini датотеката, за најголемо качување на датотеки. Во php.ini е внесено upload_max_filesize = 2MB. Но, сепак не можете да бидете сигурни дека скриптата нема да биде нападната со поголем број податоци. На пр., напаѓач може да внесе во скриптата повеќе датотеки со максимална големина, со цел да се сруши серверот. Затоа, наместете го post_max_size во php.ini на максималната големина што сакате да ја добие Вашиот web сервер (мора да биде поголема од upload_max_filesize). Основната вредност е 10МВ. Ова ја контролира максималната големина на сите POST податоци, во еден обид. Исто така осигурајте се дека file_uploads во php.ini е наместен на On.
Погледнете го делот со type=”file”. Тоа е наместено така, за да овозможи наоѓање датотеки на системот. Овозможува внесување адреса до датотеката и копче Browse.
Погледнете го делот со type="file". Тоа е наместено така, за да овозможи наоѓање датотеки на системот. Овозможува внесување адреса до датотеката и копче Browse.
Кога корисникот внесува патека до датотеката, кликнува на копчето Submit и датотеката ќе биде пратена до upload.php. PHP скриптата ја превзема контролата.
Кога корисникот внесува патека до датотеката, кликнува на копчето Submit и датотеката ќе биде пратена до upload.php. PHP скриптата ја превзема контролата.
===Обработување на податоците од формата===
===Обработување на податоците од формата===
Ред 945: Ред 946:
$_FILES["uploaded_file"]["error"] – код со грешка која се јавила за време на качувањето
$_FILES["uploaded_file"]["error"] – код со грешка која се јавила за време на качувањето
Следниот пример покажува прифаќање на датотека и нејзино снимање во директориум upload. Скриптата дозволува качување само на JPEG слики помали од 350КВ:
Следниот пример покажува прифаќање на датотека и нејзино снимање во директориум upload. Скриптата дозволува качување само на JPEG слики помали од 350КВ:
<?php
    <nowiki><?php
if ((!empty($_FILES[“uploaded_file”])) && ($_FILES['uploaded_file']['error'] == 0)) {
    if ((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
$filename = basename($_FILES['uploaded_file']['name']);
        $filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strpos($filename, '.') + 1);
        $ext = substr($filename, strpos($filename, '.') + 1);
if (($ext == “jpg”) && ($_FILES[“uploaded_file”][“type”] == “image/jpeg”) && ($_FILES[“uploaded_file”][“size”] < 350000)) {
        if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && ($_FILES["uploaded_file"]["size"] < 350000)) {
$newname = dirname(__FILE__).'/upload/'.$filename;
            $newname = dirname(__FILE__).'/upload/'.$filename;
if (!file_exists($newname)) {
            if (!file_exists($newname)) {
if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $newname))){
                if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $newname))){
echo “It's done! The file is saved as: .$newname;
                    echo "It's done! The file is saved as: ".$newname;
} else {
                } else {
echo “Error: a problem occurred during file upload”;
                    echo "Error: a problem occurred during file upload";
}
                }
} else {
            } else {
echo “Error: File .$_FILES[“uploaded_file”][“name”].already exists”;
                echo "Error: File ".$_FILES["uploaded_file"]["name"]." already exists";
}
            }
} else {
        } else {
echo “Error: Only .jpg images under 350Kb are accepted for upload";
            echo "Error: Only .jpg images under 350Kb are accepted for upload";
}
        }
} else {
    } else {
echo “Error: No file uploaded”;
        echo "Error: No file uploaded";
}
    }
?>
    ?></nowiki>
Пред што и да правите со качените датотеки, треба да проверите дали тие се вистински качени. Потоа проверувате дали датотеката е JPEG и нејзината големина помала од 350KB. Следно, се проверува дали постои патеката на која треба да се качи датотеката и дали постои веќе некоја со исто име. Откако ќе се завршат овие проверки, се копира датотеката од локалниот компјутер на серверот. Ако е качувањето успешно, ќе биде објавена позитивна порака. Бидете сигурни дека датотеката на која сакате да запишувате на web серверот има дозвола за запишување и читање.  
Пред што и да правите со качените датотеки, треба да проверите дали тие се вистински качени. Потоа проверувате дали датотеката е JPEG и нејзината големина помала од 350KB. Следно, се проверува дали постои патеката на која треба да се качи датотеката и дали постои веќе некоја со исто име. Откако ќе се завршат овие проверки, се копира датотеката од локалниот компјутер на серверот. Ако е качувањето успешно, ќе биде објавена позитивна порака. Бидете сигурни дека датотеката на која сакате да запишувате на web серверот има дозвола за запишување и читање.  


Ред 973: Ред 974:
Email може да се праќа од апликацијата со директно барање на корисникот или пак на одредено време, пр. месечен весник. Понекогаш email-от содржи датотеки кои се прикачени на него. Тие можат да бидат чист текст, HTML делови и др. За да се разбере како функционира праќањето email ќе почнеме од поедноставни примери.  
Email може да се праќа од апликацијата со директно барање на корисникот или пак на одредено време, пр. месечен весник. Понекогаш email-от содржи датотеки кои се прикачени на него. Тие можат да бидат чист текст, HTML делови и др. За да се разбере како функционира праќањето email ќе почнеме од поедноставни примери.  
Забелешка: За да праќате email со PHP Ви треба функционален email сервер на кој имате дозвола да работите: за UNIX често е Sendmail, за Windows мора да се намести SMTP наредбата во php.ini да покажува на email серверот.  
Забелешка: За да праќате email со PHP Ви треба функционален email сервер на кој имате дозвола да работите: за UNIX често е Sendmail, за Windows мора да се намести SMTP наредбата во php.ini да покажува на email серверот.  


[[Категорија:Упатства]]
[[Категорија:Упатства]]

Последна преработка од 18:41, 29 јануари 2011

Што е PHP?

PHP доаѓа од HiperText Preprocessor и е програмски јазик на серверска страна. Ова значи дека посетителот отвара страна, серверот ги процесира/обработува РНР командите и го праќа резултатот до прелистувачот на клиентот. РНР е слободен програмски јазик, неговиот код е отворен и е мулти-платформски. РНР може да работи на UNIX, UNIX-like, GNU/Linux, Windows. Може да биде компајлиран со модул за Apache сервер и како бинарен за CGI.

Кога пишувате URL во полето за адреса во web прелистувачот, барате од web серверот на некој компјутер, да испрати датотека до прелистувачот на Вашиот компјутер. Ако таа датотека е HTML, тогаш таа изгледа исто и во прелистувачот и на серверот пред да ја испрати. По примањето, прелистувачот ги прикажува текстот, сликите и звуците. Во случајот со РНР страните, процесот е ист, само што има обработување пред серверот да го испрати документот. Тогаш серверот ги повикува скриптите кои се вклучени во страната.

PHP синтакса

PHP синтаксата е слична како синтаксата во C и Perl. Не мора да се декларираат променливи пред тие да се искористат. Лесно е да се направат низи хаш-асоцијативни низи. PHP има и некои рудиментирани објектно-ориентирани карактеристики, овозможувајќи лесно организирање и енкапсулирање на Вашиот код. Покрај основната синтакса, PHP носи и интерфејси за комуникација со други web страни, датабази, вкучувајќи ODBC, mySQL и други програмски јазици како Java и COM. PHP кодот влегува директно во web страната, па затоа не се потребни специјални развојни околини (IDE). Почнувате блок со <?php и завршувате со ?>. Што може PHP да направи за нас? Има многу можности што може да ги искористиме од PHP. Можете да прикажувате дата и време и други податоци, да поставувате форми кои ќе ги пополнуваат посетителите, да пристапувате до 19 видови бази на податоци, да ги обработувате нивните податоци, да праќате е-mail, да работите со групи на новости (newsgroups) ... Други можности што ги носи PHP:

1. PHP e соодветен кога сакате да креирате динамички страни кога прелистувачот ќе побара страна. Пр. да прикажувате дата и време, да листате податоци од база... 2. PHP нуди едноставно уредување на страната со можност да се направи покорисна за индивидуални корисници. 3. Со него може да се поставуваат web страните, да се контролира автентикацијата и да се пренасочуваат корисници 4. Една од најмоќните опции во PHP е пристапот до базите со податоци. Имате пристап до 19 видови бази и обработка на податоците 5. Креирајте листа на посетители, додајте thirt-party сервиси, сервиси кои нудат статистика за посетителите, колку пати Ве посетиле, од каде Ве посетиле. Со PHP вакви информации се тривијални. 6. PHP нуди едноставно праќање e-mail-и, работа со newsgroup-и, отварање конекција со други web страни и вадење податоци од нив. 7. PHP комуницира со други програмски јазици како Java и COM интерфејси. 8. PHP дозволува се! Од генерирање pdf до парсирање xml.

Вашата прва PHP скрипта

Пред да почнеме со пишување, неколку едноставни правила. Секоја линија во PHP код, мора да завршува со точка-запирка. Ако парсерот на PHP јазикот не пронајде точка-запирка, ќе продолжи да го парсира кодот се додека не наиде на една. Тогаш се јавува грешка. Наредбите со повеќе редови како условните наредби, мора да содржат { и }. Дуплите коси црти значат дека после нив следува коментар до крајот на линијата PHP страните, обично содржат HTML тагови и PHP код. PHP блок секогаш почнува со <?php и завршува со ?>. Блокот може да биде секаде низ документот. Овој код печати текст во web прелистувачот. Има две основни команди за печатење текст во прелистувачот: echo и print. Во овој пример е користена командатa echo.

   <?php
       echo "Everyone, smile!!!"; //ova e delot sto se pecati
   ?>

Запаметете дека секогаш овие датотеки се снимаат со екстензија .php – ова е важно зошто тоа му кажува на серверот како да ги третира датотеките кои ги вклучува и да го повика соодветниот интерпретер. Снимајте ја оваа датотека со некое едноставно име, на пр. "first.php" и ставете ја во root локацијата на web серверот. Откако ќе ја копирате, побарајте ја оваа адреса од web прелистувач. Во полето за адреса внесете http://localhost/first.php. Ако се функционира како што треба, во прелистувачот ќе се отвори страна со текст Everybody smile!!!. Ако не е инсталиран php или ако серверот не ја препознае екстензијата, ќе го видите кодот на скриптата. Првата скрипта е само PHP код. Него можете да го вклучите во HTML на овој начин:

   <html>
   <head>
   <title>Prva PHP skripta</title>
   </head>
   <body>
       <?php echo "Everybody smile!!!"; ?> // ova e delot sto se pecati
   </body>
   </html>

Излезот и од двете скрипти ќе биде сличен, со разлика што во втората ќе постои наслов и текстот ќе биде bold. Напомена: Ако го погледнете изворниот код на страната преку web прелистувачот, ќе видите дека цел PHP код е скриен и се што постои е HTML. Целиот PHP код е обработен пред да дојде до корисничко ниво.

PHP променливи

Променливите чуваат некоја вредност од одреден тип податоци. Може да чуваат броеви, текст, вредности за точно или неточно, објекти, ресурси или да бидат null (без податоци). Во PHP, сите променливи почнуваат со $ и вредност може да се додаде со операторот =. Знакот $ не е технички дел на променливата, но потребен за PHP парсерот да може да го препознае како променлива. Друга важна работа во PHP е тоа што сите наредби мора да завршуваат со „;". Во PHP нема потреба да се најави типот на променливата, туку тој го препознава според вредноста што и е дадена на таа променлива. Еве мал код за правење променлива и давање вредност:

   <?php
       $tekst = "Бла бла бла :) ";
       $broj = 14;
       echo $tekst;
       echo $broj;
   ?>

Излезот од оваа скрипта е: Бла бла бла :) 14

Разлики во голема и мала буква

Една работа што може да предизвика многу проблеми и да одземе часови барање грешка е разликата што ја прави PHP меѓу голема и мала буква. Еве пример:

  <?php
       $promenliva = "Прва променлива";
       $Promenliva = "Втора променлива";
       echo "$promenliva - $Promenliva";`
   ?>

Излезот од ова е: Прва променлива - Втора променлива

Правила за променливи

1. PHP променивите мора да почнуваат со буква или со долна црта „_". 2. Тие мора да бидат составени само од алфа-нумерички карактери и долни црти 3. Променливите со повеќе од еден збор се поделуваат со долна црта 4. Променливите со повеќе од еден збор може да се поврзат со голема буква пр. $мојаПроменлива

Друга важна работа да се напомене е дека нема лимит на големината на променливите.

Резервирани променливи

Покрај обичните променливите кои ги креира самиот програмер, постојат променливи кои се вградени во јазикот. Тие се запамтени како низи и до нив може да се пристапи со индекс на позицијата како име за променливите. Еве некои од овие резервирани променливи: $_SERVER – содржи информации за серверот и HTTP конекцијата. $_COOKIE – содржи колачиња пратени од сереверот, зачувани на ниво на клиентот, индексирани со име на колаче. $_GET – содржи информации пратени до серверот како текст за пребарување додаден во самото URL за да не се користат колачиња $_POST – содржи информации пратени до серверот од клиентска страна, пр. од форма за пополнување со податоци на клиентот. $_FILE – содржи информации за датотека испратена на сервер $_ENV – содржи информации за резервирани променливи на серверот

Еве пример за присапување до овие променливи:

   <?php
        $novaPromenliva = $_COOKIE["moetoPrvoKolace"];
        echo $novaPromenliva;
   ?>

PHP константи

Константите исто како променливите се користат за чување податоци. Главна разлика меѓу нив е тоа што вредностите на константите не може да се менуваат. Тие може да бидат математички константи, шифри, патеки до датотеки... Со користење на константи Вие ја „заклучувате" одредена вредност, со што таа е заштитена од промени. Не мора да барате низ целата програма за да ја промените нејзината вредност, туку само ја менувате на почетокот од програмата. Еве еден пример:

   <?php
       define("PASSWORD", "admin");
       echo (PASSWORD);		//ke ja prikaze vrednosta na promenlivata PASSWORD "admin"
       echo constant("PASSWORD");	//isto ke otpecati "admin"
       echo "PASSWORD";			//ke prikaze "PASSWORD"
   ?>

PHP обезбедува неколку вградени константи за програмерите. Пр. "_FILE_" го дава името на датотеката од која моментално интерпретерот чита. "_LINE_" ја враќа линијата во таа датотека. Овие константи се корисни за генерирање текстуални пораки со грешки. За верзијата на интерпретерот податоци може да се најдат во "PHP_VERSION" константата.

PHP низи

Низите може да се искористат на неколку начини да се чуваат и организираат податоци брзо и едноставно. Тие се едни од најкорисните типови податоци достапни во кој и да е програмски јазик. Низите наједноставно може да се објаснат како листа од елементи. До нивните елементи може да се пристапи со наведување на индексот како позиција во низата. Таа позиција може да биде со број или со име. Низите до кои се пристапува со број (индекс) се наречени индексни низи, а оние со имиња на елементите – асоцијативни низи. Во PHP сите низи се асоцијативни, но оставена е можноста за индексни низи.

Индексни низи

Пр.

   <?php
       $sedum = 7;
       $imeNaNiza = array("ova e element", 5, $sedum);
       echo $imeNaNiza[0];		//ova ke otpecati: ova e element
       echo $imeNaNiza[1];		//ova: 5
       echo $imeNaNiza[2];		//ova: 7
   ?>

Како што можете да видите елементите во низата може да бидат било кој тип податок, како и променливи. Дозволено е во една низа, некој елемент да биде повторно низа. Ако сакате да проверете дали една променлива е низа може да се користи функцијата is_array(). Забележувате дека индексните низи почнуваат со индекс 0.

Aсоцијативни низи

Асоцијативните низи користат клучеви за пристап до своите елементи. Пр.

   <?php
       $prva_niza = array ("kluc1" => "prviot element", "kluc2" => "vtoriot element");
       $vtora_niza = array(
                   "kluc3" => "prv element vo vtorata niza",
                   "kluc4" => "vtor element vo vtorata niza"
           );
       echo $prva_niza['kluc1'];		//"prviot element"
       echo $prva_niza['kluc2'];		//"vtoriot element"
       echo $vtora_niza['kluc3'];		//"prv element vo vtorata niza"
       echo $vtora_niza['kluc4'];		//"vtor element vo vtorata niza"
   ?>

Уште еден пример за користење асоцијативни низи:

   <?php
       $cokolado = array (
           "nestle" => "50",
           "milka" => "60",
           "kandi" => "10"
       );
       echo "nestle kosta $cokolado['nestle'], milka kosta $cokolado['milka'], a kandi mnjam mnjam $cokolado['kandi'].";
   ?>

Бидејќи индексите во асоцијативните низи не се броеви, ние не можеме да користиме едноставни бројачи во циклус за едноставно минување низ целата низа. Затоа со нив може да користите foreach за да итерирате низ целата низа. Еве како ќе ги прочитаме сите податоци и ќе ги внесеме во табела:

   <?php
       $cokolado = array (
           "nestle" => "50",
           "milka" => "60",
           "kandi" => "10"
       );
       //za pecatenje naslov na tabelata
           echo "<table border='1' cellpadding = '5'>";
                    echo "<tr><th>Cokolado</th><tr>";
       //ova e toa sto ke pomine niz celata niza, zemajki go $Cokolado kako kluc i $Cena kako vrednost
       foreach($cokolado as $Cokolado => $Cena)
       {	
               echo "<tr><td>$Cokolado </td><td>$Cena</td></tr>";
       }

echo

   ?>

Како да подредите низа

Често е потребно елементите во една низа да се подредат по некој редослед: опаѓачки или растечки. Ако низата содржи текстуални променливи, тогаш е потребен алфабетски редослед. Сортирањето на едно-димензионални низи е едноставно.

Сортирање нумерички индексирани низи Постои низа со текстуални променливи (string)

   <?php
       $flowers = array("rose", "daisy", "orchid", "tulip", "chamomile");
       sort($flowers);
       for ($i = 0; $i < 4; $i++) // da se otpecatat elementite
           echo $flowers[$i]."<br />";
   ?>

Во овој случај елементите ќе бидат потредени во алфабетски редослед. Излезот би бил: camomile daisy orchid rose tulip

Можете да ги сортирате низите и во нумерички редослед. Ако имате низа која пр. ги содржи цените на цвеќињата, може да се сортираат во растечки редослед. Пр.:

   <?php
       $prices = array(1.25, 0.75 , 1.15, 1.00, 0.50);
       sort($prices);
       for($i = 0; $i <= 4; $i++)
           echo $prices[$i]."<br />";
       ?>

Излезот е следен: 0.75 1.00 1.15 1.25

Да спомнеме дека во сортирањето на низите, важно е дали буквите се пишувани со голема или мала буква. Така, "A" е помало од "Z", a "Z" е помало од "a".

Сортирање асоцијативни низи

Ако користите асоцијативни низи, не може да се користи sort() за да се подредат. Ако користите sort() на асоцијативна низа, таа се подредува по нумеричките вредности на нејзиниот индекс. Затоа се користи asort() функцијата, за клучевите и вредностите да останат поврзани заедно. Следниот код креира асоцијативна низа која содржи вредности за три цвеќиња и нивните цени. Потоа ги подредува во растечки редослед, според цената.

   <?php
        $shop = array ("rose" => "5.00",
                "daisy" => "4.00",
		"orchid" => "2.00",

);

       asort($shop);
       foreach($shop as $key => $value)
           echo $key." costs ".$value." dollars<br />";
   ?></nowiki>

Овој код ќе отпечати: orchid costs 2.00 dollars daisy costs 4.00 dollars rose costs 5.00 dollars

Функцијата asort() ја подредува низата во растечки редослед според вредноста на секој елемент. Во низава, вредности се цените, а клучеви се имињата на цвеќето. Ако, на пр., сакате да ги сортирате според клучевите, се користи функцијата ksort(). Следниов код ќе даде подредена низа според клучевите:

   <?php
       $shop = array ("rose" => "5.00",
           "daisy" => "4.00",

" orchid" => "2.00" );

       ksort($shop);
       foreach($shop as $key => $value)
           echo $key." costs ".$value." dollars<br />";
   ?>

Излезот: daisy costs 4.00 dollars orchid costs 2.00 dollars rose costs 5.00 dollars

Сортирање низи во обратен редослед Сите разгледани функции досега, сортираат во растечки редослед. Секоја од овие функции: sort(), asort(), ksort() имаат функции кои работат обратно од нив: rsort(), arsort(), krsort(), соодветно. Користењето на овие функции е исто како претходните.

Мулти-димензионални низи

Низите често не се само листа на подредени клучеви и вредности. Секој елемент во една низа, може да содржи друга низа, која исто така може да има свои низи. Со таков принцип, може да се креираат две-димензионални или три-димензионални низи.

Две-димензионални низи

Замислете дека сте сопственик на продавница за цвеќе. Едно-димензионална низа е доволна за да се чуваат вредности за цвеќето и цената. Но, ако сакате да чувате повеќе од една вредност, тогаш Ви треба нешто друго. Решението е во мулти-димензионалните низи. Табелата подолу може да прикаже дво-димензионална низа. Секој ред претставува тип на цвеќе, а секоја колона одреден атрибут за цвеќето.

Title Price Number rose 1.25 15 daisy 0.75 25 orchid 1.15 7

Да зачувате вредности во мулти-димензионална низа, се користи нешто како овој код:

   <?php
       $shop = array ("rose", 1.25, 15),
           array ("daisy", 0.75, 25),
           array ("orchid", 1.15, 7)
       );
   ?>

Овој код покажува дека променливата $shop, сега содржи три низи. За да добиете вредности од едно-димензионална низа, треба да го кажете името на низата и индексот. Истото е потребно и за дво-димензионалните низи, со една разлика: секој елемент има два индекси, ред и колона. За да ги прикажете елементите од оваа низа, може да користите for внатре во for, вгнездени циклуси.

   <?php
        echo "<h1>Pristap do sekoj element</h1>";
        echo $shop[0][0]." costs ".$shop[0][1]." and you get ".$shop[0][2]."<br />";
        echo $shop[1][0]." costs ".$shop[1][1]." and you get ".$shop[1][2]."<br />";
        echo $shop[2][0]." costs ".$shop[2][1]." and you get ".$shop[2][2]."<br />";
        echo "<ol>";
        for ($row = 0; $row < 3; $row++)
        {
        	echo "<ul>";
        	for ($col = 0; $col < 3; $col++)
        	{
        		echo "<li>".$shop[$row][$col]."</li>";
        	}
        	echo "</ul>";
        	echo "</li>";
        }
        echo "</ol>";
    ?>

Наместо користење на индексите за број на колона, може да се користат нивните имиња. За ова се користат асоцијативни низи. Следниот код, ќе ја направи истата низа, користејќи имиња за колоните.

   <?php 
       $shop = array( array( Title => "rose",
                     Price => 1.25,
                     Number => 15 
                   ),
              array( Title => "daisy", 
                     Price => 0.75,
                     Number => 25,
                   ),
              array( Title => "orchid", 
                     Price => 1.15,
                     Number => 7 
                   )
            );
   ?>

Полесно е да се работи со овие низи, во случај да треба да добиете една вредност од неа. Потребниот податок лесно се пронаоѓа ако го побарате со точното име на ред и колона. Меѓутоа се губи можноста да се поминува целата низа со едноставен for. Еве еден начин на кој може да се помине целата низа:

   <?php 
        echo "<h1>Manual access to each element from associative array</h1>";
        for ($row = 0; $row < 3; $row++)
        {
            echo $shop[$row]["Title"]." costs ".$shop[$row]["Price"]." and you get ".$shop[$row]["Number"];
            echo "<br />";
        }

        echo "<h1>Using foreach loop to display elements</h1>";
        echo "<ol>";
        for ($row = 0; $row < 3; $row++)
        {
            echo "<li><b>The row number $row</b>";
            echo "<ul>";
            foreach($shop[$row] as $key => $value)
            {
                echo "<li>".$value."</li>";
            }
            echo "</ul>";
            echo "</li>";
        }
        echo "</ol>";
    ?>

Три-димензионални низи

Не мора да бидете ограничени на две-димензионални низи. И тие низи што се внатре може да содржат други низи. Три-димензионалните низи се карактеризираат со висина, ширина и длабочина. Ако можете да замислите две-димензионална низа како табела, пробајте да замислите повеќе такви табели една позади друга. Секој елемент би бил претставен со ниво, ред и колона. Ако ги класифицираме цвеќињата во една продавница по категории, тогаш податоците за нив ќе треба да ги чуваме во три-димензионална низа. Еве како може тоа да се изврши:

   $shop = array(array(array("rose", 1.25, 15),
                   array("daisy", 0.75, 25),
                   array("orchid", 1.15, 7) 
                  ),
             array(array("rose", 1.25, 15),
                   array("daisy", 0.75, 25),
                   array("orchid", 1.15, 7) 
                  ),
             array(array("rose", 1.25, 15),
                   array("daisy", 0.75, 25),
                   array("orchid", 1.15, 7) 
                  )
            );
   ?>

Оваа низа има само нумерички индекси, па може да се користат вгнездени for циклуси за да се прикажат сите податоци:

   <?php
        echo "<ul>";
        for ( $layer = 0; $layer < 3; $layer++ )
        {
            echo "<li>The layer number $layer";
            echo "<ul>";
            for ( $row = 0; $row < 3; $row++ ) 
            {
               echo "<li>The row number $row";
               echo "<ul>";
               for ( $col = 0; $col < 3; $col++ )
               {
                   echo "<li>".$shop[$layer][$row][$col]."</li>";
               } 
               echo "</ul>";
               echo "</li>";
            }
            echo "</ul>";
            echo "</li>";
        }   
        echo "</ul>";
    ?>

Овој начин на креирање низи, овозможува креирање на четири и пет-димензионални низи. Синтаксичките правила не го ограничуваат бројот на димензии.

PHP условни наредби

Понекогаш кога пишувате код, доаѓа до случај кога треба да се избере едно или друго. Овде се користат наредби за услов. Условните наредби се сет од команди користени да изведуваат различни акции врз основа на различни услови. Овде ќе се разгледаат две структури: if…else и switch.

if…else

На пример треба да се провери дали една променлива има вредност точно или неточно, дали некоја текстуална променлива го содржи одреден текст, дали објектот е празен или полн... Условот може да биде што и да е, што и да поставиме. Синтаксата на if структурата е:

   if (услов) {
   	наредби1
   } else {
   	наредби2
   }

Пр.

   <?php
        $rezultat = 70;
        if ($rezultat >= 57) {
            echo "Uslovot pomina kako token <br />";
        }
        else {
       	    echo "Uslovot ne pomina <br />";
        }
    ?>

Следниот пример ќе покаже работа со elseif. Тоа се користи во сличаи кога треба за повеќе вредности да се прикажат различни резултати.

   <?php
       $rezultat = 70;
       if ($rezultat >= 75) {
           echo "izlez 1";
       }
       elseif ($rezultat >= 60) {
           echo "izlez 2";
       }
       elseif($rezultat >= 45) {
      	    echo "izlez 3";
       }
       else {
   	    echo "izlez 4";
       }
   ?>

Командата switch

Оваа команда работи исто како if. Со неа се овозможува проверка за повеќе вредности што кај if e понепрегледно и побавно. Синтаксата за switch:

   switch (израз) {
      case случај 1:
         наредби_1
         [break;]
      case случај_2:
         наредби_2
         [break;]
      ...
      default:
        наредби_n
        [break;]
   }

Програмата прво бара случај што се поклопува и потоа му ја предава контролата нему. Ги извршува наредбите што се дадени и излегува од switch. Ако не се пронајде случај кој се поклопува програмата бара default и ако постои ги извршува тие наредби. Ако не најде ни default програмата продолжува со работа без приказ од switch. break се користи за да се прекине автоматско поминување на следниот случај. Кога ќе се извршат наредбите од пронајдениот случај, програмата да продолжи со работа надвор од switch. Пр.:

   $flower = "rose";
   switch ($cokolado)
   {
       case "milka" : 
       echo $cokolado." costs 60den.";
       break;
       case "nestle" : 
       echo $cokolado." costs 50den.";
       break;
       case "kandi" : 
       echo $cokolado." costs 10den";
       break;
       default : 
       echo "Nema takvo cokolado vo prodavnicata :(";
       break;
   }

Може да се прават проверки со математички операции како поголемо, помало или еднакво:

   <?php
       $broj = 5;
       switch ($broj) {
       case 0:
           echo "Nula ne e validen slucaj.";
           break;
       case $ broj < 0:
           echo "Negativni broevi ne se dozvoleni.";
           break;
       default:
           echo "Vnesen e pozitiven broj.";
       break;
       }
   ?>

Откако ќе пронајде услов кој се исполнува PHP престанува со барање друг случај.

Циклуси

Во програмирањето, често е потребно да се повторува еден ист блок од наредби. Тоа се случува одреден број пати, дадено од програмерот, или додека не се исполни некој услов. Ова се прави со наредби за скок или циклуси. PHP има две главни групи на овие наредби: for и while. Наредбата for, најмногу ни служи за повторување одреден број пати некои наредби да се извршуваат. Наредбата while, се користи за повторување на неодреден број пати, додека некој услов не се исполни. Овде се користат break и continue за контрола на скоковите.

while

Наредбата while извршува еден блок наредби, ако и додека еден услов е точен. Ако условот станува неточен, контролата се префрла на наредбата што следува после неа. Синтаксата е ваква:

   while (condition) 
   {
       naredbi;
   }

Блокот наредби кој е внатре во while циклусот секогаш е затворен со { и }. Овие загради му кажуваат на PHP кои наредби да ги повторува. while се користи за работење со листи каде што не се знае точниот број на елементи во неа:

   while (seuste ima redovi vo bazata)
   {
   	citaj od eden red;

pomini na sledniot red;

   }

Следниот пример извршува циклус каде што почетната вредност е 0. Овој циклус ќе се повторува се додека i е помала или еднаква на 10, а ќе се зголемува на секој скок:

   <?php
       $i = 0;
       while ($i <= 10)
       {
           echo "Brojot e: ".$i."<be/ >";
   	    $i++;
       }
   ?>

Сега да погледнеме покорисен пример. Еве како се прави паѓачко мени за денови, месеци и години. Овој код може да се искористи во форма за регистрација:

   <?php
       $month_array = array( "January", "February", "March", "April", "May", "June",
                     "July", "August", "September", "October", "November", "December");
       echo "<select name=\"day\">";
       $i = 1;
       while ( $i <= 31 ) {
           echo "<option value=".$i.">".$i."</option>";
          $i++;
       }
       echo "</select>";
       echo "<select name=\"month\">";
       $i = 0;
       while ( $i <= 11 ) {
           echo "<option value=".$i.">".$month_array[$i]."</option>";    
       $i++;
       }
       echo "</select>";
       echo "<select name=\"year\">";
       $i = 1900;
       while ( $i <= 2007 ) {    
          echo "<option value=".$i.">".$i."</option>";    
          $i++;
       }
       echo "</select>";
   ?>

Бидете сигурни дека условот во некој случај ќе стане неточен. Инаку, циклусот нема никогаш да заврши.

do...while

Наредбите do...while се слични на while, само што условот се проверува на крајот од секое извршување на наредбите во него. Тоа значи дека do...while секако ќе се изврши барем еднаш. Еве ја синтаксата:

   do
   {
       naredbi;
   }
   while (condition);

Следниот код, ќе ја зголемува вредноста на i за еден се додека таа е помала или еднаква на 10:

   <?php
        $i = 0;
        do {
    	    echo "Brojot e ".$i."<br/>";
	    $i++;
        }
        while ($i <= 10);
    ?>

for

Наредбата for се користи кога точно знаете колку пати сакате некоји наредби да се извршат. Затоа за for се вели дека е конечен циклус. Синтаксата е поразлична од претходните:

   for (inicijalizacija; uslov; skok)
   {
   	    naredbi;
   }

Трите изрази што ги добива for се разделени со ;. Ова се случува кога се извршува for: 1.Се иницијализираат бројачи, кои ќе се менуваат според скокот. 2.Се проверува условот. Ако условот е точен, се извршуваат наредбите внатре, ако не-се прекинува. 3.Се изменува бројачот според скокот. 4.Се извршуваат наредбите и контролата оди пак на чекор 2.

Еве еден едноставен пример:

   <?php 
        for ($i = 0; $i <= 10; $i++)
        {
            echo "Brojot e ".$i." <br/>";
        }
    ?>

Пр. со вгнездени циклуси:

   <?php
        echo "<h1>Multiplication table</h1>";
        echo "<table border=2 width=50%"; 

        for ($i = 1; $i <= 9; $i++ ) {   //nadvoresen ciklus
            echo "<tr>";
            echo "<td>".$i."</td>";
  
        for ( $j = 2; $j <= 9; $j++ ) { // vnatresen ciklus
            echo "<td>".$i * $j."</td>";
        }

        echo "</tr>";
        } 
        echo "</table>"; 
    ?>

Еве уште еден пример што користи две променливи. Една за да ги собира сите броеви од 1 до 10, а друга да ги собира само истите.

   <?php
        $total = 0;
        $even = 0;
        for ($x = 1, $y = 1; $x <=10; $x++, $y++)
        {
            if (($y % 2) == 0)
            {
                $even = $even + $y;
            }
            $total = $total + $x;
        }
        echo "Celiot zbir e ".$total."<br/>";
        echo "Zbirot na ednakvite e ".$even;
    ?>

foreach

foreach е варијација на for и помага да се итерира низ елементи од една низа. Има две различни варијанти на foreach циклусот:

   foreach (array as value)
   {
       naredbi;
   }

и

   foreach (array as key => value)
   {
       naredbi;
   }

Пример, печатење вредности од една низа:

   <?php
        $email = array('john.smith@server.com', 'alex@server.com' );
        foreach ($email as value)
        {
            echo "Sending mail to ".$value."<br/>";
        }
    ?>

PHP ги извршува наредбите кои му се дадени на foreach онолку пати колку што има вредности во низата. Елементите се пронаоѓаат според нивниот внатрешен редослед. Циклусот продолжува се додека не се поминат сите елементи и не дојде до крај на низата. Другиот вид на foreach наредби се користи со асоцијативни низи:

   <?php
        $person = array('name' => 'Andrew', 'age' => 21, 'address' => '77, Lincoln st.');
        foreach ($person as $key => $value)
        {
            echo $key." is ".$value."<br/>";
        }
    ?>

Во овој случај, клучот за дава на променливата $key, а вредноста на променливата $value. За време на извршувањето на foreach циклусот, тој не работи со вистинската низа, туку со копија од неа. За време на секој циклус, може да се манипулира со $value, но вистинската вредност останува иста.

break и continue

Понекогаш не треба да се чека циклусот да заврши сам од себе, туку треба да и се даде контрола на некоја наредба таа да го прекине. Тоа се извршува со continue и break. break, го прекинува тековниот while или for циклус и продолжува со извршување на кодот после нив. Дури може да се даде вредност после break, со која ќе се каже колку нивоа да бидат прескокнати. Еве пример за користење на break:

   <?php
        echo "<p><b>Example of using the Break statement:</b></p>";

        for ($i=0; $i<=10; $i++) { 
            if ($i==3){break;} 
            echo "The number is ".$i;
            echo "<br />"; 
        }

        echo "<p><b>One more example of using the Break statement:</b><p>";

        $i = 0;
        $j = 0;

        while ($i < 10) {
            while ($j < 10) {
                if ($j == 5) {
                    break 2;
                } // breaks out of two while loops
                $j++;
            }
            $i++;
        }

        echo "The first number is ".$i."<br />";
        echo "The second number is ".$j."<br />";
    ?>

Наредбата continue го прекинува извршувањето на блокот наредби и продолжува со извршување со следниот скок:

   <?php
        echo "<p><b>Example of using the Continue statement:</b><p>";

        for ($i=0; $i<=10; $i++) { 
            if (i==3){continue;} 
            echo "The number is ".$i; 
            echo "<br />"; 
        } 
    ?>

Функции

Функција е блок наредби, кои може да бидат повикани од кој и да е дел од скриптата откако таа ќе биде декларирана. Кодот запишан во функција се игнорира, се додека таа функција не се повика. Со ова се добива на брзина, се намалуваат грешките и се зголемува прегледноста затоа што не се користат долги, комплицирани кодови. За да се декларира функција, потребна е оваа синтакса:

   <?php
       function ime_na_funkcija(param_1, ... , param_n)
       {
           naredbi;
           return povratna_vrednost;
       }
   ?>

Во функциите може да се додаваат и други вредности како променливи, така што тие ќе бидат локални променливи.

Креирање едноставна функција

Првата функција, ќе отпечати "php rulez" пет пати, но таа нема да прими параметри. Втората ќе добие параметри. Параметарот е податок кој е потребен за функцијата да се изврши. Пр: <?php function first() { for($i = 0; $i !=5; $i++) echo "<p>php rulez!</p>"; } function second($num, $msg) { for($i = 0; $i != $num; $i++) echo "<p>". $msg ."</p>"; } echo "Ova e pred da se povikaat funkciite.<br>"; echo "Izlezot od prvata funkcija e: " first(); echo "Ova e izlezot od vtorata funkcija: " second(5, "bla bla bla"); echo "Ova e posle dvete funkcii<br>";  ?> Следниот пример, креира функција која може да пресмета аритметичка средина и да го даде резултатот: <?php function ar_sr($a, $b) { $result = ($a + $b) / 2; return $result; } echo ar_sr(4, 6), "<br>"; echo ar_sr(2314, 12412), "<br>";  ?>

Домен на променливите и време на живот

Важно е да се напомне дека ако дефинирате променливи внатре во функциите, таа променлива е достапна само внатре во функцијата. Таа не може да се користи во другиот дел од кодот или во друга функција. Доменот на променливите во функцијата е локален. Функцијата што треба да користи променлива која е дефинирана надвор од неа, мора да ја повика со клучниот збор global:

   <?php
        function AddingNumbers()
        {
            global $sum = 2 + 2;
        }
        $sum = 0;
        AddingNumbers();
        echo "2 + 2 = ".$sum;
    ?>

Додека доменот на променливата дефинирана во функцијата е локален, променливата во главниот код е глобална. Зборчето global му кажува на PHP да бара променлива надвор од функцијата. Променлива која е дефинирана во програмскиот код, е жива се додека скриптата се извршува. Кога таа ќе заврши, престанува да постои. Променлива која е во функција, постои се додека се извршува функцијата.

Обработка на форми со PHP

Една од најдобрите работи во PHP е можноста да одговори на барања на корисникот и да испраќа податоци од HTML форми. Можете да обработувате податоци генерирани од една HTML форма, да донесувате заклучоци врз основа на неа и да креирате динамични web страни.

HTML форма

Пред да почнете да ги обработувате информациите добиени од корисникот, треба да креирате HTML форма од која тие податоци ќе ги соберете. Има два методи кои се користат за праќање податоци: GET и POST. Овие два методи се дефинирани во HTML елементите, како нивни атрибути. Исто така ќе мора да дадете и адреса на датотеката која ќе ги обработува овие информации. Еве една HTML форма која ќе испраќа податоци, користејќи го POST методот. Информациите пратени од формата со овој метод се невидливи за другите и не е ограничена количината на податоци кои се праќаат. Името на оваа датотека нека биде form.html.

   <html> 
    <head> 
        <title>Process the HTML form data with the POST method</title> 
    </head> 
    <body> 
      <form name="myform" action="process.php" method="POST">
        <input type="hidden" name="check_submit" value="1" />
        Name: <input type="text" name="Name" /><br />
        Password: <input type="password" name="Password" maxlength="10" /><br />
        Select something from the list: <select name="Seasons">
          <option value="Spring" selected="selected">Spring</option>
          <option value="Summer">Summer</option>
          <option value="Autumn">Autumn</option>
          <option value="Winter">Winter</option>
        </select><br /><br />
        Choose one: 
          <input type="radio" name="Country" value="USA" /> USA
          <input type="radio" name="Country" value="Canada" /> Canada
          <input type="radio" name="Country" value="Other" /> Other
        <br />
        Choose the colors: 
          <input type="checkbox" name="Colors[]" value="green" checked="checked" /> Green
          <input type="checkbox" name="Colors[]" value="yellow" /> Yellow
          <input type="checkbox" name="Colors[]" value="red" /> Red
          <input type="checkbox" name="Colors[]" value="gray" /> Gray
        <br /><br />
        Comments:<br /> 
        <textarea name="Comments" rows="10" cols="60">Enter your comments here</textarea><br />
        <input type="submit" />
      </form>
    </body>
    </head>
    </html>

Примерот вклучува повеќе елементи: поле за внес на податоци, поле за избор од неколку можности, поле за текст и копче за испраќање на формата. Кога корисникот го притиснува копчето, податоците се праќаат до process.php датотеката. Забележувате дека на елементите за избор, обележано или не (checkbox), има додадено средни загради []. Ова му кажува на PHP дека вредностите овде може да се низа од податоци. Корисникот може да избере од повеќе вредности и PHP ќе ги смести нив во низа. Пр. ако изберете Green и Yellow и ја извршите формата, тогаш $_POST['Colors'] е низа. $_POST['Colors'][0] е Green, а $_POST['Colors'][1] е Yellow. Ова е затоа што атрибутот name на оваа контрола е со []. Ако не беше, $_POST['Colors'] ќе беше обичен текст кој содржи само една од избраните вредности.

Обработка на податоците од формата

Следно, треба да се направи PHP датотеката која ќе ја обработи формата. Кога ќе се изврши формата со кликнување на копчето (submit), тогаш автоматски се генерираат две суперглобални променливи: $_GET и $_POST, со сите податоци пратени co GET и POST соодветно. Така, контролата наречена Name, која беше пратена со POST, ќе биде зачувана како $_POST['Name']. Снимете го овој код во датотека process.php во истиот директориум како и form.html:

   <?php
    //Check whether the form has been submitted
    if (array_key_exists('check_submit', $_POST)) {
       //Converts the new line characters (\n) in the text area into HTML line breaks (the <br /> tag)
       $_POST['Comments'] = nl2br($_POST['Comments']); 
       //Check whether a $_GET['Languages'] is set
       if ( isset($_POST['Colors']) ) { 
         $_POST['Colors'] = implode(', ', $_POST['Colors']); //Converts an array into a single string
       }    
    
       //Let's now print out the received values in the browser
       echo "Your name: {$_POST['Name']}<br />";
       echo "Your password: {$_POST['Password']}<br />";
       echo "Your favourite season: {$_POST['Seasons']}<br /><br />";
       echo "Your comments:<br />{$_POST['Comments']}<br /><br />";
       echo "You are from: {$_POST['Country']}<br />";
       echo "Colors you chose: {$_POST['Colors']}<br />";
    } else {
        echo "You can't see this page without submitting the form.";
    }
    ?>

Во првиот ред, се проверува дали е страната со податоци испратена и оваа скрипта да не се изврши сама. Следно, се конвертираат новите редови во HTML
. Потоа се проверува дали низата полна, а ако е се користи функцијата implode() да се конвертира $_POST['Colors'] низата во една текстуална променлива. Последно, се печатат податоците во прелистувачот.

GET и POST

Кога дефинираме метод да испраќа податоци до PHP скрипта, користиме или GET или POST методи. И двата праќаат променливи до скриптата, но тоа го прават на различен начин. GET методот ги праќа своите променливи во адресата на web прелистувачот, во URL. Така пратените податоци, може лесно да се видат од од други корисници, а може и да се изменуваат. Затоа, овој метод не треба да се користи кога се праќаат шифри или други приватни податоци. Исто така, не треба да се користат кога се прават некои акции и измени на серверот, како менување и снимање податоци во бази. Меѓутоа, се користи поради тоа што кога податоците се прикажани во URL-то, таа страна може да се сними во омилени и да се запамти (bookmarks). Методот GET има лимит за пратените податоци. Така, како резултат на ова, ако испраќате голем број податоци има можност да изгубите голем дел од нив. Методот POST, ги праќа своите променливи во позадина и нема лимит на големината на испратените податоци. Бидејќи податоците не се пратени преку URL, не може оваа страна да се стави во омилени.

PHP колачиња

Колаче, е име кое се користи за порака која е пратена од web серверот до клиентскиот web прелистувач. Прелистувачот ги памти овие пораки во мали текстуални датотеки локално, на компјутерот на корисникот. Секој пат, кога истиот компјутер ќе побара страна, колачето се праќа назад до серверот. Има многу работи кои може да се прават користејќи колачиња. Тие се користат за чување податоци за корисникот, посетени страни, резултати од гласања итн. Главна намена на колачињата е да идентификуваат корисници и (ако е можно) да ги припремат страните за прикажување. Обично колачињата се користат за чување мала количина податоци. Web страните можат да ги читаат податоците од колачињата и да ги користат по потреба. Иако колачињата не можат да наштетат, некои корисници забрануваат пристап до нивните компјутери со помош на колачиња, бидејќи се загрижени за приватноста. Во овој случај мора да користите сесии (Sessions).

Како да се креира колаче?

PHP колачињата може да се креираат користејќи ја функцијата setcookie(). Синтаксата е следна: setcookie(name[, value[, expire[, path[, domain[, security]]]]])

[name] – Името на колачето. Имињата на сите пратени колачиња се снимани како суперглобална низа $_COOKIE. [value] – Вредноста на колачето. Таа е врзана со името. [expire] – Времето за кое колачето веќе нема да биде валидно (во секунди). [path] – Ја дава точната адреса на домејнот кој може да го користи тоа колаче. [domain] – Домејнот за кој колачето е валидно. Ако не е специфицирано, тогаш оваа вредност е домејнот на оној кој што го креирал колачето. [security] – Кажува дали колачето ќе биде пратено преку HTTPS. Вредноста 1 кажува дека ќе биде пратено преку сигурна врска, но дека може да не е сигурно. Колачето е обична текстуална датотека, па не е секогаш сигурно. Вредноста 0 значи дека ќе биде пратено низ стандарда HTTP постапка. Во овој пример, ќе се креира колаче со име "MyCookie" и ќе му се даде вредност "PHP tutorial". Исто така, се даваат информации дека колачето ќе престане да важи после 1 час и дека тоа важи за сите страни во директориумот tutorials.

   <?php
        setcookie("myCookie", "PHP Tutorial", time()+3600, "/tutorials");
    ?>

Поради начинот на кој работат колачињата со HTTP, важно е да се праќаат сите колачиња пред било каков излез на екран. Ова значи дека ќе се повикаат сите функции пред да се отпечатат или прикажат резултати. Ако не, тогаш PHP ќе соопшти и колачињата нема да бидат испратени.

Како да се добијат податоци од колаче?

Откако е направено колачето, податоците од него треба да се извлечат. Како што е претходно кажано, имињата на колачињата се снимени во суперглобалната низа $_COOKIE. Во овој случај, ќе се повика претходното колаче кое го креиравте:

   <?php
        echo "The cookie value is ".$_COOKIE['myCookie'];
    ?>

Излезот од ова е: "The cookie value is PHP Tutorial".

Како да се избрише колаче?

По правило, колачињата се бришат кога ќе се затвори прелистувачот. Тоа може да се измени со тоа што ќе се даде вредност, време, за колку тоа колаче да се избрише. За да се осигурате дека тоа време, не е поминато време (време во минатото), се користи функцијата time() која ќе го даде моменталното време.

Динамично генерирање слики

Динамичното генерирање слики може да биде многу корисна вештина. PHP има неколку вградени функции за генерирање слики, пр., да се генерираат, да се менуваат постоечки... За да се користат овие, треба да биде инсталирана GD библиотеката. Во овој туторијал, ќе биде покажано како да се добијат интересни и корисни ефекти користејќи функции за работа со слики. Ќе се разгледаат две практични операции: креирање сигурносни слики (captcha) и график користејќи нумерички вредности добиени од MySQL база на податоци.

Креирање сигурносни слики

Еве ја функцијата која креира сигурносна слика (captcha). Следно ќе биде детално разгледан секој чекор во генерирањето слика.

   <?php
        create_image();
        exit;

        function create_image()
        {
            $md5 = md5(rand(0,999));
            $pass = substr($md5, 10, 5);
            $width = 100;
            $height = 20;
            $image = ImageCreate($width, $height);
            $white = ImageColorAllocate($image, 255, 255, 255);
            $black = ImageColorAllocate($image, 0, 0, 0);
            $grey = ImageColorAllocate($image, 204, 204, 204);
            ImageFill($image, 0, 0, $black);
            ImageString($image, 3, 30, 3, $pass, $white);
            ImageRectangle($image, 0, 0, $width-1, $height – 1, $grey);
            imageline($image, 0, $height/2, $width, $height/2, $grey);
            imageline($image, $width/2, 0, $width/2, $height, $grey);
            header("Content-Type: image/jpeg");
            ImageJpeg($image);
            ImageDestroy($image);
        }
    ?>

За да се креира нова слика или да се измени постоечка, треба да се направи идентификатор за неа. Во претходниот пример, креиравме празен простор со повикување на функцијата ImageCreate() и со давање на параметрите $width и $height. Друг начин ова да се направи е со повикување слика од постоечка датотека. Во зависност од форматот на сликата, може да се користат следниве функции: ImageCreateFromPNG(), ImageCreateFromGIF(), ImageCreateFromJPEG(). Параметарот на секоја од овие функции е името на датотеката. Потоа треба да ги изберете боите кои ќе се користат при цртањето. За ова се користи функцијата ImageColorAllocate() и идентификатори за црвена, зелена и сина боја. Во следниот чекор, се генерира сликата. Прво користејќи ја функцијата ImageFill() креирате црна позадина. Параметри овде се идентификаторот за сликата, координати и боја. Тогаш користите ImageString() за да се додаде текст на сликата. Нејзини параметри се идентификатор за сликата, фонт, координати за текстот и боја на текстот. На крај, се цртаат две линии и правоаголник за да се заштити сликата. Правоаголникот е со димензии помали од целата слика, за да не се поклопи со рамката на сликата. Кога сликата е направена, може да ја користите како посебна слика и во прелистувач. Во овој пример е покажано како таа се користи директно во прелистувачот. Прелистувачот треба да се информира за тоа каква датотеката доаѓа кај него, па затоа се користи функцијата header() која кажува од кој MIME тип е датотеката. Откако ќе се заврши со работа со сликата, треба да се исчисти просторот кој таа го зафатила во меморија. За тоа се користи ImageDestroy().

Креирање график

Во следиот пример, ќе биде направен график користејќи податоци од MySQL база на податоци. Прво ќе биде дадено како да се направи базата и податоците во неа, а потоа пристапот до нив со PHP.

   CREATE DATABASE `poll`;
    USE poll;
    
    CREATE TABLE `results` ( 
       book_type VARCHAR(50), 
       num_votes INT
    );
    
    INSERT INTO `results` values  
        ('Classic', 15), 
        ('Fantasy', 7), 
        ('Humor', 32), 
        ('Mystery', 12), 
        ('Poetry', 25);

Скриптата за правење график е прилично долга, па ќе биде поделена на два дела и дискутирана поединечно. Првата скрипта се врзува за базата и ги зема податоците кои ќе бидат прикажани.

   <?php
        $dbhandle = mysql_connect("localhost", "root", "")
            or die("Unable to connect to mysql");
        $selected = mysql_select_db("poll", $dbhandle)
            or die("Cannot select examples");
        $result = mysql_query("SELECT * FROM results");
        $num_poller = mysql_num_rows($result);
        $total_votes = 0;
        while($row = mysql_fetch_array($result)){
            $total_votes += $row{'num_votes'};
        }
        mysql_data_seek($result, 0);
        mysql_close($dbhandle);

Во вториот дел на скриптата ќе биде пресметано се што е потребно за графикот. Тогаш ќе се спреми примарната слика и излезот со податоците. Резултатите од секој тип се добиени од базата, процентите се пресметани и столбовите и текстот под нив се прикажани. Во оваа скрипта ќе се користат TrueType фонтови. Прво треба да се даде адресата на која се наоѓаат фонтовите. За ова постои системска променива GDFONTPATH. Потоа се кажува името на фонтот. TrueType фонтовите се обработуваат со ImageTTFText(). Еве ја и скриптата. Таа користи функции кои веќе се објаснети во цртањето сигурносна слика:

   putenv('GDFONTPATH='pateka_do_font');
    $font = 'arial';
    $y = 50;
    $width = 700; //Image width in pixels
    $bar_height = 20; //Bars height
    $height = $num_poller * $bar_height * 1.5 + 70; //Calculating image height 
    $bar_unit = ($width - 400) / 100; //Distance on the bar chart standing for 1 unit
    
    //Create the image resource 
    $image = ImageCreate($width, $height); 
    
    //We are making four colors, white, black, blue and red 
    $white = ImageColorAllocate($image, 255, 255, 255); 
    $black = ImageColorAllocate($image, 0, 0, 0); 
    $red = ImageColorAllocate($image, 255, 0, 0); 
    $blue = imagecolorallocate($image,0,0,255); 
    
    //Create image background 
    ImageFill($image,$width,$height,$white); 
    //Draw background shape 
    ImageRectangle($image, 0, 0, $width-1, $height-1, $black); 
    //Output header 
    ImageTTFText($image, 16, 0, $width/3 + 50, $y - 20, $black, $font, 'Poll Results'); 
    
    while ($row = mysql_fetch_object($result)) { 
        if ($total_votes > 0) 
            $percent = intval(round(($row->num_votes/$total_votes)*100)); 
        else 
        $percent = 0; 
    
        //Output header for a particular value 
        ImageTTFText($image,12,0,10, $y+($bar_height/2), $black, $font, $row->book_type); 
        //Output percentage for a particular value 
        ImageTTFText($image, 12, 0, 170, $y + ($bar_height/2),$red,$font,$percent.'%'); 
    
        $bar_length = $percent * $bar_unit; 
    
        //Draw a shape that corresponds to 100% 
        ImageRectangle($image, $bar_length+221, $y-2, (220+(100*$bar_unit)), $y+$bar_height, $black); 
        //Output a bar for a particular value 
        ImageFilledRectangle($image,220,$y-2,220+$bar_length, $y+$bar_height, $blue); 
        //Output the number of votes 
        ImageTTFText($image, 12, 0, 250+100*$bar_unit, $y+($bar_height/2), $black, $font, $row->num_votes.' votes cast.'); 
    
        //Going down to the next bar 
        $y = $y + ($bar_height * 1.5); 
        
    } 

    //Tell the browser what kind of file is come in 
    header("Content-Type: image/jpeg"); 
    
    //Output the newly created image in jpeg format 
    ImageJpeg($image); 
    
    //Free up resources 
    ImageDestroy($image); 
    ?>

Користење динамички генерирани слики на други страници

Бидејќи заглавјето (header), се испраќа само еднаш до серверот и тоа е единствениот начин да му се каже на прелистувачот што да очекува, не е лесно да се стават автоматски генерирани слики. Има три начини да се направи тоа: 1.Целата страна да зависи од сликата 2.Ќе ја снимите сликата како некоја датотека ќе се обраќате кон неа со <img> 3.Ќе ставите скрипта која сама ќе генерира слика во <img>

   <img height="120" alt="Dynamically generated image" src="generate_image.php" width="200">

Безбедно качување датотеки на сервер

PHP го прави качувањето датотеки на сервер едноставно. Можете да качите каква и да е датотека на web серверот. Но со едноставноста доаѓа и опасноста, па мора да бидете внимателни кога дозволувате качување. Во овој туторијал ќе биде разгледано како да качите датотеки во одреден директориум на web серверот, а притоа да не настанат проблеми и ќе бидат разгледани безбедносните проблеми кои може да се јават.

HTML форма

Пред да го користите PHP за управување со датотеките, треба да се направи HTML формата која ќе даде интерфејс за корисникот, да ја пронајде и качи својата датотека.

   <html> 
    <body>
      <form enctype="multipart/form-data" action="upload.php" method="post">
        <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
        Choose a file to upload: <input name="uploaded_file" type="file" />
        <input type="submit" value="Upload" />
      </form> 
    </body> 
    </html>
    

Има неколку правила што треба да ги знаете за кога правите HTML форма. Прво, бидете сигурни дека го користите POST методот. Второ, на формата и е потребен enctype="multipart/form-data" атрибутот. Без ова качувањето на датотеки нема да работи. Друго нешто што треба да се спомне е скриеното поле во формата, наречено MAX_FILE_SIZE. Некои прелистувачи ја гледаат оваа променлива и нема да дозволат качување на датотеки поголеми од овој број (во бајти). За оваа променлива треба да внесете број ист како што е внесено во php.ini датотеката, за најголемо качување на датотеки. Во php.ini е внесено upload_max_filesize = 2MB. Но, сепак не можете да бидете сигурни дека скриптата нема да биде нападната со поголем број податоци. На пр., напаѓач може да внесе во скриптата повеќе датотеки со максимална големина, со цел да се сруши серверот. Затоа, наместете го post_max_size во php.ini на максималната големина што сакате да ја добие Вашиот web сервер (мора да биде поголема од upload_max_filesize). Основната вредност е 10МВ. Ова ја контролира максималната големина на сите POST податоци, во еден обид. Исто така осигурајте се дека file_uploads во php.ini е наместен на On. Погледнете го делот со type="file". Тоа е наместено така, за да овозможи наоѓање датотеки на системот. Овозможува внесување адреса до датотеката и копче Browse. Кога корисникот внесува патека до датотеката, кликнува на копчето Submit и датотеката ќе биде пратена до upload.php. PHP скриптата ја превзема контролата.

Обработување на податоците од формата

Кога датотеката е качена, PHP креира привремена копија од неа и гради суперглобална низа $_FILES која содржи податоци за датотеката. За секоја датотека се запишуваат пет податоци: $_FILES["uploaded_file"]["name"] – Оригиналното име на датотеката од корисничката машина $_FILES["uploaded_file"]["type"] – MIME типот на качената датотека $_FILES["uploaded_file"]["size"] – големината на качената датотека $_FILES["uploaded_file"]["tmp_name"] – локацијата на која е снимена датотеката привремено $_FILES["uploaded_file"]["error"] – код со грешка која се јавила за време на качувањето Следниот пример покажува прифаќање на датотека и нејзино снимање во директориум upload. Скриптата дозволува качување само на JPEG слики помали од 350КВ:

   <?php
    if ((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
        $filename = basename($_FILES['uploaded_file']['name']);
        $ext = substr($filename, strpos($filename, '.') + 1);
        if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && ($_FILES["uploaded_file"]["size"] < 350000)) {
            $newname = dirname(__FILE__).'/upload/'.$filename;
            if (!file_exists($newname)) {
                if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $newname))){
                    echo "It's done! The file is saved as: ".$newname;
                } else {
                    echo "Error: a problem occurred during file upload";
                }
            } else {
                echo "Error: File ".$_FILES["uploaded_file"]["name"]." already exists";
            }
        } else {
            echo "Error: Only .jpg images under 350Kb are accepted for upload";
        }
    } else {
        echo "Error: No file uploaded";
    }
    ?>

Пред што и да правите со качените датотеки, треба да проверите дали тие се вистински качени. Потоа проверувате дали датотеката е JPEG и нејзината големина помала од 350KB. Следно, се проверува дали постои патеката на која треба да се качи датотеката и дали постои веќе некоја со исто име. Откако ќе се завршат овие проверки, се копира датотеката од локалниот компјутер на серверот. Ако е качувањето успешно, ќе биде објавена позитивна порака. Бидете сигурни дека датотеката на која сакате да запишувате на web серверот има дозвола за запишување и читање.

Праќање e-mail (Текст/HTML/Датотеки)

Email е најпознатиот сервис на Интернет денес. Целта на овој туторијал е да покаже како да генерирате и праќате email со PHP. Email може да се праќа од апликацијата со директно барање на корисникот или пак на одредено време, пр. месечен весник. Понекогаш email-от содржи датотеки кои се прикачени на него. Тие можат да бидат чист текст, HTML делови и др. За да се разбере како функционира праќањето email ќе почнеме од поедноставни примери. Забелешка: За да праќате email со PHP Ви треба функционален email сервер на кој имате дозвола да работите: за UNIX често е Sendmail, за Windows мора да се намести SMTP наредбата во php.ini да покажува на email серверот.