Seotud tabelite andmed veebilehel

Siin näites püüame samuti hoida kujunduse ja koodi võimalikult lahus. Koodiosa paigutame faili nimega 

abifunktsioonid.php 

Eraldi seletust vajab ehk andmete väljastus funktsioonist. Varasemas näites tagastati funktsioonist vaid teate sisu – selleks piisas return-käsust. Siin tuleb aga iga kauba kohta neli väärtust: id, nimetus, grupinimi ja hind. Lisaks püüame funktsioonist korraga kätte saada kõikide kaupade andmed, et neid siis veebilehel mugavasti sobival kujul kuvada saaks.  

Mitme samatüübilise väärtuse hoidmiseks aitab massiiv – nii ka siin. Enne andmete läbikäimise tsüklit tehakse uus massiiv nimega $hoidla.

 $hoidla=array(); 

Kauba andmete ühe kesta sisse kokku panekuks sobib stdClass-tüüpi objekt. Selle saab new-käsuga luua ning hiljem sinna ükshaaval omadusi külge panna. Olemasolevatest muutujatest võtame andmed ning paneme need kaubaisendi väljadeks. Tekstilisi andmeid töötleme käsuga htmlspecialchars, et teksti sees olevad erisümbolid ei pääseks veebilehe sisu segama.

[crayon-68109fbf78f5c413479679/]

Iga kauba puhul kui selle andmed käes, lisatakse kaubaobjekt massiivi lõppu.

[crayon-68109fbf78f61079927000/]

Funktsioonist väljudes tagastatakse hoidla koos kaupade andmetega.

[crayon-68109fbf78f63582450057/]

Funktsiooni töö kontrollimiseks on algul hea ta käivitada. Selleks abifunktsioonide faili lõpus vastav lõik. Märgend <pre> määrab, et veebilehel väljastades oleksid kõik tähed (ka tühikud) kindla laiusega (preformatted text). Käsklus print_r (rekursiivne print) trükib etteantud objekti või massiivi andmed sügavuti välja, ehk siis näitab kõik, mis sealt seest saada on. 

[crayon-68109fbf78f65204733205/]

Nüüd siis abifunktsioonid.php tervikuna.

[crayon-68109fbf78f67503083881/]

Faili väljund parasjagu baasis olevate andmete põhjal. Käsu print_r tulemus näitab, et väljatrükitud objekt oli massiiv, millel indeksid 0, 1 ja 2. Ning mille igaks elemendiks on objekt klassist stdClass väljadega id, nimetus, grupinimi ja hind parasjagu sissepandud väärtustega.

[crayon-68109fbf78f69284273248/]

Kui funktsiooni töö kontrollitud ja õigeks loetud, siis on hea pre-ga tähistatud osa abifunktsioonide failist välja võtta, et see muude failide poolt välja kutsudes segama ei hakkaks.  

Järgnevalt kasutame failis kaubaotsing.php loodud abifunktsiooni teenuseid ning näitame tabelis olevad kaubad ekraanile. Kõigepealt tuleb kasutamiseks lugeda require-käsuga abifunktsioonid käivituvasse faili (kaubaotsing.php) sisse. Ning et kaubad oleksid meil lehe väljatrüki juures pidevalt käepärast, selleks küsime funktsiooni poolt väljastatud andmekogumi muutujasse nimega $kaubad.

[crayon-68109fbf78f6b695998249/]

Hiljem andmeid välja trükkides saab siis kaupade massiivi elemendid ükshaaval ette võtta ning iga kauba andmed sobivasse lahtrisse paigutada. Kuna eelnevas funktsioonis on juba kauba nimetusele ja grupinimele pandud ümber htmlspecialchars’i tehtud muudatused, siis võib need väärtused siin rahus otse välja trükkida.

[crayon-68109fbf78f6d195691154/]

Ning kaubaotsingu fail tervikuna

[crayon-68109fbf78f6e060172441/]

Ja tema töö tulemus arvutiekraanil.

Abifunktsioone on täiendamise korral vaja sageli testida. Pidevalt pre-osa sisse ja välja tõsta on tülikas. Selle asemel võib tingimuslausega kontrollida, et kas abifunktsioonid.php käivitatakse iseseisvalt või mõne teise faili kaudu. Esimesel juhul näidatakse testandmed ekraanile, muidu mitte. Tegeliku veebilehitseja aadressirealt käivitatava faili nime leiab muutujast $_SERVER[“PHP_SELF”] -koos kogu pika URLiga. Järgnevas käsus tükeldatakse see URL explode abil kaldkriipsu kohtadelt massiivielementideks ning array_pop käsu abil võetakse viimane element ehk failinimi ise. Tingimusega kontrollitakse, et kui aadressirealt käivitatava faili nimi on abifunktsioonid.php, siis pannakse pre-märgendi sees olev testosa käima, muidu mitte.

[crayon-68109fbf78f73530769976/]

Nõnda siis abifunktsioonid.php uuel kujul, kus faili lõpus testosa käivitatakse ainult faili otse veebilehitsejas vaadates. Teise faili kaudu funktsioon sisse lugedes aga muud lehte segavat lõiku ei teki.

[crayon-68109fbf78f76104238050/]