Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
TALLINNA ÜLIKOOL
Matemaatika-Loodusteaduskond
Informaatika osakond
Veebiportaal Liiklus.netSeminaritöö
Autor: Tanel Jõeäär
Juhendaja: Jaagup Kippar
Tallinn 2006
Sisukord
Sisukord ..................................................................................................................................... 2
1.Sissejuhatus..............................................................................................................................4
1.Sissejuhatus..............................................................................................................................4
2.Kasutajagrupid......................................................................................................................... 4
2.Kasutajagrupid......................................................................................................................... 4
3.Kasutajalood............................................................................................................................ 4
3.Kasutajalood............................................................................................................................ 4
4.Võrdlus teistega....................................................................................................................... 5
4.Võrdlus teistega....................................................................................................................... 5
4.1. Liiklus.ee..........................................................................................................................54.2. Mnt.ee.............................................................................................................................. 7
5.Kirjeldus...................................................................................................................................8
5.Kirjeldus...................................................................................................................................8
6.Vajalikud nõudmised serverile................................................................................................ 9
6.Vajalikud nõudmised serverile................................................................................................ 9
7.Failide nimekiri......................................................................................................................10
7.Failide nimekiri......................................................................................................................10
8.Huvitavad koodijupid.............................................................................................................11
8.Huvitavad koodijupid.............................................................................................................11
8.1. Pildi üleslaadimine ja mastaapimine failis lisamine.php............................................... 118.2. Kirje korrektsuse kontroll ja veahaldus failis lisamine.php...........................................13
9.WAP-tugi............................................................................................................................... 16
9.WAP-tugi............................................................................................................................... 16
10.Really Simple Syndication (RSS)........................................................................................18
10.Really Simple Syndication (RSS)........................................................................................18
11.Foorum.................................................................................................................................19
11.Foorum.................................................................................................................................19
12.Administreerimine............................................................................................................... 20
12.Administreerimine............................................................................................................... 20
13.Edasiarendus........................................................................................................................ 21
13.Edasiarendus........................................................................................................................ 21
14.Kokkuvõte............................................................................................................................22
2
14.Kokkuvõte............................................................................................................................22
15.Lühendid.............................................................................................................................. 23
15.Lühendid.............................................................................................................................. 23
16.Lisa: Liiklus.net veebirakenduse kood................................................................................ 24
16.Lisa: Liiklus.net veebirakenduse kood................................................................................ 24
16.2. Fail: foorum.php...........................................................................................................2416.3. Fail: footer.php.............................................................................................................2416.4. Fail: header.php............................................................................................................2516.5. Fail: index.php............................................................................................................. 2616.6. Fail: info.php................................................................................................................2716.7. Fail: kontakt.php.......................................................................................................... 2716.8. Fail: leia.php.................................................................................................................2816.9. Fail: lisamine.php.........................................................................................................3016.10. Fail: otsi.php...............................................................................................................3316.11. Fail: reklaam.php....................................................................................................... 3616.12. Fail: rss.php................................................................................................................3616.13. Fail: stiil.css............................................................................................................... 3716.14. Fail: wap.php..............................................................................................................3916.15. Fail: varastatud.php....................................................................................................3916.16. Fail: vorm.php............................................................................................................4216.17. Fail: wap / index.wml.................................................................................................4416.18. Fail: wap / w_auto.php...............................................................................................4516.19. Fail: wap / w_auto2.php.............................................................................................4516.20. Fail: wap / w_info.php............................................................................................... 4616.21. Fail: wap / w_lisa.php................................................................................................ 4716.22. Fail: wap / w_lisa2.php.............................................................................................. 4716.23. Fail: wap / w_uudis.php............................................................................................. 4916.24. Fail: wap / w_uudis2.php........................................................................................... 49
3
1. Sissejuhatus
Idee tekkis, olles korduvalt märganud erinevaid pisirikkumisi ja hooletusi linnaliikluses. Miks
siis mitte luua must nimekiri autohuligaanidest sarnaselt mobiilivõlglastele ning
maksurikkujatele. Kahtlemata ei saa aga tähelepanuta jätta ka eeskujulikku käitumist liikluses.
Selle mõtte edasiarendusena tekkis idee luua liiklusportaal, mis koondaks endas erinevat
liiklusalast informatsiooni.
2. Kasutajagrupid
• Igapäevased autoga liiklejad
Saavad infot olude kohta riigi maanteedel (Maanteeameti info), vaadata auto kohta
kirjeid nii Liiklus.net andmebaasist kui Politseiameti infot, lisada auto kohta kirje,
tutvuda liiklus-, politsei-, auto- ning ralliuudistega, kasutada Liiklus.neti WAP-
versiooni ning foorumit.
• Jalakäijad
Saavad lisada ning vaadata kirjeid autode kohta, lugeda uudiseid, kontrollida sõiduki
olemasolu Liiklus.net või varastatud sõidukite andmebaasis WAP-i kaudu ning
kasutada foorumit.
• Jalgratturid
Tulevikus on plaanis kaasata Liiklus.net-i ka spetsiaalselt jalgratta kasutajatele
mõeldud infot.
3. Kasutajalood
Probleem: 44-aastane taksojuht Juri soovib näha Tallinna kaarti.
Lahendus: Liiklus.net-is ei ole kaarte. Külastama peaks portaali tallinn.ee.
4
Probleem: 51-aastane Silme soovib esitada kaebust sinise Ford Taunuse kohta
numbrimärgiga 123 ABC, mis parkis kõnniteel ning segas jalakäijaid.
Lahendus: Silme, sisenenud Liiklus.net portaali, klikib lingil „Lisa auto”, täidab vajalikud
lahtrid, ning kui eksimusi ei tekkinud, ongi uus kirje andmebaasi sisestatud.
Probleem: 35-aastane Margus leiab õhtul töölt naastes oma garaaži kõrvalt tühermaalt
kahtlase auto. Margus soovib teada, kas tegemist pole äkki ärandatud sõidukiga.
Lahendus: Selle väljaselgitamiseks saab Margus kasutada Liiklus.net-i WAP versiooni.
Valides „Autod” ning sisestades otsitava auto registrinumbri, saab ta hõlpsasti teada, kas see
on kantud Politseiameti ärandatud sõidukite andmebaasi või mitte.
Probleem: 22-aastane Sille soovib lugeda värskeid autospordiuudiseid.
Lahendus: Liiklus.net menüüst tuleb valida „Ralliuudised”, mis viibki värskeimate uudisteni.
Probleem: 18-aastane Janar soovib teada, kas Eestis müüakse kuskil Audi Coupe esilaternaid.
Lahendus: Janar võib postitada teema Liiklus.net foorumisse ning loota, et peagi keegi
vastab.
Probleem: 32-aastane Rainer soovib leida infot Tartu jalgrattateede kohta.
Lahendus: Kahjuks Liiklus.net seda veel ei võimalda.
4. Võrdlus teistega
4.1. Liiklus.ee
Liiklus.ee pakub võrreldes Liiklus.net-iga kohati väga teemavälist ja ebapraktilist infot,
veebikeskkonna ülesehitusest on raske aru saada. Küsitavaks jääb flash-menüüde otstarbekus.
Vajalikku infot on keeruline leida.
Kujundusest:
• Sinisest tekstist on raske eraldada linke – tihti tundub tavatekst olevat link. Joonisel 1
näha olev link „Taksopeatus – Taksoinfo, tellimine, ...” viitab sootuks
taksoteemalistele uudistele, mitte asjakohasele informatsioonile.
• Veebilehel paistab koguni 4 otsingulahtrit!
5
• Võimatu on aru saada menüüde paigutusest. Tundub, nagu oleks üleval hallil taustal
paistvad lingid "Taksopeatus", "HädaAbi", "Anna Teada", "Leia sobiv" ning "Laps
liikluses” juba ühe oranžil taustal paikneva teema alamenüü, kuid nii see pole.
Alamenüüks on hoopiski Flashis kujundatud kaootiliselt vilkuv bänner, mis valitud
lehel on võrreldes järgmistega veel üsna korrapärane.
• Segadust tekitab ka all paremal ääres paistev lingikogu. Nupud "Tagasi" ja "Edasi" ei
vii kuhugi (kuhu need peaksidki viima?). Vahepeal tekkinud menüüvalikut uuesti
samale lehele tulles ei leia.
Joonis 1 Liiklus.ee taksoteemaline lehekülg
6
Liiklus.ee tekstid koosnevad enamasti PHP koodi poolt ümber kujundatuna teiste
kodulehtede, näiteks lingina näha oleva Eesti Taksojuhtide Liidu, aga samuti ka Eesti
Verekeskuse, Politsei, Päästeameti ja teiste asutuste ning ühingute saitidel paiknevad infot.
Mõistmatuks jääb, millised lisavõimalused avanevad end veebikeskkonna kasutajaks
registreerides.
4.2. Mnt.ee
Maanteeameti veebikeskkond on Liiklus.netiga võrdlemiseks liialt spetsiifiline, keskendudes
siiski riigiametkonna tegevusele. Infona pakutakse, nagu loota võiski, peamiselt maanteedega
seonduvat (teekaamerad, ilmaolud maanteedel, avatud jääteed).
Joonis 2 Maanteeameti kodulehekülg
7
Nagu jooniselt 2 näha, on menüüde ülesehitus on loogiline. Tarvitseb vaid klikkida menüüs
lingil "Maanteeinfo", kui kõik sellega seonduv ka lingikoguna avaneb. Vaid maanteeinfot
otsima tulnud inimesele on leht siiski liiga sisutihe.
5. Kirjeldus
Liiklus.net on veebiportaal, mis koondab enda alla erineva liiklusalase info. Esmaseks
komponendiks on autode andmebaas, mille kirjed sisaldavad kasutajate poolt lisatud
sissekandeid sõidukite juhtide headest ja halbadest tegudest. Koostöös Politseiametiga saab
Liiklus.net-ist vaadata andmeid ärandatud sõidukite andmebaasist. Maanteeametist tuleb
lehele igapäevane teedeinfo. Lisaks veel viide kategooriasse (liiklus, politsei, auto, autospordi
ja muud) jagatud uudised ning foorum. Mobiiltelefoniga on kättesaadav Liiklus.net-i WAP
versioon, mille abil on võimalik autode andmebaasi kirjeid lisada, neid sealt lugeda,
kontrollida, kas auto on ärandatud, lugeda uudiseid ning teedeinfot.
8
Joonis 3 Liiklus.net portaal
6. Vajalikud nõudmised serverile
• Apache 1.3.34
• PHP 4.4.1
• MySQL 4.1.13
• GD 2.0.28
9
Kasutada võib ka vajalikke nõudeid rahuldavat veebiserveri tarkvarapaketti, nagu xampp1 või
EasyPHP2.
7. Failide nimekiri
Peakaust:
• autod.php – Autode sirvimine
• bannergen.php – Banneri genereerimine lehe päises
• foorum.php – Link foorumile
• footer.php – Lehe jalus
• header.php – Lehe päis
• index.php – Esileht, kuvab 5 viimast uudist ning 10 viimast lisatud autot
• info.php – Teedeinfo maanteeameti kodulehelt
• kontakt.php – Tagasiside vorm ning emaili saatmine
• lisamine.php – Kirje lisamine autode tabelisse
• mysql.php – Andmebaasiga ühendamiseks vajalikud konstandid, lisatakse (include)
lehtedele, mis kasutavad andmebaasi.
• otsi.php – Otsing autode mustast nimekirjast ning päringu tulemus.
• uudised.php – Uudiste sirvimine
• wap.php – WAP-lehekülge tutvustav leht.
• vorm.php – Auto lisamise vorm.
/wap kaust:
• index.wml – esileht
• w_auto.php – päringuvorm autode tabelist
• w_auto2.php – tulemus autode tabelist
• w_auto3.php – üksiku kirje vaatamine autode tabelist
• w_info.php – Maanteeameti teedeinfo
• w_lisa.php – kirje lisamine autode tabelisse 1 http://www.apachefriends.org/en/xampp.html2 http://www.easyphp.net
10
• w_uudis.php – uudiste sirvimine 10 kaupa
• w_uudis2.php – üksiku uudise lugemine
Failide lähtekood on ära toodud lisas.
8. Huvitavad koodijupid
8.1. Pildi üleslaadimine ja mastaapimine failis lisamine.php
Rakendasin, nagu mujalgi, samm-sammult lähenemist. Seega proovisin esmalt tööle saada
pildifailide laadimise serverisse. Kui see töötas, asendasin lihtsa faili salvestamise funktsiooni
move_uploaded_file() faili eelneva mastaapimise ning seejärel salvestamise koodiga.
if(!$viga && ($pildifail!='' || ($_REQUEST[pildiurl]!='http://' && $_REQUEST[pildiurl]!=''))){
if($pildifail!=''){$ajutine_fail = $_FILES['pildifail']['tmp_name'];
} else if ($_REQUEST[pildiurl]!='http://'){$pilt_netist = true;$ajutine_fail = $_REQUEST[pildiurl];
}
$_FILES massiiv on üks eeldefineeritud massiividest PHP-s, olles neist ainsana on see
kahemõõtmeline. $_FILES talletab failide üleslaadimisega seotud asjakohast informatsiooni.
$_FILES[’fail’][’tmp_name’] sisaldab failile omistatud ajutist nime serveris, millena
seda talletatakse enne lõplikku salvestamist. Kuna oli vaja, et serveris talletatakse nii kasutaja
arvutist kui ka URLina antud pildifaile, ongi vajalik ülatoodud tingimus.
define("PILDIPANK", "pildid/autod/");ini_set("upload_tmp_dir", "pildid/autod/");
//Pildi suuruse ümberarvestamiseks$laius = 640; $pikkus = 640;
if(is_uploaded_file($_FILES['pildifail']['tmp_name']) || ($_REQUEST[pildiurl]!='http://' && $_REQUEST[pildiurl]!='')){
if(!($_FILES['pildifail']['type'] == 'image/jpeg' || $_FILES['pildifail']['type'] == 'image/png' || exif_imagetype($_REQUEST[pildiurl]) == 2 || exif_imagetype($_REQUEST[pildiurl]) == 3)){
Enne edasist tegutsemist failivooga kontrollitakse, kas tegemist on sobivat tüüpi failiga.
Sobivad failitüübid on PNG ja JPEG/JPG. Kui tegemist on kasutaja arvutist laaditud failiga,
kontrollitakse selle tüüpi $_FILES massiivist. URLina antud failide puhul tuleb appi
11
funktsioon exif_imagetype(), mille väärtused 2 ja 3 viitavad vastavalt JPEG/JPG või PNG
tüüpi failile.
echo '<b><font color="red">VIGA: Failivorming ei vasta nõuetele (jpg/jpeg või png)!<br><br>';
if(!$viga) $viga=TRUE;}else{
/* UUTE MÕÕTMETE ARVUTAMINE */list($laius_orig, $pikkus_orig) = getimagesize($ajutine_fail);
if ($laius && ($laius_orig < $pikkus_orig)) {$laius = ($pikkus / $pikkus_orig) * $laius_orig;
} else {$pikkus = ($laius / $laius_orig) * $pikkus_orig;
}
Pildi mastaapimiseks vajalike arvutuste tegemine.
/* RESAMPLING */$pilt_p = imagecreatetruecolor($laius, $pikkus);
if ($_FILES['pildifail']['type'] == 'image/jpeg'){$pilt = imagecreatefromjpeg($ajutine_fail);
} else if ($_FILES['pildifail']['type'] == 'image/png'){$pilt = imagecreatefrompng($ajutine_fail);
}
if ($pilt_netist && exif_imagetype($_REQUEST[pildiurl]) == 2){$pilt = imagecreatefromjpeg($ajutine_fail);
} else if ($pilt_netist && exif_imagetype($_REQUEST[pildiurl]) == 3){$pilt = imagecreatefrompng($ajutine_fail);
}
imagecopyresampled($pilt_p, $pilt, 0, 0, 0, 0, $laius, $pikkus, $laius_orig, $pikkus_orig);
/* VÄLJUND */$failinimi = PILDIPANK.$regnr.'-'.$failiaeg.'.jpg';imagejpeg($pilt_p, $failinimi, 100);
$pildiaadress = "http://www.liiklus.net/".$failinimi;$upload = TRUE;
if (!$pilt_netist && $_FILES['pildifail']['error'] != 0){echo '<b><font color="red">VIGA: Pildi üleslaadimine
ebaõnnestus!<br><br>';if(!$viga) $viga=TRUE;
}
Pildist saadakse failivoog, mis funktsiooni imagecopyresampled() abil muudetakse nõutud
suurusesse. imagecopyresampled() vajab parameetritena faili allikat ja sihtkohta ning allika
ja sihtkoha pildi koordinaatide algus- ning lõpppunkte. Viimaks salvestatakse tulemus
imagejpeg() abil.
}}else{
echo '<b><font color="red">VIGA: Potensiaalne turvarisk!<br><br>';if(!$viga) $viga=TRUE;}
Allikad koodi kirjutamiseks:
12
• Gilmore, Jason W., „Beginning PHP5 and MySQL”; 13. ptk „Handling File Uploads”.
• PHP.net: imagecopyresampled - Manual3
8.2. Kirje korrektsuse kontroll ja veahaldus failis lisamine.php
Vältimaks andmebaasi risustumist ebakompetentsete kirjetega, on failis lisamine.php kontroll,
mis tuvastab sobimatud kirjed ning väldib nende sattumist andmebaasi.
Koodist on eemaldatud teemat mittepuudutavad osad.
$viga = FALSE;$sel_aeg = date("Y-m-d H:i:s", mktime($sel_tund, $sel_minut, 0, $sel_kuu, $sel_paev, $sel_aasta));$failiaeg = date("YmdHis", mktime($sel_tund, $sel_minut, 0, $sel_kuu, $sel_paev, $sel_aasta));$kuu30 = array("04", "06", "09", "11");$regnr = str_replace(' ','',strtoupper($_REQUEST[regnr]));$kell=date("Y-m-j H:i:s");
define(POSTSEK, 20);
mysql_connect("localhost", "liiklusn_liiklus", "******");mysql_select_db("liiklusn_liiklus");
Vajalike muutujate väärtustamine. Muutuja $viga on algselt väär. Eraldi pannakse vormist
saadud andmetest kokku $sel_aeg ja $failiaeg, esimene (kujul "2006-02-28 12:20:25")
andmebaasi tarbeks ning teine (kujul "20060228122025") lisatud pildifaili nime
moodustamiseks. Defineeritakse ka konstant POSTSEK, mis määrab sekundid, kui kaua võib
samalt IP-lt tulnud vormiinfoga ajavahe olla.
Enne varasema kirje olemasolu kontrolli loodi ühendus MySQL andmebaasiga alles peale
kõikide tingimuste täitmist. Nüüd tuleb seda aga teha juba enne tingimuste kontrollimise
algust.
/* VIIMASEST LISATUD KIRJEST LIIGA VÄHE AEGA MÖÖDAS */$lause="SELECT id FROM auto WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(postaeg) < ".POSTSEK;$vastus=mysql_query($lause);$ridu=mysql_num_rows($vastus);
if ($ridu > 0 && $_REQUEST[ip] == $_SERVER["REMOTE_ADDR"]){echo '<b><font color="red">VIGA: Eelmisest sisestatud kirjest on möödas alla '.POSTSEK.'
sekundi.<br><br>';if(!$viga) $viga=TRUE;
3 http://www.php.net/manual/en/function.imagecopyresampled.php (2006-03-06)
13
Kontroll andmebaasist, kas eksisteerib sama IP-aadressiga kirje, millel on ajavahe praeguse
hetkega POSTSEK (20) sekundit. MySQL käsk UNIX_TIMESTAMP() on lähemalt selgitatud
MySQL 5.0 Reference Manual’is peatükis "12.5 Date and Time Functions"4.
/* REGISTREERIMISNUMBER JA/VÕI SÜNDMUSE KIRJELDUS PUUDU */}if ($regnr == '' || $_REQUEST[text] == '' || $_REQUEST[koht] == ''){
$korras = FALSE;echo '<b><font color="red">VIGA: Registreerimisnumber, koht ja/või sündmuse kirjeldus
puudub!<br><br>';if(!$viga) $viga=TRUE;
/* REGISTREERIMISNUMBER EI VASTA NÕUETELE */}if (!eregi("^[a-zA-Z0-9]{2,9}$", $regnr) && $regnr!=''){
echo '<b><font color="red">VIGA: Registreerimisnumber "'.$regnr.'" ei vasta nõuetele!<br><br>';
if(!$viga) $viga=TRUE;
eregi(string muster, string string) otsib etteantud stringist mustrit. Funktsioon on
kasulik kontrollides stringide, näiteks paroolide, valiidsust.5 Antud näites kontrollib eregi() registrinumbri vastavust nõuetele:6
• [a-zA-Z0-9] – et registrinumber koosneks ladina tähestiku tähtedest a-z; A-Z
ning numbritest 0-9.
• {2,9} – stringi pikkus minimaalselt 2 ja maksimaalselt 9 tähemärki7.
• ^; $ - kontrollitakse nii stringi algusest kui lõpust.
/* TULEVIKKU JÄÄV KIRJE */}if ($sel_aeg > date("Y-m-d H:i:s")){
echo '<b><font color="red">VIGA: Kuna veel pole avastatud piisavalt usaldusväärset tuleviku ennustamise meetodit, siis tulevikku jäävaid kirjeid lisada ei saa!<br><br>';
if(!$viga) $viga=TRUE;$tulevik = TRUE;
/* MITTEEKSISTEERIVA KUUPÄEVAGA KIRJE */}if (($sel_paev==31 && in_array($sel_kuu, $kuu30)) || ($sel_kuu=="02" && $sel_paev>28 && date("L", $sel_aeg)==0) || ($sel_kuu=="02" && $sel_paev>29 && date("L", $sel_aeg)==1) && !$tulevik){
echo '<b><font color="red">VIGA: Sellist kuupäeva ei eksisteeri!<br><br>';if(!$viga) $viga=TRUE;
Tingimus kontrollib, et 30 päevaga kuu puhul poleks valitud 31. kuupäeva ega veebruari
puhul vastavalt üle 28. või 29. kuupäeva, vastavalt sellele, kas on liigaasta või mitte.
4 http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html5 Gilmore, W. Jason "Beginning PHP 5 and MySQL", Apress 2004, lk. 1936 Gilmore, W. Jason "Beginning PHP 5 and MySQL", Apress 2004, lk. 190-1917 Vastavalt "Registreerimismärgid" lõik (2006-02-28) http://www.ark.ee/atp/?id=234
14
/* VIGANE MAILIAADRESS */}if(($_REQUEST[email] != '') && (strpos($_REQUEST[email], "@")===FALSE) && ( strpos($_REQUEST[email], ".")===FALSE)){
echo '<b><font color="red">VIGA: E-maili aadress on vigane! E-maili aadressi lisamine pole kohustuslik.<br><br>';
if(!$viga) $viga=TRUE;
/* KORRAGA NII PILDIURL KUI ARVUTIST */}if (($_REQUEST[pildiurl]!='' && $_REQUEST[pildiurl]!='http://') && $_FILES['pildifail']['name']!=''){
echo '<b><font color="red">VIGA: Korraga antud nii pildi URL kui ka fail!<br><br>';if(!$viga) $viga=TRUE;
/* KÕIK KORRAS! */}if (!$viga){
/* KIRJE LISAMINE ANDMEBAASI JA KUVAMINE */}
if($viga){echo 'Kirje andmebaasi lisamine ebaõnnestus!</b></font><br><br><a
href="javascript:history.go(-1)">Tagasi</a>';}else{
echo '<br><a href="autod.php">Tagasi sirvima</a>';}
15
9. WAP-tugi
WAP (Wireless Application Protocol) on standard, mille abil saab luua Internetipõhiseid
teenuseid mobiiltelefonidele. Teenused näevad välja nagu tavalised telefoni menüüvalikud,
kus liigutakse ja tehakse valikuid klaviatuuri abil.
WAP teenused kirjutatakse standardses WML (Wireless Markup Language) keeles.
Vaatamata sarnasusele HTML’iga ei saa kõikide mobiiltelefonidega siiski vaadata tavalisi
internetilehti, selleks sobivad vaid telefonile kohandatud WML’s kirjutatud lehed. Ent keelte
sarnasus võimaldab vähese õppimise ja küllaltki lihtsate vahenditega luua senistest
internetilehtedest mobiilseks kasutuseks sobivaid WAP-teenuseid.
WAP teenuste üheks tähtsamaks ühiseks omaduseks on see, et loodud teenused sobivad
ühtemoodi hästi kasutamiseks eri telefonivalmistajate WAP-telefonidega.8
Joonis 4 Liiklus.net WAP-versioon Nokia 5100 SDK's
8 EMT – Andmeside – WAP (2006.02.21) http://www.emt.ee
16
Liiklus.net omab ka WAP-tuge veebi sirvimiseks mobiiltelefoniga. Lugeda saab teedeinfot,
viimaseid uudiseid, otsida autot numbrimärgi järgi nii Liiklus.net andmebaasist kui ka
Politseiameti varastatud autode registrist. Samuti saab auto kohta veidi lihtsustatud vormi läbi
lisada uue kirje.
Liiklus.net-i WML kood genereeritakse PHP-s. Lihtsaim PHP-s genereeritud korrektselt
vormistatud koodijupp:<?php
header("Content-type: text/vnd.wap.wml");
print "<?xml version=\"1.0\"?>\n"; print "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"" . " \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n"; print "<wml>\n";print "<card>\n";print "<p>Hello world</p>\n";print "</card>\n";print "</wml>\n";
?> 9
Olulisimaks dünaamilise WAP-lehe loomisel võib lugeda muutujate edasiandmine
serveriskriptile, olgu selleks siis PHP, ASP või midagi muud. Muutuja nimi deklaleeritakse
WML-is, kirjutades muutuju nime ette $, kusjuures muutuja nimi ise peab asetsema
sulgudes.10
Lihtne vorm, kust hiljem saab muutuja $(Items) PHP-s $_REQUEST[Items] muutujana välja
kutsuda, näeb välja selline:<wml>
<card id="Order" title="Query Inventory"> <p> <select name="Items" title="Items">
<option value="Books">Books</option><option value="Music">Music</option><option value="Video">Video</option><option value="Software">Software</option>
</select></p> <do type="accept" label="Query">
<go href="http://127.0.0.1/WML/Inventory.asp" method="post"><postfield name="Items" value="$(Items)"/>
</go></do>
</card> </wml>11
9 WML Scripting Tips and Integration with PHP (2006.02.28) http://www.developer.com/lang/php/article.php/10941_1449061_210 DevGuru WML variables lõik (2006.02.28) http://www.devguru.com/Technologies/wml/quickref/wml_variables.html11 Wireless Developer Network – WML tutorial lõik (2006.02.28) http://www.wirelessdevnet.com/channels/wap/training/wml6.html
17
10.Really Simple Syndication (RSS)
RSS (inglisekeelne lühend sõnadest Rich Site Summary või Really Simple Syndication) on
väike mitmeotstarbeline laiendatav metaandmete kirjeldamise ja sündikeerimise vorming12.
RSS põhineb XML failiformaadi standardil, mida kasutatakse peamiselt internetilehekülgede
sisukorra või uudiste kokkuvõtete tegemiseks.
RSS-i levikule on kaasa aidanud ajaveebide suur populaarsus, sest RSS-formaadis
kokkuvõtted on mugav vahend operatiivse info saamiseks huvipakkuva lehekülje muutmisest.
Viimasel ajal on RSS-i üha rohkem hakatud kasutama ka meeskonnatöövahendites paljusid
meeskonnaliikmeid puudutava info edastamiseks. Tavaliselt koostatakse RSS-lehekülg
(inglise keeles feed) internetilehekülje või mõne muu seotud allika muutumisel automaatselt.
Tänapäeval saab RSS-i näitamisega hakkama ka suur osa e-postiprogramme, formaatimata
kujul (XML-ina) iga XML-formaati toetav veebilehitseja, nagu näha joonistel 5 ja 6.13
Joonis 7 Live Bookmark nupp näitab RSSi kasutamise võimalust Mozilla Firefox brauseris
Liiklus.net-i RSSi loomisel on malliks võetud Postimees online uudiste RSS14. RSS-i abil
saab lugeda Liiklus.net-i uudiseid. Liiklus.net-i RSS-koodi valmistab PHP andmebaasist
võetud kirjete järgi ning see on valideeritud Feed Validator’iga15.
Väljavõte Liiklus.net RSS-failist koos ühe uudisekirjega:<?xml version="1.0" encoding="ISO-8859-1" ?><rss version="2.0">
<channel><title>Liiklus.net uudised</title><link>http://www.liiklus.net</link><description>Liiklus.net uudised</description><language>et-ee</language><lastBuildDate>Tue, 28 Feb 2006 08:30:09 +0200</lastBuildDate><webMaster>[email protected] (webmaster)</webMaster><image>
<url>http://www.liiklus.net/liiklusnet_s.png</url><title>Liiklus.net</title><link>http://www.liiklus.net</link>
</image>
<item><title>Liiklus: Parkimise korraldamine muutub linnale tulusamaks.</title><link>http://www.liiklus.net/uudised.php?id=3</link>
</item>12 Vallaste.ee – RSS lõik (2006.02.26) http://www.vallaste.ee13 Vikipeedia – RSS lõik (2006.02.19) http://et.wikipedia.org/wiki/Rss14 Postimees online uudised (2006.02.26) http://www.postimees.ee/rssfeed/index.php15 Feed Validator for Atom and RSS (2006.02.19) http://feedvalidator.org
18
<channel></rss>
Joonis 8 - RSS kanalite haldamine e-posti programmis Mozilla Thunderbird
11.Foorum
Liiklus.net kasutab foorumina phpBB foorumit, mis on üks laiemalt kasutatavaid
foorumikoode. phpBB baseerub PHP-l, on pideva aredustöö tõttu küllaltki turvaline ning
pakub erinevaid võimalusi, omades näiteks eraldi administreerimisliidest.
Rohkem informatsioon phpBB foorumi kohta võib leida selle kodulehelt aadressilt
http://www.phpbb.com.
19
12.Administreerimine
phpMyAdmin on PHPs kirjutatud töövahend, mis võimaldab hallata MySQLi üle veebi.
Hetkel saab selle abil andmebaase luua ja eemaldada, luua/eemaldada/muuta tabeleid ning
selle välju, käivitada ükskõik millist MySQL käsku ning muuta väljade sisu.16
phpMyAdmin pakub kõrgelt optimiseeritud osuta-ja-kliki (point-and-click) kasutajaliidest,
mis kahandab suuresti kasutajate poolt tekitatud apsude arvu.17 Kasutajaliides on saadaval ka
eestikeelsena.
Liiklus.netis on phpMyAdmin abil võimalik lisada uudiseid, administreerida (kustutada ja
muuta) kirjeid autode kohta. Vajadusel saab ka muuta tabelite struktuuri, luua andmebaasist
varukoopiaid ning seda teisaldada. Uudise lisamine phpMyAdmin abil on näidatud joonisel 9.
16 phpMyAdmin koduleht, lõik (2006.02.19) http://www.phpmyadmin.net17 Gilmore, W. Jason "Beginning PHP 5 and MySQL: From Novice to Professional"; Apress 2004; lk. 562
20
Joonis 10 - Uudise lisamine phpMyAdminis
Administreerimisliidese arendusest Liiklus.netile tuleb lähemalt juttu peatükis
"Edasiarendus".
13.Edasiarendus
Edasiarendused on tähtsuse järjekorras.
• Administeerimisliides
Praeguses Liiklus.net versioonis toimub uudiste lisamine ning kirjete parandamine läbi
veebipõhise phpMyAdmin-i. See tagab küll turvalise, ent veidi tülika lähenemise. Tarvis
oleks administreerimisliidest, kus oleks võimalik lihtsasti lisada uudiseid (teadmata
selleks, näiteks, millist numbrilist tähist kannavad andmebaasis eri tüüpi uudised) ning
samas lihtsustatud korras hallata andmebaasi kirjeid. Näiteks, et sama numbrimärgiga
tähistatud kirjetel oleks lihtne muuta auto mark ja mudel ühesuguseks ning hõlpsasti
eemaldada mittevajalikud kirjed.
• Pildigalerii
Pildigalerii avatud lähtekoodiga Gallery218 baasil, mida saab hõlpsasti integreerida
ülejäänud portaaliga. Gallery2 on üle veebi hallatav pildigalerii, kuhu vajadusel saavad
pilte lisada ka tavakasutajad.
• Koodi optimiseerimine (korduste kõrvaldamine, omaloodud funktsioonide
kasutuselevõtt)
Hetkel on Liiklus.net-i kood nii mõneski kohas kohmakas ning ülearu korratud. Näiteks
kuvavad uudised.php, autod.php vastavalt uudiseid ja autode kirjeid, samas teeb seda ka
index.php. Eesmärgiks on korduvate käsujadade kokkukoondamine, et kood oleks lühem.
• Uudiste piltide skaleerimine
Administreerimisliidese osa, kus sarnaselt lisamine.php-le võiks olla võimalus lisada pilt
uudisele juurde arvutist või URL-na, peale mida see salvestataks serverisse.
• Uudiste kommenteerimisvõimalus
• Kasutajaks registreerimine, kasutades foorumi andmebaasi.
Kasutajaks registreerimine toimuks läbi phpBB baasil foorumi. Liiklus.net lehele 18 http://gallery.menalto.com
21
logimisel kontrollitakse kasutajanime olemasolu ning parooli õigust foorumi
andmebaasist.
14.Kokkuvõte
Seminaritööna valmis veebirakendus, mis koondab endas erineva liiklusalase info.
Veebirakendus on kirjutatud veebiprogrammeerimiskeeles PHP ning kasutab andmetega
manipuleerimiseks MySQL andmebaasi. Rakendusega on integreeritud phpBB foorum,
tulevikus on plaanis lisada Gallery2 pildigalerii.
Liiklus.net veebiportaalis saab lugeda värskemaid liiklus- ning autoteemalisi uudiseid, tutvuda
autode andmebaasi sissekannetega, saata päringuid Politseiameti varastatud sõidukite
infobaasi, lugeda Maanteeameti infot teedeolude kohta ning lugeda ja kirjutada postitusi
foorumis. Liiklus.net uudised on saadaval ka RSS-voona.
Veebirakendust saab kasutada ka mobiiltelefonis, kui sellel on olemas WAP-tugi. WAPi
vahendusel saab tutvuda andmebaasi kirjetega, samuti neid lisada, kontrollida numbrimärgi
järgi, kas sõiduk on kantud varastatud sõidukite registrisse, tutvuda teedeoludega ning lugeda
uudiseid.
22
15.Lühendid
ASP – Active Server Pages
HTML – Hypertext Markup Language
PHP – PHP: Hypertext Preprocessor
RSS – Really Simple Syndicaton
SDK – Software Development Kit
SQL – Structured Query Language
WAP – Wireless Application Protocol 19
WML – Wireless Markup Language
XML – Extensible Markup Language
19 What is WAP? - A Word Definition From the Webopedia Computer Dictionary (2006-02-26)
http://www.webopedia.com/TERM/W/WAP.html
23
16.Lisa: Liiklus.net veebirakenduse kood
16.1.Fail: autod.php<?php include ("header.php");
mysql_connect("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db("liiklusn_liiklus");
$lause="SELECT regnr, mark, mudel, COUNT(regnr) as loendur FROM auto GROUP BY regnr";$vastus=mysql_query($lause);
echo "<h1>Autod</h1>
<table border=0 cellspacing=0 cellpadding=3>";
while($rida=mysql_fetch_array($vastus)){echo "<tr><td><a href='leia.php?regnr=$rida[regnr]'>$rida[regnr]</a></td>
<td>$rida[mark] $rida[mudel]</td><td><center>($rida[loendur])</center></td></tr>\n";}echo "</table>";
mysql_close();include ("footer.php");?>
16.2.Fail: foorum.php<?php include ("header.php");
echo '<h1>Foorum</h1>';
echo '<a href="foorum/index.php" target="_blank">Sisene foorumisse</a>';
include ("footer.php");?>
16.3.Fail: footer.php<br><br></td>
<td class="pikkjoon"></td>
</tr></table>
<table border="0" cellspacing="0" cellpadding="0" width="770" align="center"><tr><td class="laijoon"></td></tr></table>
<table border="0" cellspacing="0" cellpadding="0" width="770" align="center"><tr><td><div align="right"><a href="http://validator.w3.org/check?uri=referer" target="_blank"><img src="pildid/t_liiklus/w3c-valid-html401.png" alt="Valid HTML 4.01 Transitional" border="0"></a> <a href="http://jigsaw.w3.org/css-validator/check?uri=referer" target="_blank"><img style="border:0" src="pildid/t_liiklus/w3c-valid-css.png" alt="Valid CSS!"></a> <a href="http://feedvalidator.org/check.cgi?url=http://www.liiklus.net/rss.php" target="_blank"><img src="pildid/t_liiklus/w3c-valid-rss.png" alt="[Valid RSS]" title="Validate my RSS feed" border="0" /></a> <a href="http://www.php.net" target="_blank"><img src="php-power2.png" border="0" alt="PHP Powered"></a></div>
24
<div align="center"><font face="Arial,Helvetica" size="-2">© 2005-2006Liiklus.net <!--(TD & mmz)--><br>Valminud <a href="http://www.tlu.ee/" target="_blank">Tallinna Ülikooli</a> informaatika osakonnas seminaritööna</font></div></td>
</tr></table></body></html>
16.4.Fail: header.php<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/transitional.dtd"><html><head>
<title>Liiklus.net</title><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><link rel="stylesheet" type="text/css" href="stiil.css"><link rel="alternate" title="Liiklus.net uudised" href="rss.xml"
type="application/rss+xml"><link rel="Shortcut Icon" href="liiklus.ico">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#666666" vlink="#666666" alink="#999999"><table align="center" border="0" cellspacing="0" cellpadding="0" width="770">
<tr><td colspan="5"><a href="index.php"><?php $pildid = array(11, 11, 22, 33, 11, 22,
33); $paev = date("w"); echo '<img src="pildid/t_liiklus/'.$pildid[$paev].'.png" border="0" alt="Liiklus.net">'; ?></a></td>
</tr>
<tr><td class="taust3" colspan="5"></td>
</tr><tr>
<td class="pikkjoon"></td><td valign="top" class="taust2">
<table align="center" border="0" cellspacing="0" cellpadding="0" width="140"><tr>
<td><b><a href="info.php">Liiklusinfo</a></b><br class="menupoint"> <a href="info.php">- Teedeinfo</a><!--br class="menupoint"> - Linnadevahelised kaugused<br class="menupoint"> - Muu info-->
<br><br><b><a href="autod.php">Autod</a></b><br class="menupoint"> <a href="vorm.php">- Lisa auto</a><br class="menupoint"> <a href="otsi.php">- Otsing</a><br class="menupoint"> <a href="varastatud.php">- Varastatud</a>
<br><br><b><a href="uudised.php">Uudised</a></b><br class="menupoint"> <a href="uudised.php?kategooria=1">- Liiklusuudised</a><br class="menupoint"> <a href="uudised.php?kategooria=2">- Politseiuudised</a><br class="menupoint"> <a href="uudised.php?kategooria=3">- Autouudised</a><br class="menupoint"> <a href="uudised.php?kategooria=4">- Ralliuudised</a><br class="menupoint"> <a href="uudised.php?kategooria=5">- Muud Uudised</a>
<br><br><b><a href="foorum.php">Foorum</a></b>
<!--br><br>Pildigalerii<br class="menupoint"> - Rallipildid<br class="menupoint"> - Messipildid<br class="menupoint"> - Muud pildid-->
<br><br><b><a href="wap.php">WAP</a></b><br class="menupoint"><b><a href="kontakt.php">Tagasiside</a></b><br class="menupoint"><b><a href="reklaam.php">Reklaam</a></b>
</td></tr>
</table></td>
25
<td class="pikkjoon"></td>
<td width="619" valign="top">
16.5.Fail: index.php<?php include "header.php";include "mysql.php";
mysql_connect("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db("liiklusn_liiklus");
echo '<h3>Viimased uudised</h3>';
$lause="SELECT *, UNIX_TIMESTAMP(kuupaev) AS aeg FROM uudised ORDER BY aeg DESC LIMIT 5";$vastus=mysql_query($lause);
while($rida=mysql_fetch_array($vastus)){echo '<table class="raamiga" align=center><tr><td>';echo '<table border=0 cellspacing=0 cellpadding=3 width=550 align=center><tr>';echo '<th class="pealkiri" align=left>'.$rida[pealkiri].'</th></tr>';echo '<tr><td>'.strftime('%d.%m.%Y %H:%M', $rida[aeg]).'</td></tr>';
echo '<tr><td>';
if ($rida[pildiurl] != ''){echo '<IMG src="'.$rida[pildiurl].'" align="right" alt="'.$rida[pealkiri].'">';
}
echo $rida[tekst];
if ($rida[allikas] != ''){echo '<div align="right">';if($rida[allika_url] != ''){
echo '<a href="'.$rida[allika_url].'">';if ($rida[allika_pilt] != ''){
echo '<img src="'.$rida[allika_pilt].'" align="right" alt="'.$rida[allikas].'"></a>';
}else {
echo $rida[allikas].'</a>';}
}echo '</div>';
}
echo '</td></tr></table>';echo '</td></tr></table><br>';
}
echo '<h3>Lisatud autod</h3>';
$lause="SELECT *, UNIX_TIMESTAMP(postaeg) AS kell FROM auto ORDER BY postaeg DESC LIMIT 5";$vastus=mysql_query($lause);
echo '<table class="raamiga" align=center><tr><td>';echo '<table border=0 cellspacing=0 cellpadding=3 width=550 align=center>';
while($rida=mysql_fetch_array($vastus)){echo '<tr><td>'.date("d.m.Y H:i",$rida[kell]).' <b><a
href="leia.php?id='.$rida[ID].'">'.$rida[regnr].'</a></b> '.$rida[mark].' '.$rida[mudel].'</td></tr>';}
echo '</table>';echo '</td></tr></table>';
mysql_close();
include "footer.php";
26
?>
16.6.Fail: info.php<?php include "header.php";?>
<h1>Teedeinfo</h1>
<p><a href="http://www.balticroads.net/cgi-bin/frameset?lang=ee,mode=temp,main=ee" target="_blank">Ilmaolud maanteedel</a> (balticroads.net)</p>
<br><?php$body = fopen("http://amet.mnt.ee/maanteeinfo/soidutingimused/op_info/tekst.htm", "r");$asjad = '';while (!feof($body)){
$asjad .= fread($body, 8192);}fclose($body);
echo (strip_tags($asjad, "<p><b><i><u><a><br><meta>"));
?>
<?php include "footer.php";?>
16.7.Fail: kontakt.php<?php include ("header.php");
echo "<h1>Kontakt</h1>
<form method='post' action='$PHP_SELF'><table border=0>
<tr><td> </td><td><select name='tyyp'><option>Küsimus</option><option>Arvamus</option><option>Reklaam</option><option>Muu</option></select></td></tr>
<tr><td>Pealkiri:</td><td><input type='text' name='pealkiri' maxlength='256'></td></tr>
<tr><td>Saatja nimi:</td><td><input type='text' name='saatja' maxlength='256'></td></tr>
<tr><td>Email:</td><td><input type='text' name='saatja_email' maxlength='256'></td></tr>
<tr><td valign='top'>Sisu:</td><td><textarea name='tekst' cols='25' rows='5'></textarea></td></tr>
27
<tr><td> </td><td><input type='checkbox' name='vastus' CHECKED>Soovin meilitsi vastust.<input type='hidden' name='saada' value='1'></td></tr>
<tr><td> </td><td><input type='submit' value='Saada'> <input type='reset' value='Katkesta'></td></tr></table></form>";
if (isset($_REQUEST[saada])){
if(($_REQUEST[saatja_email] != '') && (strpos($_REQUEST[saatja_email], "@")===FALSE) && ( strpos($_REQUEST[saatja_email], ".")===FALSE))
{echo '<b><font color="red">VIGA: E-maili aadress on vigane! E-maili aadressi
lisamine pole kohustuslik, kui Te ei soovi vastust.</font></b><br><br>';$viga=TRUE;
}if($_REQUEST[tekst] == ''){echo '<b><font color="red">VIGA: Kirjutage palun midagi ikka kirja sisuks ka!
;)</font></b><br><br>';$viga=TRUE;
}else{
if($_REQUEST[saatja] == ''){$saatja = '(anonüümne)';
}if($_REQUEST[saatja_email] == ''){
$saatja = 'email puudub';}
mail("[email protected],[email protected]", "Liiklus.net: $tyyp: $pealkiri", "$tekst \nSaatja: $saatja ($saatja_email)\nVastus: $vastus", $headers);
$headers = 'From:'.$email.'\r\n';$headers .= 'Reply-To'.$email.'\r\n';$headers .= 'Content-Type: text/plain;\r\n charset=iso-8859-1\r\n';$headers .= 'X-Mailer: Liiklus.net/form';
print 'Teie kiri on edastatud liiklus.net meeskonnale.';}
}
if($viga){echo '<a href="javascript:history.go(-1)">Tagasi</a>';
}
include ("footer.php");?>
16.8.Fail: leia.php<?php include("header.php");
mysql_connect("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db("liiklusn_liiklus");
if (isset($_REQUEST[regnr])){
$sorttulp="id";if($_REQUEST["sortveerg"]=="id"){
$sorttulp="id";}if($_REQUEST["sortveerg"]=="aeg"){
$sorttulp="aeg";}
28
if($_REQUEST["sortveerg"]=="nimi"){$sorttulp="nimi";
}if($_REQUEST["sortveerg"]=="tyyp"){
$sorttulp="tyyp";}
$lause="SELECT id, regnr, mark, mudel, varv, aeg, koht, nimi, email, postaeg, text, tyyp, picurl FROM auto WHERE regnr='$_REQUEST[regnr]' ORDER BY $sorttulp";
$vastus=mysql_query($lause);
echo "<p><table border=1 cellspacing=0 cellpadding=3 width='100%'><tr><th><a href='leia.php?regnr=$_REQUEST[regnr]&sortveerg=id'>ID</a></th><th><a href='leia.php?regnr=$_REQUEST[regnr]&sortveerg=aeg'>Aeg</a></th><th><a href='leia.php?regnr=$_REQUEST[regnr]&sortveerg=koht'>Koht</a></th><th>Kommentaar</th><th><a href='leia.php?regnr=$_REQUEST[regnr]&sortveerg=tyyp'>Tüüp</a></th><th>Pilt</th><th><a href='leia.php?regnr=$_REQUEST[regnr]&sortveerg=nimi'>Lisaja nimi</a></th><th>Postituse aeg</th>";
while($rida=mysql_fetch_array($vastus)){
switch ($rida[picurl]) {
case "http://" :$pilt = " ";break;
case "" :$pilt = " ";break;
default :$pilt = "<a href='$rida[picurl]' target='_blank'>Pilt</a>";break;
}
if ($rida[nimi] == '') {$nimi = '<font size="-1">(anonüümne)</font>';
} else {$nimi = $_REQUEST[nimi];
}
echo '<tr><td><center><a href=leia.php?id='.$rida[id].'>'.$rida[id].'</a></center></td>';
echo '<td>'.$rida[aeg].'</td>';echo '<td>'.$rida[koht].'</td>';echo '<td>'.$rida[text].'</td>';echo '<td><center><img
src="pildid/emotikoonid/'.$rida[tyyp].'.gif"></center></td>';echo '<td>'.$pilt.'</td>';echo '<td>'.$nimi.'</td>';echo '<td>'.$rida[postaeg].'</td>';echo '</tr>';
}echo '</table>';
}else if(isset($_REQUEST[id])){
$lause="SELECT *, UNIX_TIMESTAMP(aeg) AS aeg, UNIX_TIMESTAMP(postaeg) AS postaeg FROM auto WHERE id='$_REQUEST[id]'";
$vastus=mysql_query($lause);
echo "<p><table border=0 cellspacing=0 cellpadding=3>";
while($rida=mysql_fetch_array($vastus)){
switch ($rida[picurl]) {
case "http://" :$pilt = " ";
29
break;
case "" :$pilt = " ";break;
default :$pilt = '<img src="'.$rida[picurl].'" alt="'.$rida[picurl].'">';break;
}
if ($rida[nimi] == '') {$nimi = '<font size="-1">(anonüümne)</font>';
} else {$nimi = $_REQUEST[nimi];
}
echo '<tr><td colspan=2><h3>Sissekanne #'.$rida[ID].'</h3></td></tr>';echo '<tr><td><b>Mark:</b></td><td>'.$rida[mark].' '.$rida[mudel].'</td></tr>';echo '<tr><td><b>Värv:</b></td><td>'.$rida[varv].'</td></tr>';echo '<tr><td><b>Koht:</b></td><td>'.$rida[koht].'</td></tr>';echo '<tr><td><b>Tüüp:</b></td><td><img
src="pildid/emotikoonid/'.$rida[tyyp].'.gif"></td></tr>';echo '<tr><td><b>Aeg:</b></td><td>'.date("d.m.Y H:i",$rida[aeg]).'</td></tr>';echo '<tr><td><b>Kommentaar:</b></td><td>'.$rida[text].'</td></tr>';echo '<tr><td colspan=2> </td></tr>';echo '<tr><td><b>Lisaja:</b></td><td>'.$nimi.'</td></tr>';echo '<tr><td><b>Lisamise aeg:</b></td><td>'.date("d.m.Y
H:i",$rida[postaeg]).'</td></tr>';}echo '</table>';
}else{echo '<font color="red"><b>VIGA! Liiga palju atribuute!</b></font>';
}
mysql_close();
echo '<br><br><a href="autod.php">Tagasi sirvima</a>';
include "footer.php";
?>
16.9.Fail: lisamine.php<?phpinclude ("header.php");
$viga = FALSE;$upload = FALSE;$sel_aeg = date("Y-m-d H:i:s", mktime($sel_tund, $sel_minut, 0, $sel_kuu, $sel_paev, $sel_aasta));$failiaeg = date("YmdHis", mktime($sel_tund, $sel_minut, 0, $sel_kuu, $sel_paev, $sel_aasta));$kuu30 = array("04", "06", "09", "11");$regnr = str_replace(' ','',strtoupper($_REQUEST[regnr]));$kell=date("Y-m-j H:i:s");
echo "<h1>Kirje lisamine</h1>";
define(POSTSEK, 20);
mysql_connect("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db("liiklusn_liiklus");
/* VIIMASEST LISATUD KIRJEST LIIGA VÄHE AEGA MÖÖDAS */
$lause="SELECT id FROM auto WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(postaeg) < ".POSTSEK;$vastus=mysql_query($lause);$ridu=mysql_num_rows($vastus);
if ($ridu > 0 && $_REQUEST[ip] == $_SERVER["REMOTE_ADDR"]){
30
echo '<b><font color="red">VIGA: Eelmisest sisestatud kirjest on möödas alla '.POSTSEK.' sekundi.<br><br>';
if(!$viga) $viga=TRUE;
/* REGISTREERIMISNUMBER JA/VÕI SÜNDMUSE KIRJELDUS PUUDU */
}if ($regnr == '' || $_REQUEST[text] == '' || $_REQUEST[koht] == ''){$korras = FALSE;echo '<b><font color="red">VIGA: Registreerimisnumber, koht ja/või sündmuse kirjeldus
puudub!<br><br>';if(!$viga) $viga=TRUE;
/* REGISTREERIMISNUMBER EI VASTA NÕUETELE */
}if (!eregi("^[a-zA-Z0-9]{2,9}$", $regnr) && $regnr!=''){echo '<b><font color="red">VIGA: Registreerimisnumber "'.$regnr.'" ei vasta
nõuetele!<br><br>';if(!$viga) $viga=TRUE;
/* TULEVIKKU JÄÄV KIRJE */
}if ($sel_aeg > date("Y-m-d H:i:s")){echo '<b><font color="red">VIGA: Kuna veel pole avastatud piisavalt usaldusväärset
tuleviku ennustamise meetodit, siis tulevikku jäävaid kirjeid lisada ei saa!<br><br>';if(!$viga) $viga=TRUE;$tulevik = TRUE;
/* MITTEEKSISTEERIVA KUUPÄEVAGA KIRJE */
}if (($sel_paev==31 && in_array($sel_kuu, $kuu30)) || ($sel_kuu=="02" && $sel_paev>28 && date("L", $sel_aeg)==0) || ($sel_kuu=="02" && $sel_paev>29 && date("L", $sel_aeg)==1) && !$tulevik){
echo '<b><font color="red">VIGA: Sellist kuupäeva ei eksisteeri!<br><br>';if(!$viga) $viga=TRUE;
/* VIGANE MAILIAADRESS */
}if(($_REQUEST[email] != '') && (strpos($_REQUEST[email], "@")===FALSE) && ( strpos($_REQUEST[email], ".")===FALSE)){
echo '<b><font color="red">VIGA: E-maili aadress on vigane! E-maili aadressi lisamine pole kohustuslik.<br><br>';
if(!$viga) $viga=TRUE;
/* KORRAGA NII PILDIURL KUI ARVUTIST */
}if (($_REQUEST[pildiurl]!='' && $_REQUEST[pildiurl]!='http://') && $_FILES['pildifail']['name']!=''){
echo '<b><font color="red">VIGA: Korraga antud nii pildi URL kui ka fail!<br><br>';if(!$viga) $viga=TRUE;
/* UURIME, KUIDAS ON LOOD PILTIDEGA */
}if($pildifail!='' || $_REQUEST[pildiurl]!='http://'){
if($pildifail!=''){$ajutine_fail = $_FILES['pildifail']['tmp_name'];
} else if ($_REQUEST[pildiurl]!='http://'){$ajutine_fail = $_REQUEST[pildiurl]!='http://';
}
define("PILDIPANK", "pildid/autod/");ini_set("upload_tmp_dir", "pildid/autod/");
//Pildi suuruse ümberarvestamiseks$laius = 640; $pikkus = 640;
if(is_uploaded_file($_FILES['pildifail']['tmp_name'])){
31
if(!($_FILES['pildifail']['type'] == 'image/jpeg' || $_FILES['pildifail']['type'] == 'image/png')){
echo '<b><font color="red">VIGA: Failivorming ei vasta nõuetele (jpg/jpeg või png)!<br><br>';
if(!$viga) $viga=TRUE;}else{
/* Uute mõõtmete arvutamine */list($laius_orig, $pikkus_orig) = getimagesize($ajutine_fail);
if ($laius && ($laius_orig < $pikkus_orig)) {$laius = ($pikkus / $pikkus_orig) * $laius_orig;
} else {$pikkus = ($laius / $laius_orig) * $pikkus_orig;
}
/* Resampling */$pilt_p = imagecreatetruecolor($laius, $pikkus);
if ($_FILES['pildifail']['type'] == 'image/jpeg'){$pilt = imagecreatefromjpeg($ajutine_fail);
} else if ($_FILES['pildifail']['type'] == 'image/png'){$pilt = imagecreatefrompng($ajutine_fail);
}
imagecopyresampled($pilt_p, $pilt, 0, 0, 0, 0, $laius, $pikkus, $laius_orig, $pikkus_orig);
/* Väljund */$failinimi = PILDIPANK.$regnr.'-'.$failiaeg.'.jpg';imagejpeg($image_p, $failinimi, 100);
//$tulemus = move_uploaded_file($_FILES['pildifail']['tmp_name'], $failinimi);
$pildiaadress = "http://www.liiklus.net/".$failinimi;$upload = TRUE;
if ($_FILES['pildifail']['error'] != 0){echo '<b><font color="red">VIGA: Pildi üleslaadimine
ebaõnnestus!<br><br>';if(!$viga) $viga=TRUE;
}
/*$failinimi = PILDIPANK.$regnr.'-'.$failiaeg.'.jpg';echo "http://www.liiklus.net/".$failinimi;$tulemus = move_uploaded_file($_FILES['pildifail']['tmp_name'], $failinimi);echo "Pikkus: ".imagesy(imagecreatefromjpeg($failinimi))."<br/>";
$pildiaadress = "http://www.liiklus.net/".$failinimi;$upload = TRUE;
if ($tulemus != 1){echo '<b><font color="red">VIGA: Pildi üleslaadimine
ebaõnnestus!<br><br>';if(!$viga) $viga=TRUE;
}*/}
}else{echo '<b><font color="red">VIGA: Potensiaalne turvarisk!<br><br>';if(!$viga) $viga=TRUE;}
/* KÕIK KORRAS! */
}if (!$viga){$korras = TRUE;
$lause="SELECT * FROM auto WHERE ip=$ip AND kuupaev=";
if(!isset($pildiaadress)) $pildiaadress = $_REQUEST[pildiurl];
$lause="INSERT INTO auto (regnr, mark, mudel, varv, aeg, koht, nimi, email, postaeg, IP, text, tyyp, picurl) VALUES ('$regnr', '$_REQUEST[mark]', '$_REQUEST[mudel]',
32
'$_REQUEST[varv]', '$sel_aeg', '$_REQUEST[koht]', '$_REQUEST[nimi]', '$_REQUEST[email]', '$kell', '$_REQUEST[ip]', '$_REQUEST[text]', '$_REQUEST[tyyp]', '$pildiaadress')"; mysql_query($lause);
echo mysql_error(); // teade vea puhul$idnumber=mysql_insert_id(); echo "<B>Teie sissekanne on edukalt salvestatud.</B><P><table border=0 cellspacing=3 cellpadding=1><tr><td>Reg.
nr.:</td><td>$_REQUEST[regnr]</td></tr><tr><td>Mark:</td><td>$_REQUEST[mark]</td></tr><tr><td>Mudel:</td><td>$_REQUEST[mudel]</td></tr><tr><td>Värv:</td><td>$_REQUEST[varv]</td></tr><tr><td>Aeg:</td><td>$sel_aeg</td></tr><tr><td>Koht:</td><td>$_REQUEST[koht]</td></tr><tr><td>Nimi:</td><td>$_REQUEST[nimi]</td></tr><tr><td>Email:</td><td><a href='mailto:$email'>$email</a></td></tr><tr><td>Postaeg:</td><td>$kell</td></tr><tr><td>IP:</td><td>$_REQUEST[ip]</td></tr><tr><td>Tekst:</td><td>$_REQUEST[text]</td></tr><tr><td>Tüüp:</td><td>$_REQUEST[tyyp]</td></tr><tr><td valign='top'>Pilt:</td><td><a href='$pildiaadress'>$pildiaadress</a><br><br><img
src='$pildiaadress' alt='$failinimi'></td></tr></table>";
mysql_close();}
if($viga){echo 'Kirje andmebaasi lisamine ebaõnnestus!</b></font><br><br><a
href="javascript:history.go(-1)">Tagasi</a>';}else{
echo '<br><a href="autod.php">Tagasi sirvima</a>';}
include ("footer.php");?>
16.10.Fail: otsi.php<?php include ("header.php");
echo "<h1>Otsing</h1>";
// define (T_LEHEL, 20); //otsingutulemusi ühel lehel
if (!isset($_REQUEST[otsing]) || $_REQUEST[otsing] == ''){
echo "<center><form action='$PHP_SELF' method='post'>
<input name='otsing' type='text'>
<select name='tulp'><option value='koik'>kõik</option><option value='regnr'>reg. nr.</option><option value='mark'>mark</option><option value='varv'>värv</option><option value='koht'>koht</option><option value='nimi'>lisaja nimi</option><option value='text'>tekst</option></select>
<p><input type='submit' value='Otsi'>
</form></center>";
if(isset($_REQUEST[otsing]) && $_REQUEST[otsing] == ''){echo '<p><b><font color="red">VIGA: Palun sisestage otsingu märksõna!</b></p>';
}
}else{
33
mysql_connect("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db("liiklusn_liiklus");
/* OTSING KÕIKIDEST TULPADEST */
if($_REQUEST[tulp] == 'koik'){$tulbad = array("regnr", "mark", "varv", "koht", "nimi", "text");
for ($i=0; $i<5; $i++){$lause="SELECT * FROM auto WHERE $tulbad[$i] LIKE '%$_REQUEST[otsing]%'";$vastus=mysql_query($lause);$ridu+=mysql_num_rows($vastus);
}
if ($ridu==0) {echo "<p>Päringule '<b>$_REQUEST[otsing]</b>' kõikidest tulpadest vastavaid
tulemusi andmebaasist ei leitud!<p><a href='otsi.php'>Proovi uuesti!</a>";}else{
/*$lehti=ceil($ridu/ T_LEHEL);if (isset($_REQUEST[leht])){
$leht = $_REQUEST[leht];}else{
$leht=1;}
if ($lehti > 1){for ($i=1; $i <= $lehti; $i++){
if ($i==$leht){echo $i;
}else{echo '<a
href="otsi.php?otsing='.$_REQUEST[otsing].'&leht='.$i.'">'.$i.'</a>';}if ($i>0 && $i<$lehti) echo " | ";
}}
echo "<br>";
$naita_alates=($leht-1)*T_LEHEL;*/
echo "Tulemusi: $ridu<p><table border=0 cellpadding=2 cellspacing=0><tr><th>Reg. nr.:</th><th>Mark:</th><th>Värv:</th><th>Aeg:</th><th>Koht:</th><th colspan='2'>Kommentaar:</th><th>Lisaja:</th><th>Postituse aeg:</th></tr>\n";
for ($i=0; $i<5; $i++){$lause="SELECT * FROM auto WHERE $tulbad[$i] LIKE
'%$_REQUEST[otsing]%'";// LIMIT $naita_alates, ".T_LEHEL;$vastus=mysql_query($lause);
while($rida=mysql_fetch_array($vastus)){
foreach ($rida as $kirje){if ($kirje == '') $kirje = ' ';
}
if ($rida[picurl] == 'http://'){$pilt = ' ';
}else{$pilt = "<a href='$rida[picurl]' target='_blank'>Pilt</a>";
}
echo "<tr><td class='raamiga'><b><font face=arial><a
href='leia.php?regnr=$rida[regnr]'>$rida[regnr]</a></font></b></td><td width='100' class='raamiga'>$rida[mark] $rida[mudel]</td>
34
<td class='raamiga'>$rida[varv]</td><td class='raamiga'>$rida[aeg]</td><td class='raamiga'>$rida[koht]</td><td width='300' class='raamiga'>$rida[text] $pilt</td><td class='raamiga'><center><img
src='pildid/emotikoonid/$rida[tyyp].gif'></center></td><td class='raamiga'><a
href='mailto:$rida[email]'>$rida[nimi]</a></td><td class='raamiga'>$rida[postaeg]</td></tr>\n";
}}echo "</table>";
}
/* OTSING KINDLAST TULBAST */
}else{$lause="SELECT * FROM auto WHERE $_REQUEST[tulp] LIKE '%$_REQUEST[otsing]%'";$vastus=mysql_query($lause);$ridu=mysql_num_rows($vastus);
if ($ridu==0) {echo "<p>Päringule '<b>$_REQUEST[otsing]</b>' tulbast
'<b>$_REQUEST[tulp]</b>' vastavaid tulemusi andmebaasist ei leitud!<p><a href='otsi.php'>Proovi uuesti!</a>";
} else {echo "Tulemusi: $ridu<p><table border=1 cellpadding=3><tr><th>Reg. nr.:</th><th>Mark:</th><th>Värv:</th><th>Aeg:</th><th>Koht:</th><th colspan='2'>Kommentaar:</th><th>Lisaja:</th><th>Postituse aeg:</th></tr>\n";
while($rida=mysql_fetch_array($vastus)){
foreach ($rida as $kirje){if ($kirje == '') $kirje = ' ';
}
if ($rida[picurl] == 'http://'){$pilt = ' ';
}else{$pilt = "<a href='$rida[picurl]' target='_blank'>Pilt</a>";
}
echo "<tr><td><b><font face=arial><a
href='leia.php?regnr=$rida[regnr]'>$rida[regnr]</a></font></b></td><td width='100'>$rida[mark] $rida[mudel]</td><td>$rida[varv]</td><td>$rida[aeg]</td><td>$rida[koht]</td><td width='300'>$rida[text] $pilt</td><td><center><img
src='pildid/emotikoonid/$rida[tyyp].gif'></center></td><td><a href='mailto:$rida[email]'>$rida[nimi]</a></td><td>$rida[postaeg]</td></tr>\n";
}
echo "</table>";
}}mysql_close();
}
include ("footer.php");?>
35
16.11.Fail: reklaam.php<?php include ("header.php");
echo '<h1>Reklaam</h1>
Reklaami tellimiseks Liiklus.net veebis võtke ühendust aadressil reklaam(at)liiklus.net või kasutage meie <a href="kontakt.php">tagasiside vormi</a>.';
include ("footer.php");?>
16.12.Fail: rss.php
<?phpheader('Content-type: application/xml');echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';echo '<rss version="2.0">';echo '<channel>';echo '<title>Liiklus.net uudised</title>';echo '<link>http://www.liiklus.net</link>';echo '<description>Liiklus.net uudised</description>';echo '<language>et-ee</language>';echo '<lastBuildDate>'.date("D, d M Y H:i:s O").'</lastBuildDate>';echo '<webMaster>[email protected] (webmaster)</webMaster>';
echo '<image>';echo '<url>http://www.liiklus.net/liiklusnet_s.png</url>';echo '<title>Liiklus.net</title>';echo '<link>http://www.liiklus.net</link>';echo '</image>';
if(isset($_REQUEST[limiit])){$limiit = $_REQUEST[limiit];
}else{$limiit = 25;
}
mysql_connect ("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db ("liiklusn_liiklus");
$lause = "SELECT *, UNIX_TIMESTAMP(kuupaev) AS aeg FROM uudised ORDER BY kuupaev DESC LIMIT $limiit";$vastus=mysql_query($lause);while($rida=mysql_fetch_array($vastus)){
echo '<item>';
if ($rida[tyyp]==1) $tyyp="Liiklus: ";else if ($rida[tyyp]==2) $tyyp="Politsei: ";else if ($rida[tyyp]==3) $tyyp="Auto: ";else if ($rida[tyyp]==4) $tyyp="Ralli: ";else if ($rida[tyyp]==5) $tyyp="Muu: ";else $tyyp="";
echo '<title>'.$tyyp.$rida[pealkiri].'</title>';echo '<link>http://www.liiklus.net/uudised.php?id='.$rida[id].'</link>';echo '<guid
isPermaLink="true">http://www.liiklus.net/uudised.php?id='.$rida[id].'</guid>';//echo '<dc:description>'.$rida[intro].'<a
href="http://www.liiklus.net/uudised.php?id='.$rida[id].'>Loe edasi..</a></dc:description>';
echo '</item>';}
echo '</channel>';echo '</rss>';?>
36
16.13.Fail: stiil.css<?php include "header.php";
/*Esialgu teen nii, et uudised.php kuvamisel ilma parameetriteta kuvatakse 5 uudist sissejuhatusega ja veel 10 pealkirja. Kui lehega on kaasas atribuut 'kategooria', siis kuvatakse vastava kategooria uudised lehekülgedena (30tk lehel, eristamiseks atribuut 'leht'). Lisaks veel 'id' kui tahetakse vaadata mõnda uudist üksikult. Kui 'id' ja muu atribuut on korraga antud, kuvatakse veateade.*/
define ("U_INTRO", 5); //Mitu uudist introga esilehel?define ("U_PEALKIRI", 10); //Mitu uudist pealkirjana esilehel?define ("U_LEHEL", 3); //Mitu uudist kategoorialeheküljel? (Default: 30)define ("U_RIDA", 20); //Mitme lehekülje järel murda sisukorrarida?
mysql_connect ("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db ("liiklusn_liiklus");
/* KUI ON LIIGA PALJU ATRIBUUTE */
if(isset($_REQUEST[id]) && (isset($_REQUEST[kategooria]) || isset($_REQUEST[leht]))){echo "VIGA! Liiga palju atribuute!";
/* KUI ON ANTUD ID */
}else if(isset($_REQUEST[id])){$lause = "SELECT *, UNIX_TIMESTAMP(kuupaev) AS aeg FROM uudised WHERE id=$_REQUEST[id]";$vastus=mysql_query($lause);
while($rida=mysql_fetch_array($vastus)){echo '<table border=0 width=500 align=center><tr><td>';echo '<div align=right class="pisidate">'.strftime('%d.%m.%Y %H:%M',
$rida[aeg]).'</div></td></tr>';echo '<tr><td>';echo '<table class=raamiga border=0 cellspacing=3 width=498 cellpadding=1
align=center><tr>';echo '<th class="pealkiri" align=left><h2>'.$rida[pealkiri].'</h2></th></tr>';echo '<tr><td>';
if ($rida[pildiurl] != ''){if ($rida[suurepildiurl] != ''){
echo '<a href="'.$rida[suurepildiurl].'" target=_blank><img src="'.$rida[pildiurl].'" align="right" alt="'.$rida[pealkiri].'"></a>';
}else{echo '<img src="'.$rida[pildiurl].'" align="right"
alt="'.$rida[pealkiri].'">';}
}echo '<p><b>'.$rida[intro].'</b></p><p>';echo $rida[tekst].'</p>';
if ($rida[allikas] != ''){echo '<div align="right">';
if($rida[allika_url] != ''){echo '<a href="'.$rida[allika_url].'">'.$rida[allikas].'</a>';if ($rida[allika_pilt] != ''){
echo '<img src="'.$rida[allika_pilt].'" align="right" alt="'.$rida[allikas].'"></a>';
}}else{
echo $rida[allikas];}
echo '</div>';}echo "<p><a href='javascript:history.go(-1)'>Tagasi</A>";echo '</td></tr></table>';echo '</td></tr></table><br>';
}
/* KUI ON ANTUD KATEGOORIA */
37
}else if(isset($_REQUEST[kategooria])){$lause = "SELECT COUNT(*) AS kogus FROM uudised WHERE tyyp=$_REQUEST[kategooria]";$vastus=mysql_query($lause);$rida=mysql_fetch_array($vastus);$lehti=ceil($rida[kogus]/ U_LEHEL);
echo '<h1>';switch($_REQUEST[kategooria]){
case 1: $tiitel='Liiklusuudised</h1>';break;
case 2:$tiitel='Politseiuudised</h1>';break;
case 3:$tiitel='Autouudised</h1>';break;
case 4:$tiitel='Autospordiuudised</h1>';break;
case 5:$tiitel='Muud uudised</h1>';break;
default:print "</h1>VIGA: Uudiste kategooria on vale või pole määratud!";
}
echo $tiitel;
echo 'Valitud kategoorias ('.$_REQUEST[kategooria].') on '.$rida[kogus].' uudist '.$lehti.' lehel.<br>';
if (isset($_REQUEST[leht])){$leht = $_REQUEST[leht];
}else{$leht=1;
}
if ($lehti > 1){for ($i=1; $i <= $lehti; $i++){
if ($i==$leht){echo $i;
}else{echo '<a
href="uudised.php?kategooria='.$_REQUEST[kategooria].'&leht='.$i.'">'.$i.'</a>';}if ($i>0 && $i<$lehti) echo " | ";if ($i/U_RIDA==int) echo "<br>";
}}
echo "<br>";
$naita_alates=($leht-1)*U_LEHEL;$limiit=U_LEHEL;
$lause = "SELECT *, UNIX_TIMESTAMP(kuupaev) AS aeg FROM uudised WHERE tyyp=$_REQUEST[kategooria] ORDER BY kuupaev DESC LIMIT $naita_alates, $limiit";
$vastus=mysql_query($lause);while($rida=mysql_fetch_array($vastus)){
//echo '<br>['.date("d-m-Y", $rida[kuupaev]).'] '.$rida[pealkiri].'';echo
'<br>['.substr($rida[kuupaev],8,2).'-'.substr($rida[kuupaev],5,2).'-'.substr($rida[kuupaev],0,4).'] '.'<a href="uudised.php?id='.$rida[id].'">'.$rida[pealkiri].'</a>';
}
/* KUI LEHELE TULLAKSE ILMA ATRIBUUTIDETA */
}else if(!isset($_REQUEST[id]) || !isset($_REQUEST[kategooria])){$limiit=U_INTRO+U_PEALKIRI;$loendur=0;
$lause = "SELECT *, UNIX_TIMESTAMP(kuupaev) AS aeg FROM uudised ORDER BY kuupaev DESC LIMIT $limiit";
38
echo '<table border=0 width=500 align=center><tr><td>';
$vastus=mysql_query($lause);while($rida=mysql_fetch_array($vastus)){
$loendur++;if($loendur<=5){
echo '<div align=right class="pisidate">'.strftime('%d.%m.%Y %H:%M', $rida[aeg]).'</div></td></tr>';
echo '<tr><td>';echo '<table class=raamiga border=0 cellspacing=3 width=498 cellpadding=1
align=center><tr>';echo '<th class="pealkiri"
align=left><h2>'.$rida[pealkiri].'</h2></th></tr>';echo '<tr><td>';
if ($rida[pildiurl] != ''){if ($rida[suurepildiurl] != ''){
echo '<a href="'.$rida[suurepildiurl].'" target=_blank><img src="'.$rida[pildiurl].'" align="right" alt="'.$rida[pealkiri].'" border=1></a>';
}else{echo '<img src="'.$rida[pildiurl].'" align="right"
alt="'.$rida[pealkiri].'">';}
}echo '<p>'.$rida[intro].'</p>';
echo '<p><a href="uudised.php?id='.$rida[id].'">Loe edasi</a></p>';echo '</td></tr></table>';
}else{echo '<br><a href="uudised.php?id='.$rida[id].'">'.$rida[pealkiri].'</a>';
}}
echo '</td></tr></table>';}
mysql_close();
include "footer.php";?>
16.14.Fail: wap.php<?php include ("header.php");
echo '<h1>WAP</h1>
Liiklus.net WAP-keskkond on mobiiltelefoni kaudu saadaval aadressil <br><a href="http://wap.liiklus.net">wap.liiklus.net</a>
<br><br>WAPis nähtav Maanteeameti teedeinfo, autode must nimekiri ning uudised.';
include ("footer.php");?>
16.15.Fail: varastatud.php<?php include ("header.php");
echo '<h1>Tagaotsitavad sõidukid</h1>';
if(!isset($_REQUEST[paring]) && (!isset($_REQUEST[oigusorg])) && (!isset($_REQUEST[page]))){echo '
<!--form name="bycarform" action="http://www.pol.ee/webinfo/bytr_search.php" method="post"--><form name="bycarform" action="'.$PHP_SELF.'" method="post"><table border="0" cellspacing="2" cellpadding="2"><tr> <td colspan=2>Reg. nr.:</td>
39
<td><input type="text" name="regmark" maxlength="8"></td></tr><tr> <td colspan=2>Sõiduki mark:</td> <td><input type="text" name="mark" maxlength="15"></td></tr><tr> <td colspan=2>Mudel ja modifikatsioon:</td> <td><input type="text" name="mudel" maxlength="20"></td></tr><tr> <td>Kere nr.:
<td><INPUT type="radio" name="kn_select_type" value="0" checked>sisaldab</td> <td rowspan=2><input type="text" name="kerenr" size="20" maxlength="20"><br></td></tr><tr><td> </td><td><INPUT type="radio" name="kn_select_type" value="1">algab</td><td> </td></tr><tr> <td colspan=2>Sõiduki liik:</td>
<td> <select name="liik"> <OPTION value="" selected>(kõik)</option><option value="2">buss</option><option value="30">ekskavaator</option><option value="3">haagis</option><option value="4">hobuveok</option><option value="15">jaht</option><option value="5">jalgratas</option>
<option value="27">jet</option><option value="20">kaater</option><option value="26">kaubik</option><option value="29">kraana</option><!--option value="19">kummipaat</option--><!--option value="12">laev</option--><!--option value="13">lennuk</option--><option value="8">madelauto, veoauto</option><option value="33">mahtuniversaal</option>
<option value="28">metsaveok</option><option value="24">mootorpaat</option><option value="6">mootorratas</option><option value="11">mopeed</option><option value="17">muu sõiduk</option><option value="25">omaehitatud sõiduk</option><option value="14">paat</option><option value="22">roller</option><!--option value="16">rong</option-->
<option value="32">sadulveok</option><option value="31">sihtotstarbeline</option><option value="21">skuuter</option><option value="1">sõiduauto</option><option value="7">traktor</option><!--option value="9">tramm</option--><option value="23">treiler</option><!--option value="10">troll</option--><option value="18">tundmatu sõiduk</option>
</select></td></tr><tr> <td colspan=2>Värvus:</td> <td> <select name="varv"> <option value="" selected>(kõik)</option><option value="28">beez</option><option value="11">hall</option><option value="13">hallikasroheline</option>
<option value="21">helebeez</option><option value="10">helehall</option><option value="50">helekollane</option>
40
<option value="84">helelilla</option><option value="46">heleoranž</option><option value="20">helepruun</option><option value="30">helepunane</option><option value="60">heleroheline</option><option value="70">helesinine</option>
<option value="91">hõbedane</option><option value="55">kollane</option><option value="95">kuldne</option><option value="83">lilla</option><option value="99">must</option><option value="56">ooker</option><option value="44">oranz</option><option value="22">pruun</option><option value="40">punakasoranž</option>
<option value="31">punakaspruun</option><option value="33">punane</option><option value="67">rohekaskollane</option><option value="66">roheline</option><option value="93">roosa</option><option value="12">sinakashall</option><option value="78">sinakasroheline</option><option value="77">sinine</option><option value="200">teadmata</option>
<option value="19">tumehall</option><option value="59">tumekollane</option><option value="29">tumepruun</option><option value="39">tumepunane</option><option value="69">tumeroheline</option><option value="79">tumesinine</option><option value="0">valge</option><option value="85">violett</option></select></td>
</tr><tr> <td colspan=2> </td> <td><input type="hidden" name="paring" value="1"></td></tr><tr> <td> </td> <td><input type="submit" name="enter" value="Saada päring" style="nupp"></td>
<td><input type="reset" name="clear" value="Puhasta" style="nupp"></td></tr></table></form>
<script language="JavaScript" type="text/javascript"> document.bycarform.regmark.focus();</script>';
}else if((isset($_REQUEST[paring])) || (isset($_REQUEST[page]))){$sisu =
fopen('http://www.pol.ee/webinfo/bytr_search.php?regmark='.$_REQUEST[regmark].'&mark='.$_REQUEST[mark].'&mudel='.$_REQUEST[mudel].'&kn_select_type='.$_REQUEST[kn_select_type].'&kerenr='.$_REQUEST[kerenr].'&liik='.$_REQUEST[liik].'&varv='.$_REQUEST[varv].'&sortname='.$_REQUEST[sortname].'&sort_direct='.$_REQUEST[sort_direct].'&page='.$_REQUEST[page].'', "r");
echo 'http://www.pol.ee/webinfo/bytr_search.php?regmark='.$_REQUEST[regmark].'&mark='.$_REQUEST[mark].'&mudel='.$_REQUEST[mudel].'&kn_select_type='.$_REQUEST[kn_select_type].'&kerenr='.$_REQUEST[kerenr].'&liik='.$_REQUEST[liik].'&varv='.$_REQUEST[varv].'&sortname='.$_REQUEST[sortname].'&sort_direct='.$_REQUEST[sort_direct].'&page='.$_REQUEST[page].'';
$asjad = '';while (!feof($sisu)){
$tykid .= fread($sisu, 8192);}fclose($sisu);
$tykid=str_replace("Images","http://www.pol.ee/webinfo/Images",$tykid);$tykid=str_replace("<img
src=\"http://www.pol.ee/webinfo/Images/footer1.gif\">"," ",$tykid);$tykid=str_replace("kontakt.php","varastatud.php",$tykid);
41
$tykid=str_replace("<table>", "<table width=600>",$tykid);$tykid=str_replace("<br>Tagaotsitavad sõidukid<p>"," ",$tykid);$tykid=str_replace("meile abi olla palume teatada tagaotsivale asutusele.",
"sõiduki tabamisel abi olla, palume teatada Politseiameti tagaotsivale asutusele.",$tykid);
echo (strip_tags($tykid, "<p><b><i><u><a><br><table><tr><td><img>"));
echo '<br><br><a href="varastatud.php">Tagasi</a>';
}else if (isset($_REQUEST[oigusorg])){$sisu = fopen("http://www.pol.ee/webinfo/kontakt.php?oigusorg=$_REQUEST[oigusorg]",
"r");
$asjad = '';while (!feof($sisu)){
$tykid .= fread($sisu, 8192);}fclose($sisu);
$tykid=str_replace("Kontaktandmed","<B>Kontaktandmed</B>",$tykid);$tykid=str_replace("Images","http://www.pol.ee/webinfo/Images",$tykid);$tykid=str_replace("<img
src=\"http://www.pol.ee/webinfo/Images/footer1.gif\">","",$tykid);$tykid=str_replace("Tagasi...","Tagasi",$tykid);
echo (strip_tags($tykid, "<p><b><i><u><a><br><table><tr><td><img>"));}
include ("footer.php");?>
16.16.Fail: vorm.php
<?php
include ("header.php");
$ip=$_SERVER["REMOTE_ADDR"];
$aasta=date("Y");$kuu=date("m");$paev=date("j");$tund=date("H");$minut=date("i");
$kuud = array( "01" => "jaanuar", "02" => "veebruar", "03" => "märts", "04" => "aprill", "05" => "mai", "06" => "juuni", "07" => "juuli", "08" => "august", "09" => "september", "10" => "oktoober", "11" => "november", "12" => "detsember");
echo "<h1>Sündmuse lisamine</h1><form action='lisamine.php' method='post' enctype='multipart/form-data'><table border=0><tr><td colspan=2><b>Auto</b></td></tr>
<tr><td valign=top>Reg. nr.:</td><td><input type='text' name='regnr' maxlength='9'/><BR>
<font size=1><i>Näide: 123ABC, andmbebaasis ainult Eesti registreerimismärgid.<br>Ära kasuta tühikut, kirjuta suurte tähtedega!</i></font>
</tr>
<tr><td>Mark:</td><td><input type='text' name='mark' /></tr>
<tr><td>Mudel:</td><td><input type='text' name='mudel' maxlength='30'/>
42
</tr>
<tr><td>Värv:</td><td><input type='text' name='varv' maxlength='30'/></tr>
<tr><td colspan=2> </td></tr>
<tr><td colspan=2><b>Aeg & koht</b><br><font size=1><i>Ole võimalikult täpne!</i></font></td></tr>
<tr><td>Aeg:</td><td><SELECT name='sel_paev'>";
foreach (range (1, 31) as $paevanr) {echo "<option";if ($paev == $paevanr) echo " selected='selected'";echo " >$paevanr</OPTION>\n";}echo "</select>";
echo "<select name='sel_kuu'>";
// Nii see jama siin valib nimekirjast õige kuu!
foreach ($kuud as $nr => $kuunimi ) {echo "<option";if ($kuu == $nr) echo " selected='selected'";echo " value='$nr'>$kuunimi</OPTION>\n";}echo "</select>\n";
echo"<select name='sel_aasta'>";
foreach (range (2004, $aasta) as $aastanr) {echo "<option";if ($aasta == $aastanr) echo " selected='selected'";echo ">$aastanr</OPTION>\n";}echo "</select>";
echo " <input name='sel_tund' type='text' value='$tund' size='1' maxlength='2'>:<input name='sel_minut' type='text' value='$minut' size='1' maxlength='2'></td></tr>
<tr><td>Koht:</td><td><input type='text' name='koht' maxlength='50' /></td></tr>
<tr><td colspan=2> </td></tr>
<tr><td colspan=2><b>Lisaja</b></td></tr>
<tr><td>Nimi:</td><td><input type='text' name='nimi' maxlength='50' /> </td></tr>
<tr><td>Email:</td><td><input type='text' name='email' maxlength='50' /> </td></tr>
<tr><td>IP:</td><td><input type='hidden' name='ip' value='$ip'>$ip</td>
43
</tr>
<tr><td colspan=2> </td></tr>
<tr><td colspan=2><b>Kommentaar</b></td></tr>
<tr><td valign='top'>Sündmus:</td><td><textarea name='text' cols='25' rows='5'></textarea></td></tr>
<tr><td>Tüüp:</td><td><select name='tyyp'><option value='1'>Positiivne</option><option value='2' selected='selected'>Neutraalne</option><option value='3'>Negatiivne</option></select></td></tr>
<tr><td colspan=2> </td></tr>
<tr><td colspan=2><b>Pilt</b></td></tr>
<tr><td>Pildi URL:</td><td><input type='text' name='pildiurl' maxlength='256' value='http://' /></td></tr>
<tr><td><b><i>või</i></b></td><td> </td></tr>
<tr><td valign=top>Pilt arvutist:</td><td><input type='file' name='pildifail' value='' /><br>
<font size=1><i>Pilt taandatakse serveris suurusele 480x320 pikslit. <br>Maksimaalne laaditava faili suurus 8MB.<br>Suurte piltide laadimine võib aega võtta.</i></font></td></tr>
<tr><td> </td><td> </td></tr>
<tr><td valign='top'> </td><td><input type='submit' value='Saada'> <input value='Katkesta' type='reset' onClick='history.go(-1)'></td></tr></table></form>";
include ("footer.php");?>
16.17.Fail: wap / index.wml
<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
44
<card title="wap.liiklus.net">
<p align="center"> <img src="logo.gif" alt="Liiklus.net"/><br/> <a href="w_info.php">Teedeinfo</a><br/> <a href="w_uudis.php">Uudised</a><br/> <a href="w_auto.php">Autod</a><br/> <a href="w_lisa.php">Lisa auto</a><br/> </p>
</card></wml>
16.18.Fail: wap / w_auto.php
<?phpheader("Content-type: text/vnd.wap.wml");echo '<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml>
<card id="auto1" title="Päring"><p><a href="index.wml">Tagasi</a></p>
<p>Regnr: <input name="auto" size="15"/></p><p><small>Vähemalt 3 tähemärki</small></p><p><select name="db">
<option value="1">Liiklus.net</option><option value="2">Varastatud</option>
</select></p><anchor title="Saada">Saada<go href="w_auto2.php" method="post">
<postfield name="regnr" value="$(auto)"/><postfield name="db" value="$(db)"/>
</go></anchor><!--do type="accept" label="Saada">
<go href="w_auto2.php" method="post"><postfield name="regnr" value="$(auto)"/>
</go></do-->
</card></wml>';?>
16.19.Fail: wap / w_auto2.php
<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"> <wml><card title="Vastus">';
if(isset($_REQUEST[regnr]) && eregi("^[a-zA-Z0-9]{3,}$", $_REQUEST[regnr])){$korras = true;
}else if((!isset($_REQUEST[regnr])) || (!eregi("^[a-zA-Z0-9]{2,8}$", $_REQUEST[regnr]))){echo '<p>Sisestatud number on vigane või puudub!</p>';$korras = false;
}
if($_REQUEST[db] == 1 && $korras){
echo '<p>Päringu "'.$_REQUEST[regnr].'" tulemus:</p>';
mysql_connect("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db("liiklusn_liiklus");
$lause="SELECT regnr FROM auto WHERE regnr LIKE '%$_REQUEST[regnr]%' GROUP BY regnr";
45
$vastus=mysql_query($lause);
while($rida=mysql_fetch_array($vastus)){echo '<p><a href="w_auto3.wml?regnr='.$rida[regnr].'">'.$rida[regnr].'</a></p>';
}
} else if ($_REQUEST[db] == 2 && $korras){$sisu = fopen('http://www.pol.ee/webinfo/bytr_search.php?regmark='.$_REQUEST[regnr],
"r");
$asjad = '';while (!feof($sisu)){
$tykid .= fread($sisu, 8192);}fclose($sisu);
$tykid=strip_tags($tykid, "<td>");$tykid=split("<td", $tykid);
$kuni = count($tykid);
echo '<p>';
for($i=9; $i<$kuni; $i++){$tykid[$i] = str_replace ("nowrap", "", $tykid[$i]);$tykid[$i] = str_replace ("</td>", "", $tykid[$i]);$tykid[$i] = str_replace (">", "", $tykid[$i]);
echo $tykid[$i].'<br/>';
if ($i/8 == (int)($i/8)){echo '</p><p>';
}}echo '</p>';
} else {echo "<p>VIGA: Liiga vähe parameetreid!</p>";
}
echo '<p><a href="index.wml">Tagasi</a></p></card></wml>';?>
16.20.Fail: wap / w_info.php
<?phpheader("Content-type: text/vnd.wap.wml");echo '<?xml version="1.0" encoding="windows-1252"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card title="Teedeinfo"><p><a href="index.wml">Tagasi</a></p>
<p>';
$body = fopen("http://amet.mnt.ee/maanteeinfo/soidutingimused/op_info/tekst.htm", "r");$asjad = '';while (!feof($body)){
$asjad .= fread($body, 8192);}fclose($body);
$asjad = strip_tags($asjad, "<b><i><u><br>");$asjad = str_replace("<br>", "<br />", $asjad);echo $asjad;
echo '</p><p><a href="index.wml">Tagasi</a></p></card></wml>';
46
16.21.Fail: wap / w_lisa.php
<?phpheader("Content-type: text/vnd.wap.wml");echo '<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml>
<card id="lisa1" title="Lisa kirje">
<small><p>Tärniga väljad on kohustuslikud!</p><p>Regnr*: <input name="regnr" size="15"/></p><p>Mark: <input name="mark" size="15"/></p><p>Mudel: <input name="mudel" size="15"/></p><p>Värvus: <input name="varv" size="15"/></p><p>Aeg*: <input name="kuupaev" size="15" value="'.date("j.m.Y H:m").'"/></p><p>Koht*: <input name="koht" size="15"/></p><p>Sündmus*: <input name="syndmus" size="15"/></p><p><select name="kommentaar">
<option value="2" checked="checked">Neutraalne</option><option value="1">Positiivne</option><option value="3">Negatiivne</option></select>
</p><p>Lisaja: <input name="nimi" size="15"/></p></small>
<anchor title="Saada">Saada<go href="w_lisa2.php" method="post"><postfield name="regnr" value="$(regnr)"/><postfield name="mark" value="$(auto)"/><postfield name="mudel" value="$(mudel)"/><postfield name="varv" value="$(varv)"/><postfield name="kuupaev" value="$(kuupaev)"/><postfield name="koht" value="$(koht)"/><postfield name="syndmus" value="$(syndmus)"/><postfield name="kommentaar" value="$(kommentaar)"/><postfield name="nimi" value="$(nimi)"/>
</go></anchor>
<p><a href="index.wml">Tagasi</a></p>
</card></wml>';?>
16.22.Fail: wap / w_lisa2.php
<?phpheader("Content-type: text/vnd.wap.wml");echo '<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml>
<card id="lisa2" title="Kirje lisamine">';
define (POSTSEK, 20);
mysql_connect("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db("liiklusn_liiklus");
/* VIIMASEST LISATUD KIRJEST LIIGA VÄHE AEGA MÖÖDAS */
$lause="SELECT id FROM auto WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(postaeg) < ".POSTSEK;$vastus=mysql_query($lause);$ridu=mysql_num_rows($vastus);
47
if ($ridu > 0 && $_REQUEST[ip] == $_SERVER["REMOTE_ADDR"]){echo '<b><font color="red">VIGA: Eelmisest sisestatud kirjest on möödas alla '.POSTSEK.'
sekundi.<br><br>';if(!$viga) $viga=TRUE;
/* REGISTREERIMISNUMBER JA/VÕI SÜNDMUSE KIRJELDUS PUUDU */
}if ($regnr == '' || $_REQUEST[text] == '' || $_REQUEST[koht] == ''){$korras = FALSE;echo '<b><font color="red">VIGA: Registreerimisnumber, koht ja/või sündmuse kirjeldus
puudub!<br><br>';if(!$viga) $viga=TRUE;
/* REGISTREERIMISNUMBER EI VASTA NÕUETELE */
}if (!eregi("^[a-zA-Z0-9]{2,9}$", $regnr) && $regnr!=''){echo '<b><font color="red">VIGA: Registreerimisnumber "'.$regnr.'" ei vasta
nõuetele!<br><br>';if(!$viga) $viga=TRUE;
/* TULEVIKKU JÄÄV KIRJE */
}if ($sel_aeg > date("Y-m-d H:i:s")){echo '<b><font color="red">VIGA: Kuna veel pole avastatud piisavalt usaldusväärset
tuleviku ennustamise meetodit, siis tulevikku jäävaid kirjeid lisada ei saa!<br><br>';if(!$viga) $viga=TRUE;
/* KÕIK KORRAS! */
}if (!$viga){$korras = TRUE;
$lause="SELECT * FROM auto WHERE ip=$ip AND kuupaev=";
if(!isset($pildiaadress)) $pildiaadress = $_REQUEST[pildiurl];
$lause="INSERT INTO auto (regnr, mark, mudel, varv, aeg, koht, nimi, email, postaeg, IP, text, tyyp, picurl) VALUES ('$regnr', '$_REQUEST[mark]', '$_REQUEST[mudel]', '$_REQUEST[varv]', '$sel_aeg', '$_REQUEST[koht]', '$_REQUEST[nimi]', '$_REQUEST[email]', '$kell', '$_REQUEST[ip]', '$_REQUEST[text]', '$_REQUEST[tyyp]', '$pildiaadress')"; mysql_query($lause);
echo mysql_error(); // teade vea puhul$idnumber=mysql_insert_id(); echo "<B>Teie sissekanne on edukalt salvestatud.</B><P><table border=0 cellspacing=3 cellpadding=1><tr><td>Reg.
nr.:</td><td>$_REQUEST[regnr]</td></tr><tr><td>Mark:</td><td>$_REQUEST[mark]</td></tr><tr><td>Mudel:</td><td>$_REQUEST[mudel]</td></tr><tr><td>Värv:</td><td>$_REQUEST[varv]</td></tr><tr><td>Aeg:</td><td>$sel_aeg</td></tr><tr><td>Koht:</td><td>$_REQUEST[koht]</td></tr><tr><td>Nimi:</td><td>$_REQUEST[nimi]</td></tr><tr><td>Email:</td><td><a href='mailto:$email'>$email</a></td></tr><tr><td>Postaeg:</td><td>$kell</td></tr><tr><td>IP:</td><td>$_REQUEST[ip]</td></tr><tr><td>Tekst:</td><td>$_REQUEST[text]</td></tr><tr><td>Tüüp:</td><td>$_REQUEST[tyyp]</td></tr><tr><td valign='top'>Pilt:</td><td><a href='$pildiaadress'>$pildiaadress</a><br><br><img
src='$pildiaadress' alt='$failinimi'></td></tr></table>";
mysql_close();}
<p><a href="index.wml">Tagasi</a></p>
</card></wml>';?>
48
16.23.Fail: wap / w_uudis.php
<?phpheader("Content-type: text/vnd.wap.wml");echo '<?xml version="1.0" encoding="windows-1252"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card id="uudis-1" title="Uudised">';
define ("U_LEHEL", 10); //Mitu uudist kategoorialeheküljel? (WAP default: 10)
if(isset($_REQUEST[leht])){$leht = $_REQUEST[leht];
}else{$leht = 0;
}
mysql_connect ("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db ("liiklusn_liiklus");
$lause = "SELECT COUNT(*) AS kogus FROM uudised";$vastus=mysql_query($lause);$rida=mysql_fetch_array($vastus);$lehti=ceil($rida[kogus]/ U_LEHEL);
$limiit=U_LEHEL;$alates=U_LEHEL*$leht;
$lause = "SELECT *, UNIX_TIMESTAMP(kuupaev) AS aeg FROM uudised ORDER BY kuupaev DESC LIMIT $alates, $limiit";
$vastus=mysql_query($lause);while($rida=mysql_fetch_array($vastus)){
echo '<p><a href="w_uudis2.php?id='.$rida[id].'">'.$rida[pealkiri].'</a> ('.substr($rida[kuupaev],8,2).'.'.substr($rida[kuupaev],5,2).'.'.substr($rida[kuupaev],0,4).')<br /></p>';
}
$leht_parem = $leht+1;
if ($leht+1 > 1) {$leht_vasak = $leht-1;echo '<p><a href="w_uudis.php?leht='.$leht_vasak.'"><<Uuemad</a></p>'; }
if ($lehti > $leht+1) echo '<p><a href="w_uudis.php?leht='.$leht_parem.'">Vanemad>></a></p>';
echo '<p><a href="index.wml">Esilehele</a></p>
</card></wml>';
mysql_close();
?>
16.24.Fail: wap / w_uudis2.php
<?phpheader("Content-type: text/vnd.wap.wml");echo '<?xml version="1.0" encoding="windows-1252"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">
49
<wml><card id="uudis-2" title="Uudised">';
mysql_connect ("localhost", "liiklusn_liiklus", "liiklus");mysql_select_db ("liiklusn_liiklus");
$lause = "SELECT *, UNIX_TIMESTAMP(kuupaev) AS aeg FROM uudised WHERE id=$_REQUEST[id]";$vastus=mysql_query($lause);
while($rida=mysql_fetch_array($vastus)){
echo '<p>'.$rida[pealkiri].'</p>';echo '<p>'.strftime('%d.%m.%Y %H:%M', $rida[aeg]).'</p>';echo '<p> </p>';echo '<p>'.$rida[intro].'</p>';echo '<p>'.$rida[tekst].'</p>';
if ($rida[allikas] != ''){echo '<p>Allikas: '.$rida[allikas].'</p>';
}
}
echo '<p><a href="index.wml">Tagasi</a></p></card></wml>';
mysql_close();
?>
50