{"id":262,"date":"2023-03-24T21:14:36","date_gmt":"2023-03-24T21:14:36","guid":{"rendered":"https:\/\/tarkvara.thkit.ee\/veeb\/?page_id=262"},"modified":"2023-03-24T21:19:42","modified_gmt":"2023-03-24T21:19:42","slug":"sortimine","status":"publish","type":"page","link":"https:\/\/tarkvara.thkit.ee\/veeb\/sortimine\/","title":{"rendered":"Sortimine"},"content":{"rendered":"\n<p>Suuremast andmehulgast sobiva leidmisel aitab sageli andmete sortimine soovitud tunnuse j\u00e4rgi. Telefoniraamatust n\u00e4iteks nime j\u00e4rgi numbri leidmine on suhteliselt lihtne toimetus. Numbri j\u00e4rgi kindlaks tegemine, et kellele see kuulub, n\u00f5uab aga palju rohkem vaeva. K\u00f5ik lihtsalt sellep\u00e4rast, et telefoniraamat on sorditud nimede j\u00e4rgi.&nbsp;&nbsp;<\/p>\n\n\n\n<p>J\u00e4rgnevas n\u00e4ites t\u00e4iendame kaupade loetelu otsinguv\u00f5imalusega. Andmebaasip\u00f5hises lehestikus \u00fche tulba j\u00e4rgi sortida on lihtne &#8211; tuleb vaid SELECT-lause l\u00f5ppu kirjutada ORDER BY tulbanimi ning andmed saabuvadki sobivas j\u00e4rjestuses. Siin aga pakume kasutajale v\u00f5imalust sortida andmed nimetuse, grupinime v\u00f5i hinna j\u00e4rgi &#8211; vajutades vastava tulba pealkirjale. Sellisel juhul tuleb vastavalt kasutaja valikule saada SQL-lausesse sobiva tulba nimi.&nbsp;<\/p>\n\n\n\n<p>Koodi t\u00e4iendades on mugav, kui \u00f5nnestub teha nii, et olemasolevad funktsioonid ka vanades kasutuskohtades t\u00f6\u00f6le j\u00e4\u00e4vad. Vanas variandis ei andnud me funktsioonile kysiKaupadeAndmed ette midagi &#8211; v\u00e4ljastati lihtsalt baasis leiduvad kaubad. N\u00fc\u00fcd aga soovime, et funktsioon v\u00e4ljastaks kaubad sordituna etteantud tulba j\u00e4rgi. Funktsioonile saab andmeid ette anda parameetrite kaudu. Kui lihtsalt lisada funktsioonile kohustuslik parameeter sortimistulba m\u00e4\u00e4ramiseks, siis ilma selle parameetrita ei saaks funktsiooni enam v\u00e4lja kutsuda. Siin n\u00e4ites pole sellest suurt muret, sest t\u00e4iendus tuleks viia sisse vaid \u00fchte kohta &#8211; sinna kus kaubaotsing.php failis andmeid teise faili j\u00e4rgi k\u00fcsitakse. M\u00f5nes suuremas rakenduses v\u00f5idakse sama funktsiooni kasutada k\u00fcmnetes ja sadades kohtades. Ning vahel kasutatakse abifunktsioonide teeke kogumikuna m\u00f5ne teise rakenduse juures, millest abifunktsioonide loojal ei pruugi aimugi olla. Sellisel juhul tekitaks funktsioonile parameetrite lisamine paljudes kohtades. M\u00f5nikord pole sellest p\u00e4\u00e4su &#8211; eriti kui j\u00f5udluse v\u00f5i turvalisuse huvides funktsioonilt osa oskusi maha v\u00f5etakse. Parameetrite lisamisel aga saab \u00fcldjuhul muudele koodifailidele murede tekitamisest hoiduda pannes loodud parameetrile vaikimisi v\u00e4\u00e4rtuse. Siin n\u00e4iteks siis lisatakse parameeter $sorttulp. Ning juhul, kui seda parameetrit funktsioonile ette ei anta (nt. siiamaani loodud kasutavate failide korral), sellisel juhul antakse sortimistulbale vaikimisi v\u00e4\u00e4rtuseks &#8220;nimetus&#8221;, st. et v\u00e4ljastatavad kaubad sorditakse nimetuse j\u00e4rgi t\u00e4hestikulisse j\u00e4rjekorda.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n function kysiKaupadeAndmed($sorttulp=&quot;nimetus&quot;) \n<\/pre><\/div>\n\n\n<p>Veebist saabuvaid andmeid ei v\u00f5i kunagi usaldada &#8211; n\u00e4puvea v\u00f5i pahatahtlikkuse t\u00f5ttu v\u00f5ib sealt saabuvates p\u00e4ringutes sisalduda tont-teab-mida. Et saabuvad andmed me rakendust rikkuda ei saaks, tasub \u00e4ra m\u00e4rkida, milliste tulpade j\u00e4rgi on lubatud sortida &#8211; praegu siis pikkus, grupinimi ja hind.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n $lubatudtulbad=array(&quot;nimetus&quot;, &quot;grupinimi&quot;, &quot;hind&quot;); \n<\/pre><\/div>\n\n\n<p>Kui juhtub, et palutakse andmeid j\u00e4rjestada m\u00f5ne muu (seni olematu) tunnuse j\u00e4rgi, siis lihtsalt katkestatakse funktsiooni t\u00f6\u00f6 veateatega. Kas ja mida v\u00e4ljakutsuv programm selle veateatega peale hakkab, on juba tema mure. V\u00e4hemasti ei satu sobimatud andmed edasi me SQL-lausessese andmebaasi sisse pahandust tegema.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n if(!in_array($sorttulp, $lubatudtulbad)){ \n return &quot;lubamatu tulp&quot;; \n }\n\n<\/pre><\/div>\n\n\n<p>SELECT-lause on lihtne ja suhteliselt sarnane eelmise n\u00e4ite variandiga. Lihtsalt l\u00f5ppu on tulnud m\u00e4\u00e4rang &#8220;ORDER BY $sorttulp&#8221;, mis siis vastavalt p\u00e4ringule asendatakse kas nimetuse, grupinime<\/p>\n\n\n\n<p>v\u00f5i hinnaga.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n $kask=$yhendus-&gt;prepare(&quot;SELECT kaubad.id, nimetus, grupinimi, hind  FROM kaubad, kaubagrupid \n WHERE kaubad.kaubagrupi_id=kaubagrupid.id \n ORDER BY $sorttulp&quot;); \n\n<\/pre><\/div>\n\n\n<p>V\u00e4ljakommenteeritud rida vea kuvamiseks on mugav vahend j\u00e4lgimaks, kui miski ei taha t\u00f6\u00f6le hakata. Selle k\u00e4su kaudu saab vajadusel v\u00e4lja tr\u00fckkida MySQLi poolt avastatud vigade selgitused. T\u00f6\u00f6tavasse l\u00f5ppversiooni pole koodi soovitatav neid k\u00e4sklusi sisse j\u00e4tta &#8211; serveripoolsed veateated v\u00f5ivad h\u00f5lbustada h\u00e4kkerite t\u00f6\u00f6l. Enese jaoks arenduse k\u00e4igus vigade kohta aimu saamiseks on selliste veateadete n\u00e4gemine aga igati omal kohal.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n \/\/echo $yhendus-&gt;error; \n<\/pre><\/div>\n\n\n<p>\u00dclej\u00e4\u00e4nud koodiosa j\u00e4i samaks &#8211; kergema kasutamise ja kopeerimise huvides on ta aga ka siia pandud.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php \n $yhendus=new mysqli(&quot;localhost&quot;, &quot;jaagup&quot;, &quot;xxxxxx&quot;, &quot;jaagup&quot;); \n  \n function kysiKaupadeAndmed($sorttulp=&quot;nimetus&quot;){ \n global $yhendus; \n $lubatudtulbad=array(&quot;nimetus&quot;, &quot;grupinimi&quot;, &quot;hind&quot;); \n if(!in_array($sorttulp, $lubatudtulbad)){ \n return &quot;lubamatu tulp&quot;; \n } \n $kask=$yhendus-&gt;prepare(&quot;SELECT kaubad.id, nimetus, grupinimi, hind  FROM kaubad, kaubagrupid \n WHERE kaubad.kaubagrupi_id=kaubagrupid.id \n ORDER BY $sorttulp&quot;); \n \/\/echo $yhendus-&gt;error; \n $kask-&gt;bind_result($id, $nimetus, $grupinimi, $hind); \n $kask-&gt;execute(); \n $hoidla=array(); \n while($kask-&gt;fetch()){ \n $kaup=new stdClass(); \n $kaup-&gt;id=$id; \n $kaup-&gt;nimetus=htmlspecialchars($nimetus); \n $kaup-&gt;grupinimi=htmlspecialchars($grupinimi); \n $kaup-&gt;hind=$hind; \n array_push($hoidla, $kaup); \n } \n return $hoidla; \n } \n  \n \/\/---------------  \n if( array_pop(explode(&quot;\/&quot;, $_SERVER&#x5B;&quot;PHP_SELF&quot;]))==&quot;abifunktsioonid.php&quot;): ?&gt; \n&lt;pre&gt; \n&lt;?php \n print_r(kysiKaupadeAndmed(&quot;hind&quot;)); \n?&gt; \n&lt;\/pre&gt; \n&lt;?php endif ?&gt; \n\n<\/pre><\/div>\n\n\n<p>Loodud abifunktsioone kasutame endiselt andmeotsingu lehel. Lehe algusesse tuleb juurde kontroll, kas aadressireal olevaks sort-parameetriks v\u00e4\u00e4rtuseks on saabunud midagi. Kui jah, siis palutakse andmed sordituna selle tunnuse j\u00e4rgi, muul juhul palutakse lihtsalt andmeid, kusjuures praegu siis sorditakse need funktsiooni vaikimisi parameetri ehk nimetuse j\u00e4rgi.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n if(isSet($_REQUEST&#x5B;&quot;sort&quot;])){ \n $kaubad=kysiKaupadeAndmed($_REQUEST&#x5B;&quot;sort&quot;]); \n } else { \n $kaubad=kysiKaupadeAndmed();\n } \n\n<\/pre><\/div>\n\n\n<p>Sortimistulba mugavaks valimiseks tuleb tulbad vastavateks viideteks teha, iga\u00fcks saadab kaubaotsing.php lehele parameetri sort sobiva v\u00e4\u00e4rtusega.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n &lt;tr&gt; \n &lt;th&gt;&lt;a href=&quot;kaubaotsing.php?sort=nimetus&quot;&gt;Nimetus&lt;\/a&gt;&lt;\/th&gt;  &lt;th&gt;&lt;a href=&quot;kaubaotsing.php?sort=grupinimi&quot;&gt;Kaubagrupp&lt;\/a&gt;&lt;\/th&gt;  &lt;th&gt;&lt;a href=&quot;kaubaotsing.php?sort=hind&quot;&gt;Hind&lt;\/a&gt;&lt;\/th&gt; \n &lt;\/tr&gt; \n\n<\/pre><\/div>\n\n\n<p>Muu fail ikka eelmise n\u00e4itega sarnane.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php \n require(&quot;abifunktsioonid.php&quot;); \n if(isSet($_REQUEST&#x5B;&quot;sort&quot;])){ \n $kaubad=kysiKaupadeAndmed($_REQUEST&#x5B;&quot;sort&quot;]); \n } else { \n $kaubad=kysiKaupadeAndmed(); \n } \n?&gt; \n&lt;!DOCTYPE html PUBLIC &quot;-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN&quot; \n&quot;http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd&quot;&gt; \n&lt;html xmlns=&quot;http:\/\/www.w3.org\/1999\/xhtml&quot;&gt; \n &lt;head&gt; \n &lt;title&gt;Kaupade leht&lt;\/title&gt; \n &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text\/html;charset=utf-8&quot; \/&gt;  &lt;\/head&gt; \n &lt;body&gt;  \n &lt;table&gt; \n &lt;tr&gt; \n &lt;th&gt;&lt;a href=&quot;kaubaotsing.php?sort=nimetus&quot;&gt;Nimetus&lt;\/a&gt;&lt;\/th&gt;  &lt;th&gt;&lt;a href=&quot;kaubaotsing.php?sort=grupinimi&quot;&gt;Kaubagrupp&lt;\/a&gt;&lt;\/th&gt;  &lt;th&gt;&lt;a href=&quot;kaubaotsing.php?sort=hind&quot;&gt;Hind&lt;\/a&gt;&lt;\/th&gt; \n &lt;\/tr&gt; \n &lt;?php foreach($kaubad as $kaup): ?&gt; \n &lt;tr&gt; \n &lt;td&gt;&lt;?=$kaup-&gt;nimetus ?&gt;&lt;\/td&gt; \n &lt;td&gt;&lt;?=$kaup-&gt;grupinimi ?&gt;&lt;\/td&gt; \n &lt;td&gt;&lt;?=$kaup-&gt;hind ?&gt;&lt;\/td&gt; \n &lt;\/tr&gt; \n &lt;?php endforeach; ?&gt; \n &lt;\/table&gt; \n &lt;\/body&gt; \n&lt;\/html&gt; \n\n<\/pre><\/div>\n\n\n<p>\u00a0Nagu n\u00e4itest n\u00e4ha v\u00f5ib, siis hinnale vajutades ka tulevad andmed hinna j\u00e4rjekorras.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"427\" height=\"120\" src=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP2_.png\" alt=\"\" class=\"wp-image-274\" srcset=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP2_.png 427w, https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP2_-300x84.png 300w\" sizes=\"auto, (max-width: 427px) 100vw, 427px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Suuremast andmehulgast sobiva leidmisel aitab sageli andmete sortimine soovitud tunnuse j\u00e4rgi. Telefoniraamatust n\u00e4iteks nime j\u00e4rgi numbri leidmine on suhteliselt lihtne toimetus. Numbri j\u00e4rgi kindlaks tegemine, et kellele see kuulub, n\u00f5uab aga palju rohkem vaeva. K\u00f5ik lihtsalt sellep\u00e4rast, et telefoniraamat on sorditud nimede j\u00e4rgi.&nbsp;&nbsp; J\u00e4rgnevas n\u00e4ites t\u00e4iendame kaupade loetelu otsinguv\u00f5imalusega. Andmebaasip\u00f5hises lehestikus \u00fche tulba j\u00e4rgi sortida &hellip; <a href=\"https:\/\/tarkvara.thkit.ee\/veeb\/sortimine\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Sortimine<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-262","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/comments?post=262"}],"version-history":[{"count":11,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/262\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/262\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/media?parent=262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}