{"id":137,"date":"2023-03-03T17:44:20","date_gmt":"2023-03-03T17:44:20","guid":{"rendered":"https:\/\/tarkvara.thkit.ee\/veeb\/?page_id=137"},"modified":"2023-03-03T17:44:20","modified_gmt":"2023-03-03T17:44:20","slug":"tabeli-sisu-vaatamine","status":"publish","type":"page","link":"https:\/\/tarkvara.thkit.ee\/veeb\/tabeli-sisu-vaatamine\/","title":{"rendered":"Tabeli sisu vaatamine"},"content":{"rendered":"\n<p>Andmebaasitabelis kannatab andmeid hoida ning SQL-k\u00e4skude v\u00f5i m\u00f5ne haldusliidese kaudu saab neid ka sinna lisada v\u00f5i sealt vaadata. Tavakasutaja aga eeldab, et ta n\u00e4eb v\u00f5i sisestab veebilehitseja aknast just seda mis talle vaja ning ei taha ega j\u00f5ua end koormata mitmesuguste tehniliste trikkidega. Veebirakenduse loojate \u00fcks t\u00e4htis \u00fclesanne ongi andmed sobival kujul kasutajale ette n\u00e4idata ning samuti veebilehtedel tehtud muutused p\u00e4rast tabelites j\u00e4rgmiste kasutuskordade tarbeks talletada.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Sarnaselt kui ise SQL-k\u00e4sklusi andmebaasi k\u00e4sureale kirjutades \u00f5nnestub andmeid lisada ja k\u00fcsida, saab ka PHP andmebaasiga SQL-k\u00e4skude kaudu sidet pidada. \u00dcheks v\u00f5imaluseks k\u00e4ske veebilehe koodist andmebaasini vahendada on teek nimega MySQL Improved. Nii nagu k\u00e4sitsi andmebaasiga suheldes peab teadma, kus masinas baas asub, millise kasutajanime ja parooliga sinna ligi p\u00e4\u00e4seb ning millise nimega baasiga on tegemist &#8211; samad andmed vaja teada ka PHP poolt \u00fchendust luues. Kui PHP ja MySQL asuvad samas masinas, siis sobib baasiserveri nimeks localhost. Siin n\u00e4ites pruugin kasutajanimeks ja parooliks juku ning kala. Ja baasi nimeks siin jukubaas2. Eks oma lahendust luues tule siis need v\u00e4\u00e4rtused sisse kirjutada, mis parajasti pruukida on v\u00f5i teenusepakkujalt antakse. XAMPP vaikimisi seadete korral sobib n\u00e4iteks serveriks &#8220;localhost&#8221;, kasutajaks &#8220;root&#8221;, parooliks t\u00fchi tekst &#8220;&#8221; ning katsetada saab baasis nimega &#8220;test&#8221;. Avalikuks v\u00e4ljapanekuks pole selline komplekt k\u00fcll viisakas, aga oma arvutis toimetamiseks k\u00e4ib k\u00fcll.&nbsp;<\/p>\n\n\n\n<p>Edasi tuleb andmete k\u00e4ttesaamiseks mitu sammu ette v\u00f5tta. M\u00f5ne vahendiga saab veidi lihtsamalt,<\/p>\n\n\n\n<p>aga MySQL Improved teegi eeliseks on, et kui andmed viisakalt ette valmistada ning andmete SQL k\u00e4skudesse panekuks kasutada eelkompileeritud k\u00e4sklusi (prepared statement), siis pole karta, et pahatahtlikke sisestuste abil veebilehtedelt saaks suuremat kurja teha. Muidu on aastaid olnud probleemiks, et kavalad veebilehtedel sisse kirjutatud laused v\u00f5ivad serveris k\u00e4ima minna ning pahandust tekitada. Lihtsamal juhul oma rakenduse andmeid kustutades v\u00f5i muutes, kuid keerukamatel juhtudel v\u00f5ivad l\u00f6\u00f6gi alla sattuda ka teiste rakenduste andmed v\u00f5i lausa v\u00e4lised serverid, kui kord sisse murtud masinat edasiste r\u00fcnnakute alusena kasutatakse. Seet\u00f5ttu siis siin matejalis andmete vahendajaks MySQL Improved t\u00fc\u00fcpi objekt, mida luuakse k\u00e4suga new mysqli ja antakse vajalikud \u00fchendumisparameetrid kaasa.&nbsp;&nbsp;<\/p>\n\n\n\n<p>J\u00e4rgneva prepare-lausega palutakse $yhendus-nimelises muutuja kaudu k\u00e4ttesaadaval mysqli objektil ette valmistada SQL-lause lehtede andmetabelist id, pealkirja ja sisu k\u00fcsimiseks. Edasine bind_result m\u00e4\u00e4rab, kuhu muutujatesse saadud andmed pannakse. Andmebaasiga suhtlevad vahendid tehakse n\u00f5nda, et nad suudaksid toimida ka v\u00e4ga suurte andmekoguste korral ning ei loeks ilmaasjata suuremat kogust v\u00e4\u00e4rtusi m\u00e4llu. N\u00e4iteks miljon rida on andmebaasis hoidmise jaoks t\u00e4iesti k\u00f5lbulik kogus. Korraga m\u00e4llu lugemisel v\u00f5tab miljon kirjet aga hulga megabaite ning sealt hiljem midagi vajalikku k\u00e4tte saada v\u00f5ib t\u00fclikas olla.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Edasi tulev execute() paneb k\u00e4skluse baasis k\u00e4ima. \u00d5nnetusena ei hoiatata, kui see lause unustatakse, aga lihtsalt andmeid ei saa k\u00e4tte.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Vahepeal on m\u00f5ningane osa HTML-i lehe kujunduse kuvamiseks. Baasis tulevate andmetega hakatakse tegelema siis, kui saabub ts\u00fckkel while($kask-&gt;fetch()). Iga fetch-k\u00e4sklus t\u00f5stab p\u00e4ringu vastuste juurest \u00fche rea bind_param-k\u00e4suga m\u00e4\u00e4ratud muutujatesse ning nendega v\u00f5ib ts\u00fcklikringi jooksul vajalikud toimetused ette v\u00f5tta. N\u00f5nda on korraga muutujate kaudu m\u00e4lus vaid \u00fche andmerea ehk lehe andmed ning rakendus ei v\u00f5ta serveri m\u00e4lu kuigiv\u00f5rd. Praegu tr\u00fckitakse pealkiri lihtsalt &lt;h2&gt; ja &lt;\/h2&gt; vahele ning n\u00e4idatakse seet\u00f5ttu suurema ja rasvasena v\u00e4lja. Sisu tuleb tavalise l\u00f5igu ehk div-ina. K\u00e4sk htmlspecialchars aitab hoolitseda, et kogemata andmete hulka sattunud eris\u00fcmbolid (peamiselt &lt; ja &gt;) ei tekitaks lehe \u00fclesehituse juures segadust.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Lehe v\u00e4ljastuse l\u00f5ppemisel on viisakas andmebaasi\u00fchendus kinni panna.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Lehti v\u00e4ljastav kood 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;juku&quot;, &quot;kala&quot;, &quot;jukubaas2&quot;);  $kask=$yhendus-&gt;prepare(&quot;SELECT id, pealkiri, sisu FROM lehed&quot;);  $kask-&gt;bind_result($id, $pealkiri, $sisu); \n $kask-&gt;execute(); \n?&gt; \n&lt;!doctype html&gt; \n&lt;html&gt; \n &lt;head&gt; \n &lt;title&gt;Teated lehel&lt;\/title&gt; \n &lt;\/head&gt; \n &lt;body&gt; \n &lt;h1&gt;Teadete loetelu&lt;\/h1&gt; \n &lt;?php \n while($kask-&gt;fetch()){ \n echo &quot;&lt;h2&gt;&quot;.htmlspecialchars($pealkiri).&quot;&lt;\/h2&gt;&quot;; \n echo &quot;&lt;div&gt;&quot;.htmlspecialchars($sisu).&quot;&lt;\/div&gt;&quot;; \n } \n ?&gt; \n &lt;\/body&gt; \n&lt;\/html&gt; \n&lt;?php \n $yhendus-&gt;close(); \n?&gt;\n\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Andmebaasitabelis kannatab andmeid hoida ning SQL-k\u00e4skude v\u00f5i m\u00f5ne haldusliidese kaudu saab neid ka sinna lisada v\u00f5i sealt vaadata. Tavakasutaja aga eeldab, et ta n\u00e4eb v\u00f5i sisestab veebilehitseja aknast just seda mis talle vaja ning ei taha ega j\u00f5ua end koormata mitmesuguste tehniliste trikkidega. Veebirakenduse loojate \u00fcks t\u00e4htis \u00fclesanne ongi andmed sobival kujul kasutajale ette n\u00e4idata &hellip; <a href=\"https:\/\/tarkvara.thkit.ee\/veeb\/tabeli-sisu-vaatamine\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Tabeli sisu vaatamine<\/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-137","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/137","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=137"}],"version-history":[{"count":1,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/137\/revisions"}],"predecessor-version":[{"id":138,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/137\/revisions\/138"}],"wp:attachment":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/media?parent=137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}