{"id":144,"date":"2023-03-03T17:49:18","date_gmt":"2023-03-03T17:49:18","guid":{"rendered":"https:\/\/tarkvara.thkit.ee\/veeb\/?page_id=144"},"modified":"2023-03-03T17:51:22","modified_gmt":"2023-03-03T17:51:22","slug":"andmete-lisamine-ja-kustutamine","status":"publish","type":"page","link":"https:\/\/tarkvara.thkit.ee\/veeb\/andmete-lisamine-ja-kustutamine\/","title":{"rendered":"Andmete lisamine ja kustutamine"},"content":{"rendered":"\n<p>Veebi kaudu on andmeid ilus vaadata. Ainult, et sellisena saab lehed ka ilma serveripoolse programmeerimistoeta t\u00f6\u00f6le panna. Vajadusel saab kindla arvu lehti kopeerida ning viited vastavalt s\u00e4ttida ning v\u00f5ibki andmeid soovitult lugeda. Kui aga tahta, et kasutajapoolsed andmed ka kuidagi serverisse talletuks ning teised neid lugeda saaks &#8211; seda juba naljalt ilma serveripoolse programmita teha ei \u00f5nnestu. Muidugi kaasnevad serveris talletamisega ka omad mured: keegi v\u00f5ib hooletusest v\u00f5i pahatahtlikkusest sinna hulgem andmeid saata ning sellega serveris oleva andmebaasi t\u00e4is kirjutada v\u00f5i lihtsalt kahtlaste postitustega suure hulga segadust tekitada. Aga hea ja halb k\u00e4ivad<\/p>\n\n\n\n<p>k\u00e4sik\u00e4es ning mugavuse nimel tuleb vahel ka m\u00f5nev\u00f5rra riskida. Abilisteks hiljem varukoopiad, registreerimised, modereerimised ja muud t\u00e4iendused.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Andmete lisamiseks tuleb need k\u00f5igepealt kasutajalt k\u00e4tte saada. Selleks sobib sisestusvorm &#8211; olgu siis pidevalt lehel n\u00e4htaval v\u00f5i eraldi viite peale n\u00e4idatav. Sisestusvormist tulevad andmed saadetakse salvestamiseks serverisse. Siinses n\u00e4ites toimib k\u00f5ik sama faili kaudu, kuid iseenesest v\u00f5ib toimetuse jaoks ka eraldi teine v\u00e4ike fail loodud olla. P\u00e4rast andmete salvestamist on kasulik leht uuesti edasi suunata &#8211; kas v\u00f5i samale lehele, aga n\u00f5nda, et inimese sisestatud andmed uuesti kaasa ei tuleks &#8211; sellisel juhul pole karta, et v\u00e4rskendusnupu vajutamine andmeid korduvalt salvestama hakkab.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Lisamisvormi n\u00e4htavaks muutumiseks loodi viide parameetriga lisamine.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n &lt;a href=&#039;?lisamine=jah&#039;&gt;Lisa ...&lt;\/a&gt; \n<\/pre><\/div>\n\n\n<p>Kui selline parameeter j\u00f5uab serverisse, siis n\u00e4idatakse kasutajale t\u00fchjad lahtrid, kuhu oma andmed kirja panna. Definition list (dl) koos nimetuse (definition term, dt) ning sisuga (dd, definition data) v\u00f5imaldab mugavalt sisestuselemendid koos seletustega v\u00e4lja kuvada. Kaasas on ka varjatud element nimega uusleht, mille abil siis hiljem kontrollida, et kasutaja on uue lehe andmed saatnud. Andmete teele panekuks veebis nupp t\u00fc\u00fcbist submit.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n if(isSet($_REQUEST&#x5B;&quot;lisamine&quot;])){ \n ?&gt; \n &lt;form action=&#039;?&#039;&gt; \n &lt;input type=&quot;hidden&quot; name=&quot;uusleht&quot; value=&quot;jah&quot; \/&gt;  &lt;h2&gt;Uue teate lisamine&lt;\/h2&gt; \n &lt;dl&gt; \n &lt;dt&gt;Pealkiri:&lt;\/dt&gt; \n &lt;dd&gt; \n &lt;input type=&quot;text&quot; name=&quot;pealkiri&quot; \/&gt; \n &lt;\/dd&gt; \n &lt;dt&gt;Teate sisu:&lt;\/dt&gt; \n &lt;dd&gt; \n &lt;textarea rows=&quot;20&quot; name=&quot;sisu&quot;&gt;&lt;\/textarea&gt;  &lt;\/dd&gt; \n &lt;\/dl&gt; \n &lt;input type=&quot;submit&quot; value=&quot;sisesta&quot;&gt; \n &lt;\/form&gt; \n &lt;?php \n } \n ?&gt; \n\n<\/pre><\/div>\n\n\n<p>Nupule vajutades avatakse leht uuesti. Kaasa liiguvad eelnevalt v\u00e4ljadesse sisestatud andmed. Eelnevalt varjatult kaasa pandud parameeter nimega uusleht n\u00e4itab, et n\u00fc\u00fcd on paras aeg saabuvad andmed tabelisse kirjutada. Andmete lisamiseks tabelisse on INSERT-lause. Lisatavate v\u00e4\u00e4rtuste kohta tulevad algul k\u00fcsim\u00e4rgid, bind_param-k\u00e4su abil paigutatakse nende asemele tegelikud v\u00e4\u00e4rtused. Tekst &#8220;ss&#8221; bind_param-k\u00e4su esimese parameetrina n\u00e4itab, et m\u00f5lemad saabuvad v\u00e4\u00e4rtused on stringi ehk teksti t\u00fc\u00fcpi. V\u00e4\u00e4rtusteks on siis pealkiri ja sisu, mis $_REQUEST muutujast sisse loetakse. V\u00e4ltimaks lehe korduslaadimisel uuesti salvestamist, tasub Location p\u00e4isek\u00e4suga lehe avamine edasi suunata &#8211; kas v\u00f5i samale lehele ($_SERVER[PHP_SELF]). Viisakasti siis andmebaasi\u00fchendus ka sealjuures kinni ning lehe avamisele l\u00f5pp &#8211; exit();<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n if(isSet($_REQUEST&#x5B;&quot;uusleht&quot;])){ \n $kask=$yhendus-&gt;prepare(&quot;INSERT INTO lehed (pealkiri, sisu) VALUES (?, ?)&quot;);  $kask-&gt;bind_param(&quot;ss&quot;, $_REQUEST&#x5B;&quot;pealkiri&quot;], $_REQUEST&#x5B;&quot;sisu&quot;]);  $kask-&gt;execute();\n header(&quot;Location: $_SERVER&#x5B;PHP_SELF]&quot;); \n $yhendus-&gt;close(); \n exit(); \n } \n\n<\/pre><\/div>\n\n\n<p>N\u00e4ites lisati ka kustutamise moodus. Eraldi vaatamise lehel sai juurde kustutamise viide, kus aadressiga suunatakse samale lehele ning antakse kaasa kustutusid.\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n echo &quot;&lt;h2&gt;&quot;.htmlspecialchars($pealkiri).&quot;&lt;\/h2&gt;&quot;;  echo htmlspecialchars($sisu); \n echo &quot;&lt;br \/&gt;&lt;a href=&#039;?kustutusid=$id&#039;&gt;kustuta&lt;\/a&gt;&quot;;\n<\/pre><\/div>\n\n\n<p>Lehe p\u00e4ises kustutusid saabumisel k\u00e4ivitatakse DELETE-lause koos etteantud kirje numbriga.\u00a0\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n if(isSet($_REQUEST&#x5B;&quot;kustutusid&quot;])){ \n $kask=$yhendus-&gt;prepare(&quot;DELETE FROM lehed WHERE id=?&quot;); \n $kask-&gt;bind_param(&quot;i&quot;, $_REQUEST&#x5B;&quot;kustutusid&quot;]); \n $kask-&gt;execute();  \n } \n\n<\/pre><\/div>\n\n\n<p>Lisamis- ja kustutusv\u00f5imeline 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;);  if(isSet($_REQUEST&#x5B;&quot;uusleht&quot;])){ \n $kask=$yhendus-&gt;prepare(&quot;INSERT INTO lehed (pealkiri, sisu) VALUES (?, ?)&quot;);  $kask-&gt;bind_param(&quot;ss&quot;, $_REQUEST&#x5B;&quot;pealkiri&quot;], $_REQUEST&#x5B;&quot;sisu&quot;]);  $kask-&gt;execute(); \n header(&quot;Location: $_SERVER&#x5B;PHP_SELF]&quot;); \n $yhendus-&gt;close(); \n exit(); \n } \n if(isSet($_REQUEST&#x5B;&quot;kustutusid&quot;])){ \n $kask=$yhendus-&gt;prepare(&quot;DELETE FROM lehed WHERE id=?&quot;); \n $kask-&gt;bind_param(&quot;i&quot;, $_REQUEST&#x5B;&quot;kustutusid&quot;]); \n $kask-&gt;execute();  \n } \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;style type=&quot;text\/css&quot;&gt; \n #menyykiht{ \n float: left; \n padding-right: 30px; \n } \n #sisukiht{ \n float:left; \n } \n #jalusekiht{ \n clear: left; \n } \n &lt;\/style&gt; \n &lt;\/head&gt; \n &lt;body&gt; \n &lt;div id=&quot;menyykiht&quot;&gt; \n &lt;h2&gt;Teated&lt;\/h2&gt; \n &lt;ul&gt; \n &lt;?php \n $kask=$yhendus-&gt;prepare(&quot;SELECT id, pealkiri FROM lehed&quot;);\n $kask-&gt;bind_result($id, $pealkiri); \n $kask-&gt;execute(); \n while($kask-&gt;fetch()){ \n echo &quot;&lt;li&gt;&lt;a href=&#039;?id=$id&#039;&gt;&quot;. \n htmlspecialchars($pealkiri).&quot;&lt;\/a&gt;&lt;\/li&gt;&quot;;  } \n ?&gt; \n &lt;\/ul&gt; \n &lt;a href=&#039;?lisamine=jah&#039;&gt;Lisa ...&lt;\/a&gt; \n &lt;\/div&gt; \n &lt;div id=&quot;sisukiht&quot;&gt; \n &lt;?php \n if(isSet($_REQUEST&#x5B;&quot;id&quot;])){ \n $kask=$yhendus-&gt;prepare(&quot;SELECT id, pealkiri, sisu FROM lehed  WHERE id=?&quot;); \n $kask-&gt;bind_param(&quot;i&quot;, $_REQUEST&#x5B;&quot;id&quot;]);  \n $kask-&gt;bind_result($id, $pealkiri, $sisu); \n $kask-&gt;execute(); \n if($kask-&gt;fetch()){ \n echo &quot;&lt;h2&gt;&quot;.htmlspecialchars($pealkiri).&quot;&lt;\/h2&gt;&quot;;  echo htmlspecialchars($sisu); \n echo &quot;&lt;br \/&gt;&lt;a href=&#039;?kustutusid=$id&#039;&gt;kustuta&lt;\/a&gt;&quot;;  } else { \n echo &quot;Vigased andmed.&quot;; \n } \n }  \n if(isSet($_REQUEST&#x5B;&quot;lisamine&quot;])){ \n ?&gt; \n &lt;form action=&#039;?&#039;&gt; \n &lt;input type=&quot;hidden&quot; name=&quot;uusleht&quot; value=&quot;jah&quot; \/&gt;  &lt;h2&gt;Uue teate lisamine&lt;\/h2&gt; \n &lt;dl&gt; \n &lt;dt&gt;Pealkiri:&lt;\/dt&gt; \n &lt;dd&gt; \n &lt;input type=&quot;text&quot; name=&quot;pealkiri&quot; \/&gt; \n &lt;\/dd&gt; \n &lt;dt&gt;Teate sisu:&lt;\/dt&gt; \n &lt;dd&gt; \n &lt;textarea rows=&quot;20&quot; name=&quot;sisu&quot;&gt;&lt;\/textarea&gt;  &lt;\/dd&gt; \n &lt;\/dl&gt; \n &lt;input type=&quot;submit&quot; value=&quot;sisesta&quot;&gt; \n &lt;\/form&gt; \n &lt;?php \n } \n ?&gt; \n &lt;\/div&gt; \n &lt;div id=&quot;jalusekiht&quot;&gt; \n Lehe tegi Jaagup \n &lt;\/div&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>Veebi kaudu on andmeid ilus vaadata. Ainult, et sellisena saab lehed ka ilma serveripoolse programmeerimistoeta t\u00f6\u00f6le panna. Vajadusel saab kindla arvu lehti kopeerida ning viited vastavalt s\u00e4ttida ning v\u00f5ibki andmeid soovitult lugeda. Kui aga tahta, et kasutajapoolsed andmed ka kuidagi serverisse talletuks ning teised neid lugeda saaks &#8211; seda juba naljalt ilma serveripoolse programmita teha &hellip; <a href=\"https:\/\/tarkvara.thkit.ee\/veeb\/andmete-lisamine-ja-kustutamine\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Andmete lisamine ja kustutamine<\/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-144","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/144","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=144"}],"version-history":[{"count":6,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/144\/revisions"}],"predecessor-version":[{"id":150,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/144\/revisions\/150"}],"wp:attachment":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/media?parent=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}