{"id":276,"date":"2023-03-24T21:20:33","date_gmt":"2023-03-24T21:20:33","guid":{"rendered":"https:\/\/tarkvara.thkit.ee\/veeb\/?page_id=276"},"modified":"2023-03-24T21:26:18","modified_gmt":"2023-03-24T21:26:18","slug":"otsimine","status":"publish","type":"page","link":"https:\/\/tarkvara.thkit.ee\/veeb\/otsimine\/","title":{"rendered":"Otsimine"},"content":{"rendered":"\n<p>Sortimine aitab andmete juures, kus tulba tekst algab otsitava v\u00e4\u00e4rtusega. Kui aga otsitav l\u00f5ik v\u00f5ib asuda teksti sees, siis paljas tekstide v\u00f5i arvude t\u00e4hestikulisse v\u00f5i kasvavasse j\u00e4rjekorda seadmine ei aita soovitud rida leida. Sellisel puhul on abiliseks otsimisv\u00f5imalus. T\u00e4nap\u00e4evastel veebilehestikel on see paljudel sisse ehitatud. Ning kui ka pole, siis m\u00f5nev\u00f5rra saab toetuda ka Google otsingule, kirjutades otsingu ette site:masinanimi. N\u00e4iteks otsing &#8220;site:minitorn.tlu.ee php&#8221; annab minitorn.tlu.ee masinas PHPga seotud lehed &#8211; niipalju, kui otsimootor neid sealt leidnud on.&nbsp;<\/p>\n\n\n\n<p>Oma s\u00e4rk aga ikka ihule k\u00f5ige l\u00e4hemal ning isetehtud otsingu peale v\u00f5ib ka ehk kindlam olla, et ta just vajalikest kohtadest otsib. Funktsioonile tuleb siis juurde j\u00e4rjekordne parameeter. Ning kui otsis\u00f5na ei m\u00e4\u00e4rata, siis selle v\u00e4\u00e4rtuseks saab t\u00fchi tekst &#8211; ehk osa, mis igas tekstis leidub ning v\u00e4lja kuvatakse k\u00f5ik andmed.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n function kysiKaupadeAndmed($sorttulp=&quot;nimetus&quot;, $otsisona=&quot;&quot;){ \n<\/pre><\/div>\n\n\n<p>PHP murelapseks on \u00fcle veebi saabuvate s\u00fcmbolite varjestamine langjoontega. Toimetus oli vajalik saabuvate andmete paigutamiseks MySQLi p\u00e4ringusse. MySQLi seda aga \u00fcldjuhul ei vaja ning serveri konfiguratsioonis v\u00f5ib olla eris\u00fcmbolite varjestus maha v\u00f5etud. Et k\u00fcsim\u00e4rgiga parameeter mugavalt tekstisobivust otsivasse LIKE-lausesse ei l\u00e4he, tuleb siin otsitav parameeter otse SQLi paigutada. Kui ei tea, kas varjestavad langjooned on ees v\u00f5i mitte, siis \u00fcheks v\u00f5imaluseks on need maha v\u00f5tta stripslashes-k\u00e4suga ning hiljem uuesti addslashes-k\u00e4suga tagasi panna. Puuduva varjestuse puhul pole ka stripslashes-il midagi maha v\u00f5tta, teine peale paneb ikka, et oleks andmebaasilauses k\u00f5ik korrektne.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n $otsisona=addslashes(stripslashes($otsisona)); \n<\/pre><\/div>\n\n\n<p>Otsinguosa saab lause WHERE-ossa olemasolevale tingimusele otsa liita. Siin otsime korraga nimetuse ja grupinime seest &#8211; \u00fcksk\u00f5ik kummas otsitav l\u00f5ik leitakse, sobiv rida kuvatakse ikka tulemusena. Et kaupade tabeli kaubagrupi_id j\u00e4rgi kaubagrupi tabeli id-le viitamist ikka alati kontrollitaks, selleks peab ORidega kahe tulba j\u00e4rgi otsing eraldi sulgudes olema.<\/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 AND (nimetus LIKE &#039;%$otsisona%&#039; OR grupinimi LIKE &#039;%$otsisona%&#039;)  ORDER BY $sorttulp&quot;); \n\n<\/pre><\/div>\n\n\n<p>Ning fail tervikuna.<\/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;, $otsisona=&quot;&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 $otsisona=addslashes(stripslashes($otsisona)); \n $kask=$yhendus-&gt;prepare(&quot;SELECT kaubad.id, nimetus, grupinimi, hind  FROM kaubad, kaubagrupid \n WHERE kaubad.kaubagrupi_id=kaubagrupid.id \n AND (nimetus LIKE &#039;%$otsisona%&#039; OR grupinimi LIKE &#039;%$otsisona%&#039;)  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;, &quot;fass\\\\aad&quot;)); \n?&gt; \n&lt;\/pre&gt; \n&lt;?php endif ?&gt; \n\n<\/pre><\/div>\n\n\n<p>Kaubaotsingu failis tuleb juurde koht otsinguteksti sisestamiseks. Ning sisestuselemendil peab \u00fcmber olema vorm koos action&#8217;iga m\u00e4\u00e4ramaks, kuhu faili sisestatud andmed saata.\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n &lt;form action=&quot;kaubaotsing.php&quot;&gt; \n Otsi: &lt;input type=&quot;text&quot; name=&quot;otsisona&quot; \/&gt; \n ... \n &lt;\/form&gt; \n\n<\/pre><\/div>\n\n\n<p>Kuna veebilehe puhul ei ole n\u00fc\u00fcd enam teada, kas \u00fcldse ja kumb parameeter on v\u00e4\u00e4rtustatud, siis on heaks mooduseks neile ka PHP-lehel vaikev\u00e4\u00e4rtused anda. H\u00e4dap\u00e4rast v\u00f5iks t\u00f6\u00f6tada ka vorm&nbsp;$kaubad=kysiKaupadeAndmed($_REQUEST[&#8220;sort&#8221;], $_REQUEST[&#8220;otsisona&#8221;]), aga kui vastavad parameetrid lehel puudu (nt. esimest korda avades), siis v\u00f5ib PHP server vastava konfiguratsiooni puhul hakata hoiatusi andma, et k\u00fcsitakse olematuid v\u00e4\u00e4rtusi massiivist. N\u00f5nda siis j\u00e4rgmine lehekuju koos algusega ikka kindlam.<\/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 $sorttulp=&quot;nimetus&quot;; \n $otsisona=&quot;&quot;; \n if(isSet($_REQUEST&#x5B;&quot;sort&quot;])){ \n $sorttulp=$_REQUEST&#x5B;&quot;sort&quot;]; \n } \n if(isSet($_REQUEST&#x5B;&quot;otsisona&quot;])){ \n $otsisona=$_REQUEST&#x5B;&quot;otsisona&quot;]; \n } \n $kaubad=kysiKaupadeAndmed($sorttulp, $otsisona); \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;form action=&quot;kaubaotsing.php&quot;&gt; \n Otsi: &lt;input type=&quot;text&quot; name=&quot;otsisona&quot; \/&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;\/form&gt; \n &lt;\/body&gt; \n&lt;\/html&gt; \n\n<\/pre><\/div>\n\n\n<p>N\u00e4ide otsinguteksti sisestamise kohta<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"346\" height=\"151\" src=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP3_.png\" alt=\"\" class=\"wp-image-286\" srcset=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP3_.png 346w, https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP3_-300x131.png 300w\" sizes=\"auto, (max-width: 346px) 100vw, 346px\" \/><\/figure>\n\n\n\n<p>Ning aadressiriba peale j\u00f5udnud s\u00f5na j\u00e4rgi otsingutulemus.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"305\" height=\"106\" src=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP4_.png\" alt=\"\" class=\"wp-image-287\" srcset=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP4_.png 305w, https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/03\/KAUBA.PHP4_-300x104.png 300w\" sizes=\"auto, (max-width: 305px) 100vw, 305px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Sortimine aitab andmete juures, kus tulba tekst algab otsitava v\u00e4\u00e4rtusega. Kui aga otsitav l\u00f5ik v\u00f5ib asuda teksti sees, siis paljas tekstide v\u00f5i arvude t\u00e4hestikulisse v\u00f5i kasvavasse j\u00e4rjekorda seadmine ei aita soovitud rida leida. Sellisel puhul on abiliseks otsimisv\u00f5imalus. T\u00e4nap\u00e4evastel veebilehestikel on see paljudel sisse ehitatud. Ning kui ka pole, siis m\u00f5nev\u00f5rra saab toetuda ka Google &hellip; <a href=\"https:\/\/tarkvara.thkit.ee\/veeb\/otsimine\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Otsimine<\/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-276","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/276","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=276"}],"version-history":[{"count":9,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/276\/revisions"}],"predecessor-version":[{"id":288,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/276\/revisions\/288"}],"wp:attachment":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/media?parent=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}