01
- PHP - SissejuhatusAntud
moodul on järgmine samm veebitehnoloogia
õppimisel pärast
HTML5 ja
CSS3 õppimist. Siin õpime kuidas puuta koduleht PHP ja
MySQL abil
dünaamiliseks. Antud kursuse puhul olen aluseks
võtnud vanema php
kursuse, mis pärineb aastast 2009 ning oli
toetatud
e-ope.ee poolt.
Et vanemast materjalist mingi
jälg maha
jääks , lisasin selle
PDF
dokumenti.
Kui
materjal on juba olemas, siis miks uuesti? Selle aja jooksul on
tekkinud parem arusaam, kui hästi õpilased materjali omandavad ning
milline võiks olla parem struktuur. Lisaks sellele tahan iga
materjaliga anda kaasa kenasti
esitluse ning luua videoõpetused.
Kellele
on kursus mõeldud?Kursuse
loomisel olen eelkõige silmas pidanud oma õpilasi, kellele tuleb
see kõik kenasti selgeks teha. Kuid loodan, et sellest on ka
teistele kasu, kellega ma kokku otseselt ei
puutu . Kursus on
ülesehitatud
selliselt , et üheskoos tehakse läbi harjutused ning
ülesanded jäävad iseseisvaks lahendamiseks.
Vajalikud
eelteadmisedPHP
mooduli kirjutamisel olen eeldanud, et õppur on enesele juba selgeks
teinud nii HTML5 kui ka CSS3 osa. Kui kasutaja on õppinud kunagi
mingisugust teist programmeerimiskeelt, siis teeb see ainult head ja
kiirendab asjadest
arusaamist .
Käsitletavad
teemadAlustame
ülevaatest, mis on
dünaamiline koduleht ning mis rolli mängib siin
PHP. Seejärel kuulub suurem osa ajast just PHP'le, kus alustame
muutujatest ja massiividest ja seome selle kõik andmebaasiga MySql.
Hetkel on plaanis siduda tugevamalt ka OOP
lähenemine , aga vaatame
kuidas läheb. Peamine eesmärk on luua dünaamiline koduleht, mis on
hallatav läbi
administraatori liidese.
Kasulikud
lingidPanen siia kirja mõningad eesti keelsed
veebilehed , kust võib veel abi
saada:
Mis
edasi?Varu
aega ja kannatust ning soovitan ära teha kõik harjutused. Jõudu
tööle!
02
- PHP - Mis on PHP?TeemadMis
on veebiserver?Oma
veebilehe kuvamiseks on sul vaja veebileht üles
laadida veebiserverisse.
Veebiserver on lihtsalt arvutitarkvara, mille ülesandeks on
edastada sinna salvestatud
HTML-dokumente,
kasutades selleks
HTTP edastusprotokolli.
See tähendab, et kasutaja sisestab HTML dokumenti aadressi, näiteks
metshein .com/test.html. Faili olemasolul
saadetakse see kasutajale
ning
veebilehitseja loob sellest "vaadatava" veebilehe.
Juhul kui oled kodulehele lisanud kujundusfaili, pilte või
javascripti, siis lisatakse see kõik kaasa. Hetkel kõige suurema
osa
veebiserveri tarkvarast on endale haaranud tasuta
Apache HTTP Server (61,4%),
millele saab kõige lähemale
Microsoft IIS (14,6%).
Seda
nö. tavalist veebilehte, mille sisu ei muutu,
nimetatakse
staatiliseks
veebileheks.
Kindlasti on sellel oma koht, selles keerulises maailmas, kuid
tavaliselt sellega asi ei piirdu. Näiteks oleks vaja lisada
jooksvalt uudiseid, lubada kommentaare, hallata kasutajaid, saata
emaile jne. Selle jaoks tuleb serverisse paigaldada lisatarkvara, mis
selle eest vastutab, näiteks:
Näiteks
sisestades veebiaadressi, kus nõuame serverilt test.php faili, siis
veebiserver tuvastab faililõpu järgi php faili ning suunab selle
php-mootorile. See teeb omad järeldused koodist ja suhtleb vajadusel
andmebaasiga. Lõpptulemusena
luuakse serveri ja veebilehitseja jaoks
juba tuttav HTML kood. Hetkest, mil HTML kood genereeritakse
reaalajas, nimetatakse
dünaamiliseks
veebileheks.
Dünaamilist
veebilehe kood ja päringud andmebaasi jäävad kasutaja jaoks alati
nähtamatuks.
Mis
on PHP?Lähtudes
dünaamilise veebilehe kirjeldusest, saame PHP'd
nimetada
serveripoolseks
skriptimiskeeleks.
See tähendab, et koodi käivitamiseks on alati vaja PHP
toega serverit. Serverit on võimalik teatud tasu eest rentida või ise
ülesehitada. Seda viimast teeme ka meie ja juba järgmises peatükis.
PHP
kirjeldamisel kasutatakse ka tihti mõistet veebiprogrammeerimine,
mis ei ole
sugugi nii vale, sest keel on ise mõjutatud teistest
keeltest nagu C, Perl, Java, C++, Tcl jne. Seega sobib antud keel ka
programmeermisaluste õpetamiseks.
PHP
sündimise luguPhp
loojaks on taanlane
Rasmus
Lerdorf,
kes tegi
1994.a enda
jaoks Perl skriptide
kogumiku , mida hakkas nimetama
Personal
Home
Page
tools . Ta tegi selle kõigile kättesaadavaks. 1997.a. kirjutati kood
peaaegu täielikult ümber ning otsustati nimetada PHP järglaseks
ning sellele anti versiooninumber PHP3. Lisaks uuele
tuumale anti ka
sellele uus nimi -
Hypertext
Preprocessor.
Ikka
jälle ja jälle koodi parandades on hetkel väljas
versioon PHP5 ning
see
jookseb Zend Engine 2.0 tuumal.
PHP
süntaks ja kommentaaridPHP
koodi kirjutamisel on oluline, et see jääks siltide
vahele ning iga lause lõppeb semikooloniga!.
Koodi
võib lisada nii HTML koodi sisse, kui ka eraldi skriptina. NB! Koodi
käivitamiseks peab faili lõpp olema
*.php!
PHP
plussid ja miinused - Lihtne - lihtne õppida ja juba õpingute alguses saad panna kodoi "midagi" tegema. Samal ajal peetakse seda ka negatiivseks, sest igaüks saab kirjutada koodi ja nö rämpsskripte võib leida kõikjalt
- Kommuun - seda kasutavad kõik ja abi on google otsingusõna kaugusel
- Arenev - ikka aegajalt avastatakse, et midagi on puudu või valesti ning asja püütakse parandada
- Platvormist sõltumatu - kuna kood genereerib lõpptulemusena HTML'i, siis ei puutu see kokku kasutaja seadete või programmidega
- Suurepärane suhtlusoskus vabavaralise andmebaasiga MySql
- OOP tugi, mis lubab suurendada funktsionaalsust ja arendada modulaarsust
RedaktoridPHP
koodi saab kirjutada täiesti tavalise Notepad'iga, kuid tunduvalt
mugavam on kirjutada seda programmidega, mis kuvab koodi värvilisena,
lubab
salvestada koodijupikesi, käivitada php koodi jne.
- Notepad++
- Sublime Text 2
- Adobe Dreamweaver CS6 (30 päeva tasuta)
Kordamine - Mis ülesannet täidab veebiserver?
- Milline on kõige populaarsem veebiserveri tarkvara ?
- Põhiline erinevus staatilisel ja dünaamilisel kodulehel?
- Mis on PHP ja miks see on nii populaarne ?
- Milline on php süntaks?
03
- PHP - Ettevalmistused koodiga töötamiseksTeemad - Mis on WAMP
- WAMP serveri allalaadimine
- WAMP serveri paigaldus
- WAMP serveri käivitamine
- PHP käivitamine WAMP serveris
- Alternatiivid WAMP'ile
- Adobe Dreamweaver seadistamine
SissejuhatusPHP
koodi kompileerimiseks oleks vaja PHP mootori toega veebiserverit
ning veebilehe lõplikuks ülesehitamiseks ka kindlasti mingisugust
andmebaasi. Üks võimalus on "ehitada" veebiserver oma
arvutisse , kasutades selleks WAMP serverit.
Mis
on WAMP?WAMP
serveri puhul on tegemist veebiserveri tarkvarapaketiga, mis
paigaldab väikese vaevaga sinu
Windows arvutisse korraga nii
veebiserveri
Apache,
andmebaasi
MySQL ja
meie soovitud
Php mootori.
Jah, me saame selle kõik paigaldada oma tavalisse laua- või
sülearvutisse ning see käitub tavalise veebiserverina. Eeliseks oma
arvutisse paigaldamisel on üleslaadimise, testimise ja muutmise
kiirus.
Linux fännid võiks proovida LAMP serverit.
AllalaadimineWampServeri
leiad aadressilt
http://www.wampserver.com/en/ .
Seejärel
kliki nupul
Download ja
leia oma süsteemile vastav versioon. Mina teen valiku
WAMPSERVER
(64 BITS & PHP 5.3) 2.2E.
Klikkides
oma
valikul antakse kolm hoiatust, kus esimest korda WampServeri
paigaldamisel on kõige tähtsam paigaldada arvutisse
Visual C++ 2010 SP1.Kuna
minu arvutis on need kenasti tehtud, klikin tekstile
you
can download it directly.
Selle peale alustatakse faili allalaadimist SourceForge kodulehelt.
Pärast faili allalaadimist saad WampServeri kenasti arvutisse
paigaldada.
PaigaldaminePaigaldamiseks
leia üles allalaetud WAMPSERVER fail ning tee sellel topeltklikk.
Paigalduse
alguses võidakse hoiatada tundmatu tootja eest, aga surume
hirmud alla ja käivitame soovitud faili.
Avanenud
aknas tervitatakse kasutajat ja näidatakse paigaldatav tarkvara.
Kuna me oleme endiselt kindlad, et seda tahame, siis
vajuta Next.
Järgmises aknas kuvatakse hästi oluline leping, millega peame nõus
olema, kui tahame seda tarkvara kasutada -
I accept the agreement>NextPaigaldamine
soovitatavasse
c:\wamp kataloogi ja vajutame
Next.
Uues aknas saame lisada
valikud , kui
soovime käivitusikooni
töölauale või kiirpääsuribale. Vajuta
Next.
Pärast
vaevarikast Next nupule vajutamist antakse lõpuks võimalus tarkvara
arvutisse paigaldada. Vajuta
Install ja
kannata kuni tarkvara on sinu arvutis.
Paigaldamise
käigus küsitakse sul vaikimisi veebilehitsejat, kui
Internet Explorer sobib, siis vajuta lihtsalt
Open .
Edasi
päritakse ka sinu emaili kohta, mis
jäta nii nagu on ja tulemüüri
reageerimisel luba
serveril kasutada internetti.
Edukast
paigaldamisest annab märku aken, kus on võimalik
pärast
Finish vajutamist
server koheselt käivitada -
Launch
WampServer 2 now.
Aga mina eemaldan valiku ja käivitan serveri Start-menüüst.
WampServer
käivitamine ja haldamineServeri
käivitamiseks leia üles selle käivitamise
ikoon ja lihtsalt kliki
sellel.
Programmi
edukal käivitumisel kuvatakse ekraani alumises parempoolses
nurgas roheline ikoon.
Mitteedukal
käivitamisel on see punane või kollane, põhjuseks siis mõne
teenuse mittetöötamine.
Mittetöötamise
võivad põhjustada näiteks arvutis töötav
Skype või mõni teine
veebiserver. Ette on tulnud ka juhtumeid, kus Apache teenus ei
käivitu korralikult. Selleks tee all nurgas olevale ikoonile
hiire
vasaku
klahviga klikk ning see avab serveri
menüü .
Liigume
valikusse
Apache> Service >Install
Service See
avab meile
konsooli akna, kus palutakse
vajutada Enter ei
paigaldada teenus.
Pärast
ebaõnnestunud käiku, kliki uuesti ikoonil ing vali
TestimineTestimiseks
avame veebikataloogi C:\wamp\www või klikime serveri ikoonil ja
valime
www
directory.
See
avab kataloogi, kuhu midagi lisades näeme seda nö. veebilehel.
Vaikimisi on seal
index.php.
Oma testlehe tegemiseks teen faili
test.php ja
kirjutan sisse tervituse.
?1
Salvesta
:)
Faili
testimiseks kirjutan veebilehe aadressiks
localhost või
127.0.0.1.
Ning kuna
viidatud kohas on kenasti olemas fail
index.php siis
kuvatakse selle sisu.
Localhost aadressi
saab avada kiiresti, kui klikkida serveri ikoonil.
Oma
testfaili nägemiseks lisan faili lõppu failinime.
Ehk
siis kõige lihtsam viis ongi teha kataloogis vastavas
failis muudatused ning veebilehitsejas vajutada
Refresh (F5).
AlternatiividLisan
siia mõningad alternatiivid WAMP'ile.
PHP
seadistamine programmis Adobe Dreamweaver CS6Adobe
Dreamweaver CS6 on suurepärane vahend PHP koodi kirjutamiseks ja
testimiseks. Nimelt lubab Dreamweaver
seadistada kodulehe projekt
nii, et saate PHP koodi testida otse programmis. Kuna nii mõnigi
kasutab seda, siis panen selle ka kirja.
Uue
projekti loomiseks vali menüüst
Site>New
Site.
Avanenud
aknas anna on projektile nimi ning vali selle asukoht, mis peab asuma
veebiserveri juurkataloogis. Kui nimes võid kasutada täpitähti ja
tühikuid, siis kataloogi puhul palun seda vältida.
Seejärel
vali küljemneüüst
Server ning
kliki
+-märki
'Add
new server'Selle
kohapeal tuleb seadistada server:
- Server Name: serveri nimi
- Connect using: Local /Network
- Server Folder: sama kataloog , kus hoiad oma php-faile
- Web URL: veebilehe aadress
Serveri
täiendavad
seaded leiad nupu alt
Advanced .
Siin eemalda valik
Maintain synchronization information ja
vali serveri tüübiks
PHP
MySQL.Serveri
seadistuse lõpetamiseks vajuta nuppu
Save.
Nüüd eemalda valik Remote juures ja lisa valik
Testing järgi.
Lõpetamiseks
vajuta
Save. See
tähendab, et ma saan programmis luua faile otse veebiserverisse ning
lülitades sisse
LIVE ,
kuvatakse php vastus.
Kordamine
04
- PHP - Muutujad (Ülesanne 1)Teemad - Kommentaarid
- Muutujate loomine ja väärtuste omistamine
- Muutujate väljastamine
- Muutujate sidumine tekstiga ja omavahel
- Andmetüübid
KommentaaridEnne
kui me alustame igasuguse koodi kirjutamist, siis on hea tava, et
koodi olulisemad sõlmed kommenteeritakse. See on kasulik nii endale
kui teistele, kes peavad sinu koodi kunagi
muutma hakata. Mitme rea
kommenteerimiseks lisame teksti
/* ja
*/ märgendite
vahele.
?1
2
3
4
5
6
7
Reeglina
kasutatakse seda näiteks koodi
algusesse info lisamiseks või hiljem
koodiosade peitmiseks. Näiteks lisame koodi algusesse harjutuse
kirjelduse:
?1
2
3
4
5
6
7
8
Kommentaari
märgendite vahele lisatud sisu veebilehe külastaja ei näe!
Üherealise
kommentaari lisamiseks kasuta
// või
#,
kuigi viimast kasutatakse vähem. Ning kasuta seda just koodiplokkide
tähistamiseks, sest iga rea kommenteerimine nõuab liiga palju
resurssi .
?1
2
3
Muutujate
loomineMuutujad
on
nimelised mälupesad, millele on omistatud mingi väärtus.
Põhimõtteliselt võiks seda kirjeldada kui konteinerit, mille
sisuks võib olla näiteks tekst või number. Ja kuna tegemist on
muutujaga, siis selle sisu võib alati muutuda. Meie võimuses on
määrata ise muutujale nimi ja määrata, mis on selle sisuks -
oluline on et
muutuja algaks dollariga ($).
Näiteks:
mul on vaja hoida mälus eesnimesid. Selleks pean välja mõtlema
muutujale nime, millel võiks olla mingi tähendus. Valin
selleksks
$enimi.
Nüüd omistan (=) sellele tekstilise väärtuse näiteks
"Karin".
PHP's tuleb see kirja panna nii:
$enimi="Karin".
NB!
Kõik tekstid lisatakse jutumärkide vahele! Kasutusel on nii
ühekordsed (' ') kui ka kahekordsed (" ")
jutumärgid . Mis
on nende vahe, vaatame kohe allpool.
Muutuja
nime andminePanen
keelud ja
lubadused loendina, sest nii peaks asjad paremini meelde
jääma :
- Iga muutujal peaks olema tähendus (see annab võimaluse hiljem koodist paremini aru saada)
- Nime andmisel kasuta tähestikkus A-Z, võimalusel ära kasuta täpitähti Ä. Õ, Ü ja Ö
- Kasutada võid nii suuri kui väikesi tähti, kuid muutujad on tõstutundlikud
- Kasutada võid numbreid 0-9, kuid ära kunagi nendega alusta
- tühikud on keelatud, kasuta nende asemel allkriipsu (_)
- sümbolid ja erimärgid on keelatud
Igas
programmeerimiskeeles on keele poolt reserveeritud muutujad, mida
kasutaja ei saa enam luua. Php omad leiad
siit.
Muutujale
väärtuse omistamineMuutujaid
PHP's on kaheksa erinevat tüüpi, aga vaatame neist praegu kolme:
- tekstid (strings) - tekstilised väärtused, mis lisatakse jutumärkide vahele
- täisarvud(integers) - tavalised arvud, nii positiivsed kui negatiivsed
- murdarvud ( double ) - komaga arvud, kusjuures koma tähistatakse punktiga
?1
2
3
4
5
6
7
Pane
tähele, et arve ei lisata jutumärkide vahele!
Muutujate
väljastamineMuutuja
väärtuste kuvamiseks kasutame PHP funktsiooni
echo .
?1
2
3
4
5
6
7
8
9
10
11
12
Koodi
käivitamisel kuvatakse kõik väärtused ühel
real .
Muutujate liitmine PHP
lubab liita omavahel nii muutujaid kui teisi tekstiosi. Näiteks
võiks ees- ja perenime ühendada ühte muutujasse. Selleks tuleb
luua uus muutuja ning
olemasolevad saame ühendada puntki (.) abil.
?1
2
3
4
5
6
7
8
Kahjuks
endiselt sulatatakse veebilehel kõik kokku. Selle parandamiseks
saame lisada muutujale erinevaid tekstiosi, nagu näiteks tühiku.
?1
2
3
4
5
6
7
8
9
10
11
12
Sama
tehnikat saame kasutada muutujate väljastamisel.
?1
echo 'Tere '.$nimi;
Soovides
lisada HTML koodi, siis tuleb ka see lisada jutumärkide vahele.
Lisame näiteks reavahetuse
. Hetke kogu kood võiks välja
näha selline:
?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TekstiväärtusedTahan
nüüd juhtida tähelepanu jutumärkide erinevusse: ühe- või
kahekordsed! Reegel võiks siinkohal olla selline, et kasuta läbi
projekti ainult ühte tüüpi jutumärke ja äärmisel vajadusel
kasuta samaaegselt teisi. Erinevus on muutuja väärtuste
väljastamisel. Nimelt
eespool nägime, et ühekordsete jutumärkide
puhul pidime muutujad ja teksti siduma omavahel punktiga.
Topeltjutumärkide puhul võite aga kirjutada muutujad otse muutuja
sisse.
?1
2
3
4
5
//kahekordsed jutumärgid
echo "$nimi on $vanus aastane
//ühekordsed jutumärgid
echo $nimi.' on '.$vanus.' aastane
Testides
on topeltjutumärkide kasutamine ka natukene kiirem
(
www.phpbench.com).
Topeltjutumärkidega saame muutujat jätkata muu teksiga - näiteks
käänata. Ning selleks tuleb kasutada loogelisi
sulge muutuja nimes.
?1
2
//muutuja
käänamine echo "${enimi}il on kiire auto!
Aga
mis saab siis kui on vaja tekstis kuvada jutumärke ja/või ülekoma?
Sel juhul kasuta väljaspool teisi
märke . Näiteks soovid tekstis
kuvada kahekordseid jutumärke, siis väljapoole lisa ühekordsed ja
vastupidi.
?1
2
3
//jutumärkide
kuvamine echo '"Welcome to Estonia"
echo "
Shakespeare 'i teosed
Probleem
peaks
tekkima siis kui väljastatavas lauses on mõlemad märgid,
näiteks "It's My Life" - Dr.
Alban . Sellisel juhul
tuleb kasutada kasutada langjoont (\) sama jutumärgi ees, mis on
väljaspool.
?1
echo "\"It's My Life\" - Dr. Alban
Kui
ma oleks kasutanud väljaspool ühekordseid jutumärke, siis oleks
pidanud langjoone panema
ülakoma ette. Kasuta sama tehnikat, kui on
vaja kuvada langjoont ennast.
Ülesanne
1 - Iga ülesanne hakkab kommentaariga, kus on kirjas ülesande number, sinu nimi ja kuupäev
- Programm väljastab kolme muutuja (nimi, vanus, sugu) väärtused ühe koodireaga. Kusjuures kõik on väljastades eraldi real. Vastus täislausega.
- Väljasta järgnev lause: "It's Alright, Ma (I'm Only Bleeding)" - Bob Dylan
- "Joonista" järgmised pildid
05
- PHP - Matemaatilised tehted (Ülesanne 2)TeemadAritmeetilised
tehtedPHP
saab hakkama ka kenasti lihtsate matemaatiliste tehetega nagu on seda
liitmine, lahutamine, jagamine, korrutamine ja jäägiga.
Liita
võib omavahel nii arve kui ka muutujate arvulisi väärtusi.
?1
2
3
4
5
6
7
8
9
//aritmeetilised operaatorid
$x = 8;
$y = 2;
$
liitm = $x + $y;
$
lahut = $x - $y;
$
korru = $x * $y;
$jagam = $x / $y;
$jaak = $x % $y;
echo "Vastused: $liitm, $lahut, $korru, $jagam, $jaak";
Aritmeetiliste
operaatorite hulka loetakse operaatoreid, mis suurendavad või
vähendavad arvu ühe võrra.
Reeglina
kasutatakse antud võimalust mõnes
tsüklis , aga hetkel võtame
lihtsalt ühe muutuja väärtuse ja
suurendama ühe võrra.
?1
2
3
4
//suurendamine ühe võrra
$x = 10;
$x++; //sama mis $x = $x + 1
echo $x;
Omistamise
operaatoridSelle
pealkirja all tahan tutvustada nö. omistamise operaatoreid, mille
eesmärk on ennekõike lühendada koodi kirjutamist.
?1
2
3
4
//omistamise operaatorid
$x = 8;
$y = 2;
echo $x *= $y;
Sama
asja saab kasutada ka tekstiosade liitmiseks.
?1
2
3
4
$nimi = 'Mari';
$pnimi = 'Kisakõri';
$nimi .= $pnimi;
echo $nimi;
Arvude
ja teksti vormindamineSiiani
oleme
lauseid väljastanud funktsiooni
echo abil.
Leidub ka teisi võimalusi, millest igaühel on oma ülesanne. Üks
nendest on
printf,
mis lisaks väljastamisele vormindab selle. Selleks tuleb lausesse
märkida protsendimärgi (%) abil koht kuhu väärtust soovid ning
seejärel väärtus. Järgmises näites on kohahoidjaks
%s,
mis vormindab väärtuse tekstina.
?1
2
3
//muutuja väärtuste vormindamine
$nimi = 'Mari';
printf('Tere %s', $nimi);
Soovid
lausese teisigi väärtusi? Pole probleem, lisa julgelt kohahoidjaid
ning lisa soovitud väärtused.
?1
2
3
4
//muutuja väärtuste vormindamine
$nimi = 'Mari';
$vanus = 27;
printf('%s on %s aastane.', $nimi, $vanus);
Hetkel
vormindati vanus tekstina! Kena oleks
vist ikkagi see arvuna esitada,
mille jaoks kasutame
%d.
?1
2
3
4
//muutuja väärtuste vormindamine
$nimi = 'Mari';
$vanus = 27;
printf('%s on %d aastane.', $nimi, $vanus);
Järgmises
tabelis toon välja ka teised vormindamise võimalused.
Hetkel
lasime funktsioonil kasutada vaikimisi vormindust, näiteks komaarvu
teisendab see kuus komakohta. Õnneks laseb PHP meil määrata, mitu
komakohta me ikkagi soovime. Näiteks
%0.3fabil,
kuvatakse kolm komakohta.
?1
2
3
4
$i = 7.26;
$j = 2.369;
$k = $i / $j;
printf('Vastus: %0.3f', $k);
Väljundi
erinevad vormindamise võimalused
leiad
www.php.net/ manual /en/ function .sprintf.php aadressilt.
Enne
kui selle peatüki lukku paneme, siis üks asi
huvitab meid veel!
Nimelt oleks meil soov panne vormindatud lause muutujasse ja seda
suvalisel hetkel välja kutsuda. Kui hetkel panna see lause
muutujasse, siis muutujasse lisatud väärtus kuvatakse igaljuhul
ning väljakutsutud muutuja kuvab tähemärkide arvu. Vormindatud
lause saab muutujasse lisada
sprintf funktsiooni
abil.
?1
2
3
4
5
$i = 7.26;
$j = 2.369;
$k = $i / $j;
$vormindatud = sprintf('Vastuse: %0.3f', $k);
echo $vormindatud;
Ülesanne
2 - Iga ülesanne hakkab kommentaariga, kus on kirjas ülesande number, sinu nimi ja kuupäev
- Loo kaks täisarvulist muutujat, mis omavahel liidetakse, lahutatakse, korrutatakse, jagatakse ja leitakse jääk . Kusjuures vastuse kuvamisel näidatakse ka tehet ja kuvatakse eraldi ridadel.
- Koosta kood, mis teisendab Celsius- kraadid Fahrenheiti. Kasuta valemit: F=(9/5)*C+32. Vastus vormindatakse 2 kohta pärast koma..
- Arvuta ringi raadiuse järgi ringi ümbermõõt ja pindala. Vastused täislausega.
06
- PHP - HTML vormist info töötlemine (Ülesanne 3)Teemad - Vormi loomine
- GET ja POST erinevus
- Andmete töötlemine
SissejuhatusHetkel
kirjutasime koodi, kus lasime koodil väljastada meie poolt
muutujasse lisatud andmeid. Nüüd oleks aeg vaadata, kuidas saada
kätte andmeid suvaliselt
kasutajalt . Selleks peab sul olema
mõningane
ettekujutus HTML
vormide loomisest.
Sest just vormi kaudu saab kasutaja meile öelda kes ta on, mida ta
tahab jne. Seega meie peamiseks ülesandeks on kuidagi töödelda
kasutaja poolt vormi
sisestatud andmeid. Valida on kahe
meetodi
GET ja
POST vahel.
Vormi
loomineEnne
kui otsustame
kumb meetod on parem,
loome kolme väljaga vormi ning
lisame ühe nupu. Dokumendi faililaiend võib jääda
.html,
sest sellesse dokumenti me php koodi ei lisa.
?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
06 - PHP - Vormid
Toode 1
Toode 2
Toode 3
Antud
kood ei ole lõplik. Olemas on küll kolm tekstikasti, kuid programm
ei suuda neid eristada. Selleks tuleb anda neile nimed. (Koodi
kuvamisel jätan edaspidi html dokumendi osa, kuigi see on kindlasti
olemas)
?1
2
3
4
5
6
Toode 1
Toode 2
Toode 3
Nüüd
suudab kood mõista, kuhu kasti mingi väärtus lisati. Aga
vajutades nupule saada, ei toimu mitte midagi! Selleks tuleb vormile öelda
kuhu tuleb andmed saata ja mis meetodil. Seega
action atribuudile
lisa faili nimi, kuhu hakkame kirjutama php koodi ning
meetodiks kirjutan juba
"get".
?1
2
3
4
5
6
Toode 1
Toode 2
Toode 3
Nüüd
kui veebilehel vajutada nupule '
Saada',
siis saan veateate, kuna ei ole teinud faili '
tellimine .php'.
Teen selle ära ning lisan sinna lihtsalt ühe pealkirja.
?1
Tellimine
Nüüd
kui vajutada nuppu '
Saada',
näen teise dokumendi sisu.
GET
vs POSTKirjutasime
koodis juba
method ="post",
kuid üks võimalus on veel kasutada
method="get".
Põhimõtteliselt teevad need ühte ja sama - saadavad andmed
serverisse. Suurim erinevus, mis määrab ka selle
kumba valida, on
saadetavate andmete kuvamise viis.
GET meetodi
puhul
kuvatakse saadetavad
andmed veebilehe aadressiribal ning saame kenasti näha millised
väärtused millistele muutujatele on lisatud.
POST meetodi
puhul jäetakse aadressiriba puutumatuks, kuigi andmed saadetakse
samamoodi serveri poole teele.
Kui
avada veebilehitseja
arendaja tööriistad , siis on kenasti
saadetavad andmed näha. Chrome veebilehitsejas vali
selleks
Seaded>Tööriistad>Arendaja
tööriistad.
Kumba
siis kasutada?
GET - Nagu meetod ise ütleb, kasutame seda eelkõige info hankimiseks - näiteks andmebaasist tulemuste väljastamine (otsing)
- Kuna aadressiribal on andmeid näha, siis ära kasuta seda paroolide või mõne muu tundliku info saatmiseks
- Kasutaja saab aadressiribal olevaid parameetreid muuta ja salvestada veebilehitseja lemmikutesse
- Aadressiribal on märkide arv piiratud
- Talub lehe uuendamist
POST - Kasutame meetodit andmete saatmiseks - näiteks artiklite saatmiseks andmebaasi
- Saadetavaid andmed ei kuvata veebilehe aadressiribal, seega sobib paroolide või mõne tundlikuma info saatmiseks
- Saadetavad andmete hulk ei ole praktiliselt piiratud
- Lehe värskendamisel küsitakse kinnitust
Seega
hetkel ei ole midagi kriitilist ning kasutame harjutustes GET
meetodit.
Vormist
saadud andmete töötlemine Laseme
failil
tellimine.php vormist
saadud andmeid töödelda, alustades
kõigepealt edastatud andmete
kuvamisega. Kasutame selleks eeldefineeritud muutujat
$_GET[],
kuhu lisame vormi tekstivälja nime.
?1
2
3
4
5
6
Nüüd
kui kasutaja on sisestanud esimesse kasti mingi väärtuse, siis
kuvatakse see tellimine.php lehele.
Hetkel
saab lisada nii numbreid kui
tekste , kuid ärme selle pärast veel
muretse . Täiendame koodi, et saada ka teiste väljade väärtused.
?1
2
3
4
5
6
7
8
9
10
Nüüd
kus me saame vormist kenasti andmed kätte, saame kenasti teostada
seniõpitud teadmisi.
Ülesanne
3 - Nagu ikka alusta kommentaaridest
- Küsi kasutajalt vajalikud parameetrid ning leia:
- kera ruumala,
- koonuse ruumala
- ja silindri ruumala
- Pii puhul võid kasutada väärtust 3.14
- Väljasta andmed täislausega
- Väljakontroll pole hetkel oluline ja eeldame, et kasutaja kasutaja mõistab mida talt ootame :)
07
- PHP - Tingimuslaused (Ülesanne 4)Teemad - IF
- IF... ELSE
- IF...ELSE IF...ELSE
- Võrdlusoperaatorid
- Loogikaoperaatorid
- IF...ELSE kompaktkuju
- SWITCH
SissejuhatusÜhel
hetkel peame tegema koodis otsuseid, mis sõltuvad kasutaja valikust.
Näiteks kas kasutaja on sisestanud piisavalt suure väärtuse või
hoopis liiga väikese. Või kas kasutaja on ikka kõik väljad
täitnud ja millise veateate peaksime
väljastama . Ja siinkohal
tulebki appi tingimuslaused, millest kõige tuntum peaks olema IF.
Kui see selge, vaatame mis siis saab kui on
valikuid rohkem kui üks,
kaks, kolm jne. See teema nõuab tähelepanu ning arusaamist,
seepärast jõudu ja jaksu!
IFKõige
lihtsam nendest on
if võrdlus.
Kui tingimus on
tõene,
siis tehakse midagi, kui mitte liigutakse lihtsalt edasi.
Näiteks
kontrollime, kas muutujale on mingi väärtus lisatud.
?1
2
3
4
5
6
Või
teeks hoopis vastupidi - väljastame teate kui muutujale ei ole
lisatud väärtust. Selleks kasutame
eitust,
mis tähistatakse hüüumärgiga (!).
?1
2
3
4
5
6
7
IF...ELSEJuhul
kui soovid käivitada koodi ka väära tulemuse korral, tuleb
kasutada
if...else koodi.
Kui lause on tõene, käivitatakse lause 1, kui väär, siis lause 2.
Siinkohal
täiendame tingimust mõne võrdlusega, kasutades selleks
matemaatikast tuntud võrdlusoperaatoreid.
Loome
näiteks koodi, mis otsustab, kas muutuja on paaris või paaritu.
Selleks teeme jäägiga jagamist ning kui jääk on null, siis on
tegemist paarisarvuga. Vastasel korral paarituga.
?1
2
3
4
5
6
7
8
9
10
LoogikaoperaatoridKui
soovime loogikale anda mitu tingimust, kasutame selleks
loogikaoperaatoreid. Pean silmas seda, et lause väljastamiseks peab
olema täidetud vähemalt üks või mitu tingimust.
Nagu
tabelist näha, siis
and ja
&& on
täpselt samad operaatorid, nagu ka
or ja
||.
Näiteks kontrollime, kas muutuja väärtus jääb 50 ja 100 vahele.
?1
2
3
4
5
6
7
8
IF...IF
ELSE...ELSEKui
väärtus ei vasta tingimusele, siis on
if...if
else...else tingimuslause abil võimalik seda uuesti ja uuesti kontrollida.
Näiteks
on meil vaja hinnata vastavalt saadud punktidele. Kui
punktisumma on
vähemalt 9, väljastatakse aluse "Väga hea". Kui ei vasta
etteantud tingimusele, seame uue tingimuse jne. Kui kui lõpuks
ei vasta väärtus mitte ühelegi tingimusele väljastame vastava
lause.
?1
2
3
4
5
6
7
8
9
10
11
12
13
IF...ELSE
kompaktkujuKes
otsivad abi internetist võivad sattuda peale tingimuslausele, mille
süntaks näeb välja järgmine:
?1
tingimus ? TÕENE tegevus : VÄÄR tegevus
Näiteks
kontrollime, kas kasutaja on
admin või
külaline .
?1
2
3
4
Sama
süntaksi abil saame lisada veel tingimusi, kuid siis on
soovitav kasutada sulgusid. Lisame näiteks moderaatori kontrolli.
?1
2
3
4
SWITCHJuhul
kui if lauseid hakkab tekkima rohkem,
tasuks mõelda
switch tingimuslausele.
See kontrollib etteantud
avaldist ja väljastab lause kui leiab
vaste. Kui vastet ei leita antakse vaikimisi lause.
Näiteks
kontrollime samamoodi kasutajaid nagu enne - kas on tegemist
adminiga, modega või külalisega.
?1
2
3
4
5
6
7
8
9
10
Sama
asja peaks saama ka võrdlus- ja loogikaoperaatoritega
?1
2
3
4
5
6
7
8
9
10
11
12
Ülesanne
4 Kõik ülesanded on varustatud kommentaaridega
Jagamine - sisestatakse 2 täisarvulist muutujat. Jaga üks arv teisega . Väljasta ka hoiatav lause, kui kasutaja üritab jagada nulliga. Lisa kontroll, mis ei käivita koodi tühjade lahtrite puhul (N: if(!empty($_GET['name'])){lause}, see käivitab koodi siis, kui lahtrisse on midagi lisatud)
Suurem/väiksem (if... elseif ) - sisestatakse 2 täisarvulist muutujat. Leia kumb arv on suurem või on need võrdsed. Lisa kontroll, mis ei käivita koodi tühjade lahtrite puhul.
Juubel - kasutaja lisab sünniaasta ning kood väljastab, kas tegemist on juubeliaastaga. Lisa kontroll, mis ei käivita koodi tühjade lahtrite puhul.
Arvamismäng (switch) - kasutaja üritab ära arvata arvu. Et tal oleks lihtsam arvata, siis anna vihje, kas lisatud arv on liiga suur või väike. Ära arvamise puhul kiida!
Sõjaväekohustus - leia kas kasutaja on sõjaväeteenituse jaoks kõlbulik. Selleks peab olema täidetud järgmised tingimused: eestlane, 18+ ja vähemalt 9kl haridus
08
- PHP - Massiivid (Ülesanne 5)
Teemad
- mis on massiiv
- massiivi loomine
- assotatiivne
- print_r
- massiivi funktsioonid
Sissejuhatus
Siiani
oleme lisanud igale muutujale ainult ühe väärtuse.
Näiteks $nimi='Mari'.
Nüüd kui oleks vaja veel nimesid muutujates hoida, siis peaksime
tegema juurde muutujaid. Näiteks $nimi2,$nimi3 jne.
Mis siis kui neid muutujaid oleks vaja sada ja rohkem? Siinkohal
tulebki meile appi programmeerimise üks olulisemaid
andmestruktuure massiivid.
Vaatame selles peatükis, mis see on, kuidas massiivi väärtusi
väljastada, lisada juurde ning kas on olemas mugavad funktsioonid
paremaks tulemuseks.
Mis
on massiiv ( array )
Massiiv
on muutuja, mis hoiab endas hulka samatüüblisi väärtusi.
Väärtusteks võivad olla nii tekstid, arvud kui ka teine massiiv.
Viisakas on massiivile anda nimi mitmuses . Loome näiteks nimede
massiivi ja vanuste massiivi.
?
1
2
$nimed = array('mari', 'kati', 'juhan', ' miku ', 'uku');
$vanused = array(15, 23, 32, 28, 18);
Masiivi
sisu kuvamiseks on kasutada täpne funktsioon var_dump() või
vähemtäpneprint_r().
Vaatame näiteks var_dump() funktsiooni
ning me näeme, et see kuvab meile massiivi elementide koguarvu , nende tüübid ja pikkused.
?
1
2
3
4
5
6
Samas print_r() puhul
kuvatakse põhimõtteliselt ainult oluline sisu.
?
1
2
3
4
5
6
7
8
9
Kindlasti
paned tähele, et massiivis olevad väärtused indekseeritakse alates
nullist! See tähendab, et loendamine algab alati nullist. Näiteks,
kui ma soovin saada massiivist esimest väärtust. Selleks tuleb
kasutada massiivi nime ning seejärel kandiliste sulgude vahele
lisada soovitud indeks.
?
1
2
3
4
Antud
koodi väljastab meile teksti Mari.
Ja näiteks Uku saamiseks tuleb meil lisada indeksiks 4.
Massiivi
kõikide väärtuste kuvamine
Kood
ülevalpool, kuvaks loendist ainult ühe väärtuse. Selleks, et
kätte saada kõik väärtused, tuleks kasutada mõnda tsüklit.
Tsüklite töötamist ja võimalusi vaatame küll järgmises
peatükis, aga siin sellega tutvumine ei tee ka paha. Kasutame
siinkohal foreach () tsüklit,
mis võtab iga väärtuse, lisab selle muutujasse ja väljastab.
?
1
2
3
4
5
6
7
8
Hetkel
peaks kõik viis nime ülalt alla jooksma .
Assotsiatiivsed
massiivid
Assotsiatiivsete
massiivide puhul saame väärtuste võtmed ise määrata. Nin see
tuleb nii kirja panna sarnase mudeli järgi, nagu me massiivi
väljastamisel näeme: võti=>väärtus.
?
1
2
3
4
5
6
7
8
See
tähendab, et kui ma soovin näiteks võtme ' kehv ' väärtust, siis
kirjutan nii:
?
1
echo $hinded['kehv']; //tulemus: 2
Tsüklisse
panduna tuleb nii võtmele, kui ka väärtusele anda oma muutuja.
?
1
2
3
4
5
6
7
8
9
10
11
Töötamine
massiivi funktsioonidega
Massiividega
töötamiseks on terve ports erinevaid funktsioone, mille leiad
manualist http://php.net/manual/en/ref.array.php .
Loomulikult ei pea kõiki kohe pähe õppima, vaid ikka vastavalt
vajadusele. Vaatame mõningaid , mida on tulnud endal kõige
sagedamini ette.
Massiivi
täiendamine
Aegajalt
on vaja väärtusi massiivi juurde lisada. Selleks on kaks meetodit.
Näiteks võime kasutada array_push() funktsiooni.
Lisada saab nii ühe kui mitu nime korraga.
?
1
2
3
4
5
6
Nagu
näha, lisatakse uued väärtused massiivi lõppu. Teine võimalus on
omistada uued väärtused
?
1
2
3
4
5
Sellise
võttega saad lisada ainult ühe väärtuse korraga. Kuid selle
võttega saad määrata näiteks väärtuse indeksi. Juhul kui see on
juba olemas, siis kirjutatakse olemasolev üle.
?
1
$nimed[13] = 'ahmed';
Väärtuse
lisamiseks massiivi algusesse, kasutatakse
funktsiooni array_unshift().
?
1
2
3
4
5
6
Massiivist
eemaldamine
Massiivist
viimase väärtuse eemaldamiseks kasuta array_pop() funktsiooni
?
1
array_pop($nimed);
ning
esimese väärtuse eemaldamiseks array_shift() funktsiooni.
?
1
array_shift($nimed);
Kasutajat
võiks informeerida kirje eemaldamisest, lisades eemdaldatava
väärtuse näiteks massiivi.
?
1
2
3
4
5
Massiivi
väärtuse loendamine
Et
teada saada mitut väärtust massiivis hoitakse,
kasuta count () funktsiooni.
?
1
echo count($nimed);
Massiiivi
väärtuse sorteerimine
Vaatame
sorteerimiseks järgmisi funktsioone:
- sort()
- rsort()
- ksort()
- krsort()
- asort()
- arsort()
Funktsioon sort() sorteerib
kasvavalt ja rsort() kahanevalt.
?
1
2
3
4
5
6
Kasuta
antud funktsioone ainult sel juhul, kui pole oluline, et nende võtmed
lähevad sassi või assotsiatiivsete massiivide puhul asendatakse
need indeksitega. Üldjuhul peetakse seda riskantseks ning sel juhul
võetaksegi kasutusele hoopis ksort(),
kus massiiiv sorteeritakse võtme järgi...
?
1
2
3
4
5
6
7
8
9
10
11
...
ning asort(),
kus massiiv sorteeritakse väärtuse järgi.
?
1
2
3
4
5
6
7
8
9
10
11
Lisades
kummagile funktsioonile 'r'-tähe, muudetakse sorteerimine
vastupidiseks: krsort() võiarsort().
Nüüd kui soovid just nimekirja sassi ajada, siis
kasuta shuffle() funktsiooni.
Selle tulemusena on iga kord erinev tulemus.
?
1
2
shuffle($nimed);
var_dump($nimed);
Mitmemõõtmelised
massiivid
Mitmemõõtmeliseks
loetakse massiivi, kui selle väärtusteks on uued massiivid.
?
1
2
3
4
5
6
7
8
9
10
Massiivist
elementide saamiseks tuleb anda mõlemad võtmed. Kuvame näiteks
Eesti pealinna:
?
1
echo $riigid['Eesti']['pealinn'];
Kõikide
andmete kuvamiseks kasutame foreach() tsüklit
kaks korda.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Ülesanne
5
- Õppeained - koosta vähemalt 5 õppeaine nimetusega massiiv. Sinu ülesandeks on see php funktsiooni sort() abil sorteerida kasvavas järjekorras ning kuvada ridade kaupa.
- Pallivise - sul on üks massiiv nimedega ja teine palliviske tulemustega.
?
1
2
$nimed = array('Martin','Hardi','Juhan','Tiina','Sirje','Kaie');
$pallivisked = array(33, 32, 27, 11, 15, 28);
Ülesande
lahendamiseks tuleb sul natuke googeldada, leia:
* osalejate arv
(count)
*
keskmine palliviske tulemus (array_sum
jt.)
*
parim tulemus (max)
* parima tulemuse visanud õpilase nimi (array_keys)
- Tekita mitmemõõtmeline massiiv raamatu andmete hoidmiseks. Loo massiiv vähemalt kolmele raamatule - pealkiri, autor, žanr , ilmumisaasta. Ülesandeks on kuvada kõik raamatud tähestikulises järjekorras ning kui palju on raamatuid kokku. Kasuta täislauseid, näiteks:
?
1
2
3
4
5
Pealkiri: Helmelõimed elulõngal
Autor: Karl Puhvel
Žanr: biograafia
Aasta: 2013
Raamatuid kokku: 3 tk
- NB! Kõik ülesanded on kommenteeritud!
09
- PHP - Tsüklid (Ülesanne 6)
Teemad
- for
- while
- do...while
- tsükkel tsüklis
- tingimuslause tsükli sees
Sissejuhatus
Eelmises
peatükis puutusime kokku foreach() tsükliga,
mis võttis massiivist väärtused ja kuvas kõik ükshaaval.
Tegemist on korduva tegevusega , mida tegi kood meie eest. Selles
peatükis vaatamegi, millised on meie võimalused koodimise
mugavamaks tegemisel. Seejärel vaatame kas ja kuidas saame kirjutada
ühe tsükli teise sisse ning mis siis saab, kui tahame kasutada
tingimuslauset.
For
tsükkel
Tegemist
on kindla
kordustearvuga tsükliga.
Näiteks ütleme, et kood peab väljastama lauset kümme korda.
Sellisel juhul tuleb sulgudesse lisada:
- muutuja väärtus, millest soovime alustada
- tingimus, mille korral lõpetatakse tsükli töö
- avaldis, mis suurendab muutuja väärtust
?
1
2
3
4
5
Kui
see skeemina kuvada, siis tuleb välja midagi sellist:
Eelmises
massiivide peatükis kasutasime foreach()tsüklit.
Kuna kõik tsüklid teevad sama asja, siis peaks ka for() tsükliga
massiivist andmed kätte saama. Ja saabki ning kontrolli tuleb lisada
massiivi pikkus, kasutades count() funktsiooni.
?
1
2
3
4
5
6
While
tsükkel
Vaatame
tükli loomise funktsioone veelgi. While() tsükli
puhul on tegemist on eelkontrolli
tsükliga,
mis täidab käsku, kuni etteantud tingimus vastab tõele. Töötab
väga sarnaselt eelmisele!
?
1
2
3
4
5
6
7
Kui
see skeemina kuvada, siis tuleb välja midagi sellist:
Do...while
tsükkel
Do...while
on aga järelkontrolliga
tsükkel. Selle
tsükli puhul väljastatakse lause enne ja siis kontrollitakse
tingimust. Ja antud teeb hetkel täpselt sama mida eelmised.
?
1
2
3
4
5
6
7
Kui
see skeemina kuvada, siis tuleb välja midagi sellist:
Tsükkel
tsüklis
Vaatame,
mis saab, kui kasutada ühte tsüklit teise sees. Alustame sellest,
et prindime 5 rida tärne (*), kus igas reas on hetkel vaid üks.
?
1
2
3
for($rida=1; $rida
Funktsiooni
nime valimisel lähtu samadest kriteeriumitest , mis muutujate nime
valimisel - ära vali täpitähti, ära kasuta tühikuid ega muid
sümboleid. NB! funktsioonid on ka tõstutundlikud. Kui koodijupp
käivitada, siis midagi ei juhtu, kuigi koodis on kirjas, et see
tagastaks lisatud teksti. Seda sellepärast, et funktsiooni pole
keegi välja kutsunud. Teeme siis seda...
?
1
2
3
4
5
6
7
Nüüd
on tulemuseks soovitud tekst.
Funktsiooni
parameetrid
Tegelikult
võiks kasutajaid tervitada nende eesnime pidi. Selleks saab
funktsiooni sulgudesse lisada soovitud parameetrid. Lisame näiteks
nime muutuja. Funktsiooni väljakutsumisel lisame funktsiooni
kasutaja nime, keda funktsioon tervitab.
?
1
2
3
4
5
6
7
Hetkel
väljastatakse kenasti lause Tere
Karin.
Aga mis saab siis, kui kasutaja nime ei suudeta tuvastada, ehk seda
ei olegi? Sellisel juhul võiks parameetrina anda vaikimisi
väärtuse$nimi="Kylaline".
?
1
2
3
4
5
6
7
Kui
kasutaja nime pole antud, siis tuleb tekst Tere
Kylaline.
Funktsioonidele
võib anda kenasti ka rohkem parameetreid ja kindlasti välja kutsuda
mitmeid kordi, mis ongi ju asja mõte.
?
1
2
3
4
5
6
7
8
9
10
11
Funktsioonide
grupid
Nagu
eelpool mainitud , on PHP's üle 2500 funktsiooni. Kõike me kindlasti
läbi ei võta ja ei jõuakski. Meie jaoks asja lihtsustamiseks ja
paremaks mõistmiseks, võiksime need jagada mingisugustesse gruppidesse :
- matemaatilised funktsioonid
- kuupäevafunktsioonid
- kontrollfunktsioonid
- massiivifunktsioonid
- tekstifunktsioonid
- regulaaravaldised
Kõik
võimalikud funktsioonid
leiad http://www.php.net/manual/en/refs.basic.php.php aadressilt. Tegelikult
oleme me lähtuvalt vajadusest juba kasutanud erinevaid funktsioone.
Näiteks echo(),
fprint(), var_dump(), print_r() jne.
Matemaatilised
funktsioonid
Alustame
matemaatiliste funktsioonidega, mille dokumentatsiooni leiad siit.
Funkstioone on kokku ligi 50 ning vaatame neist olulisemaid.
Kõige
väiksem ja suurem
Kõige
väiksema või suurima arvu leiad
vastavalt min() või max() funktsioonide
abil.
?
1
2
echo min(11,21,32,43,54); //väljund 11
echo max(11,21,32,43,54); //väljund 54
Etteantud
arvud meenutaks nagu massiivi? Õigus! Seega saame sama funktsiooni
abil leida ka suurima või väiksema arvu massiivist.
?
1
2
3
$arvud = array(11,21,32,43,54);
echo max($arvud); //väljund 54
Kui
on vajadus leida näiteks suurim arv kõikidest massiividest, siis
tuleb need leida eraldi.
?
1
2
3
4
$arvud = array(11,21,32,43,54);
$arvud2 = array(60,72,42,34,45);
echo max(max($arvud), max($arvud2)); //väljund 72
Ümardamine
Arvude
ümardamiseks kasuta round (),
ceil() või floor() funktsioone.
Vaatame esimesena round()funktsiooni. Sellele
funktsioonile tuleb anda parameetrina arv ja ümardusalus ehk mitu
komakohta soovid. Kui ümardusalust pole, siis ümardatakse
täisarvuni.
?
1
2
3
4
$arv = 3.456;
echo round($arv); //3
echo round($arv,2); //3.46
Ceil() ja floor() funktsioonidega
saad ümardada vastavalt ülespoole ("lagi") või allapoole
("põrand") täisarvuni.
?
1
2
3
4
$arv = 3.456;
echo ceil($arv); //4
echo floor($arv); //3
Juhuslik
arv
Juhusliku
arvu genereerimiseks on meil kasutada rand () funktsioon.
?
1
echo rand(); //10156
Selliselt
loodud juhuslik arv on piiratud ning Windows arvutite puhul on see
32767. Kel vaja, siis selle barjääri saab
ületada mt_rand() funktsiooniga.
?
1
echo mt_rand(); //883168196
Juhusliku
arvu ulatuse piiramiseks sisesta sulgudesse miinimum ja maksimum
arvud.
?
1
echo rand(1,10); //2
Astendamine ,
ruutjuur ja pii
Astendamiseks
kasutame funktsiooni pow(),
selleks tuleb anda sellele arv ja astendaja .
?
1
2
echo pow(5,2); //25
echo pow(5,3); //125
Ruutjuure
leidmiseks kasuta sqrt () funktsiooni.
?
1
echo sqrt(9); //3
Kirjutades
funktsiooni pi() genereeritakse
meile selle väärtus 3,14
?
1
echo pi(); //3.1415926535898
Trigonomeetria
Matemaatiliste
funktsioonide hulka on lisatud ka trigonomeetriast
tuntud sin(), cos() ja tan().
?
1
echo cos(0.8); //0.69670670934717
Ning
nurkade teisendamiseks radiaanideks kasuta deg2rad() ja
vastupidi teisendamiseks rad2deg()funktsioone.
?
1
echo deg2rad(30); //0.5235987755983
Ülesanne
7
- Jagamine - koosta funktsioon, mis teostab kasutaja antud arvudega jagamistehte. Lisa kontroll juhuks, kui kasutaja üritab jagada nulliga
- Täringumäng - loo funktsioon, mis genereerib pärast nupulevajutust suvalise täisarvu 1-6
- Kolmnurk - oletame, et meil on kolmnurga küljed a=5 ja b=3, leia kolmnurga puuduoleva külje pikkus c=? (Pythagoras). Ümarda täisarvuni!
11
- PHP - Ajafunktsioonid (Ülesanne 8)
Teemad
- time()
- date ()
- mktime()
- strtotime()
- date_default_timezone_set()
- aja ja kuupäeva formaadid
- pika kuupäeva eestistamine
- tehted kuupäevadega
- kuupäeva valideerimine
Sissejuhatus
Selles
peatükis vaatame kuidas luua soovitud kuupäeva ning kuvada seda
arusaadavas versioonis. Seejärel õpime kuidas teostada kuupäevaga
erinevaid operatsioone, nagu kuupäevadega opereerimine ja
võrdlemine.
Aja
loomine
Aja
loomisel kasutab PHP kokkulepitud UNIX stiilis ajatemplit
(timestamp).
Tegemist on sekunditega, mida loetakse alates 01.01.1970 ning selle
väljakutsumiseks kasutatakse time()funktsiooni.
?
1
echo time(); //1361551056
Kasutajasõbraliku
kuupäeva kuvamine
Kui
vajutada hetkel veebilehitsejas Refresh,
siis aeg muutub pidevalt. Selle kuupäevaga on probleem selles, et
inimene ei saa aru, millise kuupäevaga on siis tegemist. Siinkohal
tuleb mängu date()funktsioon,
mis vajab kahte argumenti: kuupäevavorming ja ajatemplit.
?
1
echo date('d.m.Y G:i' , time()); //22.02.2013 16:02
Eelpool
lisatud kuupäevavorming sisaldab järgmisi vormindamise sümboleid:
- d - kuupäev 01-31
- m - kuu numbrina 01-12
- Y - neljakohaline aastaarv n: 2013
- G - 24-tunnine tunniformaat 0-23
- i - minutid 0-59
See,
mis märkide vahele lisad on sinu valida. Antud kuupäevavormingu
sümbolid on ära toodud
aadressil: http://php.net/manual/en/function.date.php .
Selle funktsiooniga on veel tore see, et kui ajatemplit mitte lisada,
siis võtab see vaikimisi hetkekuupäeva ja kellaaja.
?
1
echo date('d.m.Y G:i');
Ajavöönd
Kui
ma nüüd võrdlen serverist saadetud kellaaega oma arvuti
kellaajaga, siis on see kaks tundi maas . Selle parandamiseks on
võimalus koodi lisada soovitud ajavöönd.
?
1
date_default_timezone_set(' Europe /Tallinn'); //22.02.2013 18:02
Teised ajavööndid leiad
siit: http://www.php.net/manual/en/timezones.europe.php
Pika
kuupäeva eestistamine
PHP
koodi loomisel ei ole vist piisavalt meie emakeelega arvestatud :) ja
sellepärast näiteks pika kuupäeva väljakutsumisel kuvatakse kuu
nimetus võõrkeelsena.
?
1
echo date('d.F.Y'); //22. February .2013
Selle
parandamiseks peame looma eraldi massiivi, kus eestikeelse kuud
algavad indeksiga 1. Pärast seda tegin päeva, kuu ja aasta jaoks
eraldi muutujad, kusjuures kuu nimetuse saamiseks kasutan kuupäeva
vormingut 'n'. 'n' vormindab kuud 1-12, mis aitab massiivist leida
üles õige kuu. Lõpuks väljastan kuu soovitud formaadis
?
1
2
3
4
5
6
7
8
9
10
Muu
soovitud kuupäeva genereerimine
Hetkel
lasime PHP'l genereerida hetkekuupäeva, tundus päris lihtne? Aga
mis saab siis kui soovin mõnda muud kuupäeva? Sellisel juhul tuleb
kasutada mktime() funktsiooni.
?
1
mktime(tunnid, minutid, sekundid, kuu, päev, aasta, suveaeg)
Antud
funktsioon loob ajatempli ikka sekundites, seega tuleb see vormindada vastavalt. Soovime näiteks kuvada interneti sünnipäeva 29.10.1969.
?
1
2
$sp = mktime(0,0,0,10,29,1969);
echo date('d.m.Y', $sp); //29.10.1969
Funktsioonis
oli selline tore parameeter nagu 'suveaeg'. Lisades 1, lülitad
suveaja sisse ja 0 välja. Kui sa seda ei lisa, siis jätad selle
PHP'le otsustada.
Tehted
kuupäevadega
Üks
võimalus ajaga arvutamiseks on time() ajatemplile
lisada või eemaldada vastav arv sekundeid. Näiteks time()+60 puhul
lisatakse juurde 60sek ehk 1min jne. Loodan, et põhikooli matemaatika tuleb meelde :)
?
1
2
3
echo date('d.m.Y G:i' , time()+60); //1min pärast
echo date('d.m.Y G:i' , time()+60*60); //1h pärast
echo date('d.m.Y G:i' , time()+60*60*24); //24h pärast
Kui
päevade, kuude ja aastateni jõuad, siis võib arvutamine natuke
keerulisemaks osutada, seepärast võiks arvutusi teha mktime()
funktsiooniga. Näiteks 27 aastat enne.
?
1
2
$sp = mktime(0,0,0,10,29,1969-27);
echo date('d.m.Y', $sp); //29.10.1942
Kuupäevadega
arvutamisel on võimalik kasutada ka inglise keelseid lauseid,
näiteks järgmised:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo strtotime("now");
echo strtotime(" tomorrow ");
echo strtotime(" yesterday ");
echo strtotime("10 September 2000");
echo strtotime("+1 day");
echo strtotime("+1 week");
echo strtotime("+2 week 3 days 4 hours 5 seconds ");
echo strtotime("next Thursday");
echo strtotime("last Monday ");
echo strtotime("5pm + 6 Hours");
echo strtotime("now + 4 fortnights");
echo strtotime("last Monday");
echo strtotime("4pm yesterday");
echo strtotime("6am 10 days ago");
Seletused leiad
siit: http://www.php.net/manual/en/datetime.formats.relative.php
Kuupäeva
valideerimine
Nagu
eelpool mainitud, on ajafunktsioone päris palju ja kõike ei jõua
läbi vaadata. Viimase asjana tahaks siiski näidata funktsiooni, mis
kontrollib, kas selline kuupäev eksisteerib. Kasuta seda näiteks
kasutaja poolt sisestatud kuupäeva kontrollimiseks. Kui antud
kuupäev on olemas, tuleb 'Kuupäev korras!' ja kui on mingi viga,
nagu allpool, siis 'Kuupäev on valesti sisestatud'.
?
1
2
3
4
5
if(checkdate(12,32,2013))
fclose($minu_fail);
Tekstifaili
info
Vaatame
mõningaid võimalusi kasutatava tekstifaili info kuvamise kohta.
- Faili nimi - nu selle väärtuse saame kenasti muutujast
- Faili suurus - seda me piilusime ka juba ning kuvab faili suuruse baitides
- Viimati muudetud - viimati muutmise all vaatame kolme funktsiooni:
- filectime() - kuvab viimati faili sisu ja metaandmete muutmise aja sekundites
- filemtime() - kuvab viimati faili sisu muutmise aja sekundites
- fileatime() - viimati faili kirjutatud või loetud aeg sekundites
?
1
2
3
4
5
6
$allikas = 'loomad.txt';
$suurus = filesize($allikas);
$viimati_muudetud = date('d.m.Y G:i' ,filectime($allikas));
echo 'Faili nimi: '.$allikas.'
echo 'Faili suurus: '.$suurus.'baiti
echo 'Viimati muudetud: '.$viimati_muudetud.'
Üks
tore funktsioon siinkohal on kasutada pathinfo(),
mis kuvab faili omadused nagu:
- dirname - kataloog
- basename - faili nimi koos laiendusega
- filename - faili nimi
- extension - faili laiendus massiivina
?
1
2
3
4
5
6
$allikas = 'kataloog/loomad.txt';
$faili_info = pathinfo($allikas);
echo $faili_info['dirname'].'
echo $faili_info['basename'].'
echo $faili_info['filename'].'
echo $faili_info['extension'].'
Tekstifailis
saadud andmete töötlemine
Selleks,
et failist saadud andmetega peale kuvamise midagi peale hakata, tuleb
need lugeda massiivi. Üks võimalus on selleks
kasutada file() funktsiooni.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$allikas = ' numbrid .txt';
$minu_fail = file($allikas);
print_r($minu_fail);
//väljund
[0] => 12
[1] => 13
[2] => 3
[3] => 54
[4] => 6
[5] =>
[6] => 34
[7] => 3
[8] => 23
[9] =>
[10] => 23
[11] => 44
Nagu
väljundist vaadata võite, oli mul tekitatud numbrite loend . Kahjuks
oli ka mul tühje ridu sisse "unustatud". Õnneks võimaldab
antud funktsioon tühje ridu ignoreerida.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$allikas = 'numbrid.txt';
$minu_fail = file($allikas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
print_r($minu_fail);
//väljund
[0] => 12
[1] => 13
[2] => 3
[3] => 54
[4] => 6
[5] => 34
[6] => 3
[7] => 23
[8] => 23
[9] => 44
Ja
kui nüüd, kui andmed on massiivis, siis saad kenasti massiividest
tuntud funktsioone kasutada. Näiteks arvutame arvude kogusumma .
?
1
2
3
$allikas = 'numbrid.txt';
$minu_fail = file($allikas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
echo array_sum($minu_fail); //215
PHP
saab hakkama ka mitmemõõtmeliste massiividega aga piilume seda
järgises peatükis. Seni aga mõningad ülesanded.
Ülesanne
11
- Loo programm, kuhu saan lisada ürituse jaoks osalejaid
- Kõik osalejad salvestatakse tekstifaili
- Loo uus veebileht, mis kuvab kõik registreerunud kasutajad
- Kuva nimed ülevalt alla
- Täienda koodi, mis kuvab osalejate arvu ning viimati lisatud nime kuupäeva
- Kindlusta, et vormi ei saaks lisada tühje ridu
15
- PHP - Töö CSV failidega (Ülesanne 12)
Teemad
Sissejuhatus
CSV
(Comma
Separated Values )
on failivorming, kus andmed on üksteisest eraldatud komadega või
hoopis semikoolonitega. Iga rida käsitletakse kirjena ning
semikooloniga eraldatakse andmeväljad teineteisest. Tegemist on
populaarse failiga mille töötlemisega saavad hakkama nii Notepad,
Excel, MySQL jne. Antud formaati kasutatakse näiteks ühest
programmist teise andmete eksportimiseks.
CSV
faili sisu kuvamine
CSV
faili sisu lahkamiseks kasutame fgetscv() funktsiooni,
nus vajab kolme parameetrit:
- faili ennast
- faili suurust (tähemärkide arvu)
- eraldajat
Antud
funktsiooni kasutamisel loetakse sisse ainult esimene rida ja see ka
massiivina.
?
1
2
3
4
5
$allikas = 'pallivise.csv';
$minu_csv = fopen($allikas, 'r') or die('Ei leia faili!');
$rida = fgetcsv($minu_csv, filesize($allikas),';');
var_dump($rida);
fclose($minu_csv);
Väljund:
?
1
2
3
4
array ( size =3)
0 => string 'Madis' ( length =5)
1 => string 'M' (length=1)
2 => string '19' (length=2)
Selleks,
et saaks kätte kõik read, tuleb jällegi kasutada mõnda tsüklit,
näiteks while(),
mis vastutab ridade eest. Kuna igas reas on veel kolm elementi, siis
peame ühe tsükli veel looma - for().Ning täiendame
koodi näiteks järjekorranumbriga.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$allikas = 'pallivise.csv';
$minu_csv = fopen($allikas, 'r') or die('Ei leia faili!');
$jrk = 1;
while(!feof($minu_csv)){
$rida = fgetcsv($minu_csv, filesize($allikas),';');
$arv = count($rida); //rea väljade arv
echo $jrk.'. '; //järjekorra number
$jrk++;
for($i = 0; $i
Nüüd
kui valida soovitud fail ja klikkida nupul, siis peaks vormi
ülevalkuvatama faili nimi.
Edasi
saadetakse fail töötlemiseks serveri ajutisse kataloogi. Et selles
veenuda, kirjutame järgmise koodi:
?
1
2
3
4
5
if(!empty($_FILES['minu_fail']['name'])){
$sinu_faili_nimi = $_FILES['minu_fail']['name'];
$ajutine_fail= $_FILES['minu_fail']['tmp_name'];
echo $ajutine_fail;
Nüüd
peaks näha olema, kus seda faili ja mis nimega seda hoitakse.
?
1
C:\wamp\tmp\php2119.tmp
Ajutisest
kohast sinu soovitud kataloogi faili saatmiseks,
kasutame move_uploaded_file()funktsiooni. Ja
täiendan seda samal ajal kontrolliga faili üleslaadimise
õnnestumise või ebaõnnestumise kohta.
?
1
2
3
4
5
6
7
8
9
10
if(!empty($_FILES['minu_fail']['name'])){
$sinu_faili_nimi = $_FILES['minu_fail']['name'];
$ajutine_fail= $_FILES['minu_fail']['tmp_name'];
$kataloog = 'failid';
if(move_uploaded_file($ajutine_fail, $kataloog.'/'.$sinu_faili_nimi)){
echo 'Faili üleslaadimine oli edukas';
}}
Üleslaetava
faili piirangud - faili suurus
Vaatame,
kuidas piirata failide üleslaadimist. Vaatame näiteks failisuuruse
järgi.
?
1
$faili_suurus = $_FILES['minu_fail']['size'];
Tulemus
antakse baitides. Seega tuleb samas ühikus anda ka piirang, näiteks
1MB saamiseks tuleb kirjutada 1048576.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(!empty($_FILES['minu_fail']['name'])){
$sinu_faili_nimi = $_FILES['minu_fail']['name'];
$ajutine_fail= $_FILES['minu_fail']['tmp_name'];
$faili_suurus = $_FILES['minu_fail']['size']; //faili suurus
$max_suurus = 1048576; //seame lubatud failisuuruse piiri
if($faili_suurus
Kõik kommentaarid